【FFmpeg】ストリームの順番を設定する

ストリームの順番を設定する

先日【FFmpeg】結合した動画が再生できないときという記事をエントリーした。その記事中で、ストリーム番号を固定・入れ替える方法について調べたが、わからなかったことを述べている。 その後、正しい方法が判明したので、訂正も含めて書きとどめておく。

結果オーライ

くだんの記事では、たまたまそうなっただけで、正確には間違っている。次がそのときのコマンド。

ffmpeg -i input.mp4 -map 0:a -map 0:v -c copy output.mp4

このコマンドについて「映像と音声を取り出す」というような解釈をしていた。確かにdemuxとはそういうことである。ただ、mapオプションの役割は「ストリームの配置」なのだ。

つまりどういうことかというと、上記のコマンドでは音声が最初にマッピングされているため、音声はストリーム番号0になる。前後を入れ替えて-map 0:v -map 0:aとした場合は、ストリーム番号1が音声で0が映像になるのである。

ということで、結果的には上手くいったが、ストリーム番号が一定になったのはmapを使用したからなのであった。

エンコード時にもmapを使える

エンコードを行うときも、mapを使えばストリーム番号を固定できる。

ffmpeg -i video.wmv -i audio.wav -map 1:a -map 0:v -c:a aac -c:v libx265 encoded.mp4

フィルタを使う場合は次のようにする。

ffmpeg -i video.wmv -i bgm.wav -i voice.wav -c:v libx265 -c:a aac -filter_complex [1:a][2:a]amix=inputs=2:duration=longest[output] -map [output] -map 0:v encoded.mp4

この2つのコマンドは、どちらも最初に音声がマッピングされているため、必ずストリーム番号0が音声になる。

おわりに

最初に調べて四苦八苦していたとき、dispositionというオプションをいじくり回していた。dispositionもストリームの配置を行うオプションなので、非常に紛らわしい。

dispositionは、複数の音声や字幕を含んでいる場合に使われるオプション。複数あるうちの一部を削除したり、優先順位を変更したりできる。また、FLACファイルにアルバムアートを埋め込むときにも使われる。mapとは用途が違うので、お間違えなきよう。

FFmpegを使ってストリームの順番を設定する方法について解説します。

お知らせ

現在お知らせはありません。

最近の投稿

シェア