Programってなに|FFmpeg

動画を保存するコマンドを生成できるツールを開発しているのだが、音声と映像が別個のm3u8ファイルで構成されているHLS動画に対応しなくてはいけなくなった。

パーサーを内蔵しているので、マスターマニフェストの解析データからコマンドを生成すれば手間はかからない。問題はどういうコマンドを生成するかだ。

パッと頭に思い浮かんだのは、音声と映像を両方ともインプットファイルとして読み込むという、オーソドックスなコマンド。でも、URLに付いてくるトークンが2つ分だと冗長になるよなあと。

もっとスマートに書けるコマンドはないものか。ぼーっとコマンドプロンプトを眺めながら考えていたとき目に入ったのが「Program」である。

FFmpegでマスターマニフェストを読み込むと、関連付けられている音声と映像が、Programという括りで区切って表示されるのだ。これをオプションで指定できたらめちゃ楽だ。

で、なんか普通にできた。

ffmpeg -i "input.m3u8" -map "p:0" -c "copy" "output.mp4"

上のコマンドはProgram番号0番の音声と映像を単一の動画ファイルとして保存する。簡潔だし直感的だし、なによりわかりやすいし、即採用である。

とはいえ、このコマンドはシンプルではあるが、マスターマニフェストの中身を見ないと作れない。手動でやるにはちと面倒である。

ところで、Programはどういう条件でナンバリングされているのだろうか。これについては公式ドキュメントにも記載がなかった。

マスターマニフェストを編集してあれこれ試してみたところ、どうやら単純に#EXT-X-STREAM-INFタグの順番でナンバリングされるようだ。関連付けられている#EXT-X-MEDIAタグが上にあろうが下にあろうが関係ない。間に#EXT-X-I-FRAME-STREAM-INFとかが挟まっていても同じ。

ビットレートや解像度といった動画パラメーターは一切影響しないので、手動の場合はやっぱり中身を見るしかないだろう。

お知らせ

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

最近の投稿

シェア