2011-11-12 95 views
2

大家好,感謝您的閱讀!如何避免聲音和原始視頻數據之間的ffmpeg延遲?

這是我的問題:我有一個程序管道原始視頻幀到標準輸出。該程序使用OpenCV來捕獲和處理視頻並直接輸出處理後的幀。該循環與我選擇的幀速率同步。我使用ffmpeg從標準輸入中讀取,並且一切正常工作的視頻。 但現在我添加了聲音,我有一個很大的問題:發生了越來越多的延遲,我真的需要擺脫它。所以這裏是我的想法,但我真的需要你的幫助:

我必須找到一種方法來包括一個時間戳信息的原始視頻。爲了被ffmpeg理解,它需要是一個已知的原始視頻兼容容器。然後我將需要使用容器API並將其傳遞到我的程序中的標準輸出。我真的不知道在視頻格式和編解碼器的叢林中使用什麼,我不知道如何啓用時間戳同步在ffmpeg ...

如果任何人有一個想法,我真的很感興趣。有關信息,這裏是命令行我用它來管的原始視頻:

./myprogram | ffmpeg -y -f alsa -i pulse -ac 2 -f rawvideo -vcodec rawvideo -r 24 -s 640x480 -pix_fmt bgr24 -i - -vcodec libx264 -pix_fmt yuv420p -r 24 -f flv -ar 44100 out.flv; 

Thand你非常多,

羅蘭

回答

0

視頻和音頻之間的延遲是在多媒體的老問題空間。沒有解決它的銀彈,但你可以嘗試使用不同的編解碼器(特別是較新的編解碼器,而不是來自微軟)。您可能會發現較低的延遲,而對於體面的視頻長度(1小時),沒有任何麻煩。

0

最簡單的方法就是分段處理音頻&視頻文件,比如說剪切30分鐘的視頻和音頻。由於流是異步的,你可以使用ffmpeg來控制它,參見指南herehere,好處是你不需要兩個文件(流),因爲ffmpeg可以與來自SAME文件的源一起工作。

一旦你找到了延遲,重複下一個段,等等。

有時音頻可能會超過30分鐘,比如33分鐘。然後我會使用'Audacity'將長度縮短到合併前的30分鐘。

+0

謝謝阿爾文,您的鏈接非常有幫助!但是我忘了說什麼以及哪個非常重要,我使用ffmpeg進行流式處理...在最終的應用程序中,我將用rtmp網址替換flv文件名,所以我不能使用大膽處理進行後期處理例如。但在你的鏈接中,人們會根據ffmpeg文檔討論ffmpeg的「async」選項,其中「拉伸/擠壓」音頻流以匹配時間戳。你知道如何在我的原始視頻輸入中包含時間戳嗎? – rkohser

+0

我還沒有處理實時的音頻流「拉伸/擠壓」,因此它已經超出了我的知識領域(已經看到了一些例子,但是現在不記得這個網站也沒有自己嘗試過,請繼續搜索) 。 –