動かざることバグの如し

近づきたいよ 君の理想に

複数の音声データを持つ動画から特定の音声のみを抽出する方法

環境

やりたいこと

副音声で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について

ffmpegmapオプションは、入力ファイルのどのストリームを出力ファイルに含めるかを制御するためのものだ。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

参考リンク