環境
やりたいこと
副音声で1つの動画に複数の音声データを持っている動画ファイルがある。
このなかで特定の音声データのみ残してほかは削除したい。映像、音声は変換しない。
コマンド
例えば1番目の音声データのみ残したい場合、
ffmpeg -i input.mkv -map 0:v -map 0:a:1 -c copy output.mkv
コマンドのオプションを簡潔に解説すると、
-i input.mkv: 入力ファイルを指定する。-map 0:v: 動画ストリームを指定する。0:vは最初の(0)入力ファイルの全ての動画(v)を意味する。-map 0:a:1: 音声ストリームを指定する。0:a:1は最初の(0)入力ファイルの2番目の音声(a:1)を意味する。-c copy: 入力ストリームをそのままコピーする。これにより、変換処理が不要になる。output.mkv: 出力ファイルを指定する。
ffmpegのmapについて
ffmpegのmapオプションは、入力ファイルのどのストリームを出力ファイルに含めるかを制御するためのものだ。mapオプションが指定されない場合、ffmpegは各ストリームタイプ(動画、音声、字幕)の最初のストリームを選択する。しかし、特定のストリームを選択したい場合や、複数のストリームを出力したい場合には、mapオプションを使用する。
一括で処理する場合
IFS=$'\n'; for f in *.mkv; do ffmpeg -i $f -map 0:v -map 0:a:1 -c copy -y output/$f; done