2011-03-06 61 views
1

私はユーザーが自分のウェブカメラからビデオを録画できるアプリケーションを持っています。ユーザーは3つのクリップを記録し、再生のために1つのビデオに結合します。FFMpeg AVIをMP4に変換する - オーディオ/ビデオが同期しない

MP4に変換した後、3番目のクリップのオーディオとビデオが同期しないことがある問題が発生しています。プロセスがNOW-

作品のAVIファイルを結合するためにMEncoderでを使用しての間で遷移動画を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.exe -idx TEST.AVI 

MEncoderでを使用してビデオはまだAVIとして、この時点で罰金果たしています。

はffmpegのバッチファイルを使用してMP4にAVIファイルを変換します

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" 

これは、すべてのWindowsのコマンドラインツールを使用して(何のビデオがGUIソフトウエアを編集していない)プログラムで行う必要があります。

ここには、aviファイルとmp4ファイルのサンプルがあります。オーディオ/ビデオの同期は、1時03分頃に行われます。 AVIは同期が外れることはありませんが、mp4は同期しません。

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

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

誰もがこの問題を解決するために何か提案がありますか?

+0

-copyts ffmpegオプションを試しましたか? –

答えて

3

物事のカップル:

  • 私は正確に完璧なものにするソースコンポジットオーディオシンクを見つけることができません。オリジナルの3つのソースクリップもまた興味深いでしょう。一般的なルールは、常に最高品質のソースを使用して開始することです。
  • ソースの3つのクリップに48kHzの16ビットステレオオーディオもあると仮定できますか?そこに進んでいるコンバージョンがあれば、おそらくこれは問題です。
  • FFmpegの内部aac CODECは実験的なものです。そのため、-strict experimentalスイッチが必要です。オーディオ同期の問題が発生しているため、これは明らかに候補となる問題の領域です。可能であれば、libfaacの使用を検討してください。 (あなたはFFmpegコンパイルを自分で構築しなければならないかもしれません。)
  • -threads 64を使用すると、どれくらいのコアを持っていても高速になるわけではありません。 #cores * 3/2の一般的に受け入れられている規則に従ってください。したがって、4つのコアを持つ場合、マストは4 * 3/2 = 6です。 -threadsを使った自分の実験では、各スレッドが4-6を超えて戻り率が低下しており、12-16スレッドを超えて0が返されます(になります)。最高で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

関連する問題