web-dev-qa-db-ja.com

オーディオが遅れている(オーディオとビデオが同期していない)m4vビデオを修正する

Windowsに関する同様の質問は次のとおりです。

オーディオと同期していないビデオを修正するツール?

Macでこの問題を解決したいと思っています。

私はHandbrakeとAvidemuxを試しました(後者には修正するオプション(「シフト」)があるようですが、オーディオがまったく再生されないため、何かを行っているかどうかわかりません!)。

2
dreeves

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を使用してビデオを修正できます。

5
slhck