2017-06-06 106 views
0

我正嘗試使用ffmpeg將源VBR SPTS MPEG-2 TS文件轉換爲CBR。我使用的代碼如下:ffmpeg VBR - > CBR轉換和MPEG-2 TS視頻流的流式傳輸

#!/bin/bash 

pkill ffmpeg 

ffmpeg \ 
     -re -i source.ts -c copy \ 
     -muxrate 18000K \ 
     -f mpegts \ 
     udp://destination_ip:1234?pkt_size=1316 

源VPID比特率爲〜10Mbps,APID爲296Kbps。所以根據我的理解,這個代碼應該提供18Mbp​​s的CBR,其中所有PID的複用率和比特率之間的差值用空包填充。

問題是,輸出遠非完美。整體比特率最好是半CBR。它的範圍在12Mbps和15Mbps之間,我看到很多PCR準確度和PCR重複錯誤以及VPID和APID上的CC錯誤。

回答

1

一些想法:

  • 確保您有最新的ffmpeg版本,因爲在某些時候有它搞砸時流複製
  • 如果你想不斷UDP輸出效果,必須PCR插入一個bug使用bitrate選項,如:

    -flush_packets 0 -f mpegts "udp://destination_ip:1234?pkt_size=1316&bitrate=18000000" 
    
  • UDP是不可靠的協議,你可能會遇到丟包(不幸的是bitrate選項僅適用於UDP現在據我所知)
  • 如果你有一個專用連接,但仍然體驗CC的錯誤檢查目標OS最大UDP緩衝區大小,並確保它可以處理18 Mbps的
+0

嗯,我的ffmpeg版本是2.8.11-0ubuntu0.16.04.1。明天我可以嘗試從源代碼安裝最新版本。但是在我目前的版本中,我沒有任何填充,並且比特率在很大程度上波動。儘管我已經使用tsplay獲得了更好的結果。並且流式傳輸相同的TS文件實際上會產生更少的PCR錯誤。 –

+0

@GeorgеStoyanov如果你想快速檢查最新的沒有編譯嘗試最近[靜態構建](https://johnvansickle.com/ffmpeg/)。 – LordNeckbeard

+0

@GeorgеStoyanov如果您想要實現真正的H.264 CBR而不是插入NULL數據包,還有另一種方法。 – aergistal

0
  1. 指定-minrate還有-maxrate。使用-bufsize大於bitrate
  2. -muxrate值如bufsize

最後的命令:

ffmpeg \ 
    -re -i source.ts \ 
    -b:v 10500k \ 
    -minrate 10500k \ 
    -maxrate 10500k \ 
    -bufsize 18000k \ 
    -muxrate 18000k \ 
    -f mpegts \ 
    udp://destination_ip:1234?pkt_size=1316 
+0

@entrophy,感謝您的評論,我會測試它並分享我的發現。 –