通常の方法だと1エンコード1出力なのが、1エンコードn出力できるteeマルチプレクサの使い方。

基本コマンド

出力するストリームだけmapを指定する。1つのストリームに複数出力するときはその都度mapを指定する。

同じ内容を2つに分けて出力する。
ffmpeg -i input.mp4 -c copy -f tee -map 0:v -map 0:a -flags +global_header "output1.mp4|output2.mp4"

1出力目はフィルタを当ててエンコードし、2出力目はコピーする。
ffmpeg -i input.mp4 -filter:v:0 scale=-2:360 -c:v:0 libx264 -c:a:0 aac -b:a 64k -c:v:1 copy -c:a:1 copy -flags +global_header -map 0:v -map 0:a -map 0:v -map 0:a -f tee "[select=\'v:0,a:0\':movflags=+faststart]out1.mp4|[select=\'v:1,a:1\':movflags=+faststart]out2.mp4"

映像は2種類にリサイズし、音声はエンコードしたのを2出力する。
ffmpeg -i input.mp4 -filter:v:0 scale=1280:-2 -filter:v:1 scale=640:-2 -c:v:0 libx264 -c:v:1 libx264 -c:a:0 aac -b:a 64k -map 0:v -map 0:v -map 0:a -flags +global_header -f tee "[select=\'v:0,a\':movflags=+faststart]out1.mp4|[select=\'v:1,a\':movflags=+faststart]out2.mp4"

ビットストリームフィルタも使える。tee外に指定すればすべての出力に指定される。
ffmpeg -i input.mp4 -c copy -f tee -map 0:v -map 0:a -flags +global_header -bsf:v h264_metadata=colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 -color_primaries bt709 -color_trc bt709 -colorspace bt709 "out1.mp4|out2.mp4"

ビットストリームフィルタを異なるコーデックで指定するときにはtee内で個別に指定する。
ffmpeg -i input.mp4 -c:v:0 libx264 -c:v:1 libx265 -c:a copy -map 0:v -map 0:v -map 0:a -flags +global_header -color_primaries bt709 -color_trc bt709 -colorspace bt709 -f tee "[select=\'v:0,a\':bsfs/v=h264_metadata=colour_primaries=1:bsfs/v=h264_metadata=transfer_characteristics=1:bsfs/v=h264_metadata=matrix_coefficients=1:movflags=+faststart]out1.mp4|[select=\'v:1,a\':bsfs/v=hevc_metadata=colour_primaries=1:bsfs/v=hevc_metadata=transfer_characteristics=1:bsfs/v=hevc_metadata=matrix_coefficients=1:movflags=+faststart]out2.mp4"

公式ドキュメント:FFmpeg Formats Documentation : tee

ビットストリームフィルタの指定例。
qsv 対応の ffmpeg をつくる | H.264
qsv 対応の ffmpeg をつくる | H.265
VP9(libvpx-vp9)のエンコード設定について | VP9

オプション

tee 外で使われるオプション。

  • use_fifo[boolean]
    fifo を使うかどうか
    既定値:0
  • fifo_options[string]
    fifo pseudo-muxer で使われるオプション指定。key=value形式の : でつなげる

tee 内で使われるオプション。key=value形式の : でつなげる。

  • f
    フォーマット指定
    例:f=hls
  • bsfs[/spec]
    ビットストリームフィルタの指定。opt=value形式の : でつなげる。
    例:bsfs/v=h264_metadata=colour_primaries=1
  • use_fifo bool
    fifo を使うかどうか。tee 内で使い分けられる
    例:use_fifo=1
  • fifo_options
    fifo pseudo-muxer で使われるオプション指定。tee 内で使い分けられる
  • select
    ストリーム指定子を使ってどれを出力するかの指定。無指定だと map で指定したすべてを出力する。, で区切る
    例:select=\’v:0,a:0\’
  • onfail
    出力に失敗したときの挙動の指定。abort は中断で既定値。ignore は続行
    例:onfail=abort

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)