2011-03-06 199 views
1

我有一個應用程序,可讓用戶從其攝像頭錄製視頻。用戶錄製3個剪輯,然後將其合併爲一個視頻進行播放。FFMpeg將AVI轉換爲MP4 - 音頻/視頻不同步

我在第三個剪輯上的音頻和視頻有問題,有時在轉換爲MP4後不同步。

下面是如何處理工作NOW-

合併中的AVI視頻文件,並插入過渡視頻使用MPlayer把AVI文件合併之間。

mencoder.exe -oac copy -ovc copy -idx -o test.avi c:\temp\*.avi 

我得到這個錯誤:

Muxer frame buffer cannot allocate memory! 

1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 
1 duplicate frame(s)! 

然而,視頻相結合,AVI和AVI這個播放,沒有任何聲音不同步的問題。

重新編制使用mencoder的

mencoder.exe -idx TEST.AVI 

視頻仍然起着罰款此時爲AVI。在Windows中使用命令行工具

set FFMPEG_DATADIR=c:\Presets 
ffmpeg.exe -i "test.avi" -s 640x480 -y -strict experimental -acodec aac \ 
    -ab 128k -ac 2 -ar 48000 -vcodec libx264 -vpre medium -vpre ipod640 -r 24 \ 
    -g 48 -b 520000 -threads 64 "out.mp4" 

這一切都必須要進行編程(沒有視頻編輯GUI軟件):使用ffmpeg的批處理文件

轉換的AVI到MP4。

下面是示例avi和mp4文件。音頻/視頻同步發生在1:03左右。在MP4上,AVI不會失去同步。

http://trtemp.s3.amazonaws.com/new.avi

http://trtemp.s3.amazonaws.com/new.mp4

沒有人有任何建議,以解決這一問題?

+0

您是否嘗試過-copyts ffmpeg選項? –

回答

3

幾件事情:

  • 我沒有找到源複合音頻同步到是完全完美。同樣看到原始的三個源素材將會很有趣。一般規則始終始於可能的最高質量來源。
  • 我們可以假設源三個剪輯也有48kHz 16位立體聲音頻嗎?如果有轉換正在進行,那麼這可能是一個問題。
  • FFmpeg的內部aac CODEC是實驗性的,這就是爲什麼你必須擁有那個-strict experimental開關。由於您有音頻同步問題,因此這是一個明顯的候選問題區域。考慮使用libfaac(如果可用)。 (你可能需要編譯你自己的FFmpeg。)
  • 使用-threads 64不會讓它變得更快,不管你擁有多少核心。遵循#核心* 3/2的公認慣例。因此,如果您有4個核心,桅杆是4 * 3/2 = 6。我自己對-threads的實驗顯示,每個超過4-6的線程的回報率遞減,其在12-16個線程中爲零(受益)。充其量,64個線程不會有任何影響。最糟糕的是,它會變慢或降低結果的質量。
  • 試用-copyts選項。 「複製從輸入到輸出的時間戳」。
  • 使用-async開關進行實驗。

Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps, the parameter is the maximum samples per second by which the audio is changed. -async 1 is a special case where only the start of the audio stream is corrected without any later correction.

+2

更改線程數爲4固定它....奇怪。 – Brian

相關問題