普段動画編集といえばaviutlでカット編集程度なんだけど、それでHEVC+aacをmp4ファイルに収めたファイルを作ったあと、そこに追加で音声データをくっつけて、副音声ファイルを作りたい用事があったのでメモ。
aviutlでやるには面倒そうな気配を感じたので(リサーチ不足?)、ffmpegでさらっと作る。
source.mp4
とappend_audio.aac
を混ぜてoutput.mp4
に書き出すイメージで。
ffmpeg -i source.mp4 -i append_audio.aac -c copy -map 0:0 -map 0:1 -map 1:0 output.mp4
ここで重要なのがmap
オプション。どのファイルのどのストリームを使うのかを表現する。
どう指定するのかというと、ffmpegにファイルを食わせたときの出力でStream #0:0: Video: h264...(略)
みたいに出力されるこの0:0
を使う。
上記の例だと、「0番目のファイルの0番目のストリーム(source.mp4の動画)、0番目のファイルの1番目のストリーム(source.mp4の音声)、1番目のファイルの0番目のストリーム(append_audio.aacの音声)」を意味する。
本当はオーディオ部分のみとか、このファイルの全部のストリームとか、便利そうな指定があるのだけど、そういうパターン指定をせずとも足りそうな気がしたので省略。必要になったときにマニュアル読もう。
map
オプションの使い方がわかっていれば普通にやれそうだけど、以下のような感じで良い。
ffmpeg -i source.mp4 -c copy -map 0:2 output.aac
もちろん、上記例では、0番目のファイル(source.mp4)の2番めのストリームとして副音声が記録されているという前提。
ffmpegは、これさえあれば動画の形式変換の類はマジでなんでもできるんじゃねーのと思わせるくらい便利なのだけど、それだけオプション類が多すぎて把握するのが大変。
map
オプションも存在は知っていたのだが使い方を知ろうともせず生きてきたところ、そう難しい概念でもなく、わりあい簡単に扱えそうだった。さっさと調べればよかったんね。