Windowsに関する同様の質問は次のとおりです。
Macでこの問題を解決したいと思っています。
私はHandbrakeとAvidemuxを試しました(後者には修正するオプション(「シフト」)があるようですが、オーディオがまったく再生されないため、何かを行っているかどうかわかりません!)。
FFmpegのコピーを入手してください。その方法については、この投稿の下部をご覧ください。
ビデオがオーディオより遅れているか、またはその逆であるかどうかは、実際には問題ではありません。基本的なコマンドは次のとおりです。 2つの-i
オプションでわかるように、入力を2回渡し、次に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に入力を再エンコードさせる必要があります。
Homebrew から最新の安定したFFmpegバージョンを入手できます。
ターミナルを開き、次のように入力します。
Ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
インストール要件 も参照してください。 Xcode用のコマンドラインツールをインストールしていない場合は、インストールする必要があります。そのためにはApple IDが必要です。
Homebrewがインストールされたら、FFmpegをインストールします。
brew install ffmpeg
それが完了すると、FFmpegを使用してビデオを修正できます。