
Windows に関する同様の質問は次のとおりです。
オーディオと同期していないビデオを修正するツールはありますか?
この問題を Mac で解決したいと考えています。
Handbrake と Avidemux を試しました (後者には、この問題を修正するためのオプション (「shift」) があるようですが、オーディオがまったく再生されないため、何か効果があるのかわかりません)。
答え1
FFmpeg のコピーを入手してください。その方法については、この投稿の下部を参照してください。
ビデオがオーディオより遅れているかどうか、またはその逆かどうかは、実際には問題ではありません。基本的なコマンドは次のとおりです。2 つのオプションからわかるように、入力を 2 回渡し-i
、1 つの入力を遅延させて、それらを再び結合します。
ffmpeg -i in.flv -itsoffset offset -i in.flv -map 1:0 -map 0:1 -c copy out.flv
ここ、offset
は、遅延を秒単位で表したものです。たとえば、1.5
または です0.35
。この値は正の値でなければならないため、オーディオがビデオより遅れている場合は、ビデオをオフセットする必要があります。これは上記の例に示されています。同様に、ビデオがオーディオより遅れている場合は、オーディオをオフセットする必要があります。
では、オーディオとビデオのどちらを遅延させるかはどうやって決めるのでしょうか。全体を遅延させたので、in.flv
オーディオまたはビデオ ストリームを選択して、元のオーディオまたはビデオ ストリームと結合します。これはオプションで行います-map
。
基本的に、map
2 つの数字があります。コロンの前の数字は入力ファイル番号 (0 から始まる) を指定し、2 番目の数字は入力ファイル ストリーム (これも 0 から始まる) を指定します。
したがって、オーディオを遅延させるには、次の 2 つのオプションを使用します。
-map 1:0
意味: 2番目の入力ファイルから最初のストリームを取得します (元のファイルからのビデオ)-map 0:1
意味: 最初の入力ファイルから2番目のストリームを取得します(遅延ファイルからのオーディオ)
ビデオを遅らせる必要がある場合は、これを逆にします。
-map 0:0
意味: 最初の入力ファイルから最初のストリームを取得します(遅延ファイルからのビデオ)-map 1:1
意味: 2番目の入力ファイルから2番目のストリームを取得します(元のファイルからのオーディオ)
最後に、-c copy
FFmpeg にビデオとオーディオのビットストリームをコピーするように指示します。つまり、エンコード プロセスは行われません。これにより、コマンドは超高速になり、プロセス中に品質が損なわれることもありません。ただし、同期エラーが発生した場合は、省略して-c copy
、FFmpeg に入力を再エンコードさせる必要があります。
最新の安定したFFmpegバージョンは以下から入手できます。自家製。
ターミナルを開き、次のように入力します。
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
を参照してくださいインストール要件も同様です。まだインストールしていない場合は、Xcode のコマンドライン ツールをインストールする必要があります。そのためには Apple ID が必要になります。
Homebrew をインストールしたら、FFmpeg をインストールします。
brew install ffmpeg
それが完了したら、FFmpeg を使用してビデオを修正できます。