ffmpeg - ビデオ内の音声を置換する

ffmpegを使って、ビデオファイルの音声を音声ファイルに置き換えるにはどうしたらよいですか?

コマンドは以下のようなイメージです。

ffmpeg -i v.mp4 -i a.wav -MAGIC video-new.mp4

これは https://superuser.com/questions/800234/how-to-replace-an-audio-stream-in-a-video-file-with-multiple-audio-streams に非常に似ていますが、その質問は複数のオーディオトラックを処理するため、非常に複雑になり、単純なオーディオスワップにはどの部分のソリューションで十分なのかが不明になっています。

ソリューション

ビデオストリームを再エンコードせずにコピーすると、多くの時間を節約できますが、オーディオを再エンコードすると、非互換性を防ぐのに役立つかもしれません。

ffmpeg -i v.mp4 -i a.wav -c:v copy -map 0:v:0 -map 1:a:0 new.mp4

-map 0:v:0 は、入力の最初の (インデックス 0) ビデオストリームを、出力の最初の (インデックス 0) ビデオストリームにマップします。

-map 1:a:0 は、入力から2番目のオーディオストリーム (インデックス 1) を、出力の1番目のオーディオストリーム (インデックス 0) にマップします。

もし、オーディオがビデオよりも長い場合は、出力ファイル名の前に -shortest を追加してください。

オーディオコーデックを指定しないと、自動的に動作中のコーデックが選択されます。例えば、-c:v copy の後に -c:a libvorbis を追加することで指定することができます。

解説 (4)