ffmpeg 4.1 から使えるフィルタ。overlay, stack フィルタを合わせたような xstack フィルタの使い方。解像度が異なっていても使えるのが特徴で、上下左右にも映像の上にも重ねられる。重なる順番は1入力から順に上に重なる。余白部分は1入力が YUV なら [0:0:0] の緑、RGB なら [0:0:0] の黒になり、フレームレートが一致しないと小さい方に合わされる。解像度が異なる複数画像を並べるのに便利。

overlay フィルタのように映像の上に重ねることもできるが、透過情報は引き継げないのできれいに色が抜けない。overlay フィルタよりも処理が早いので透過させないならこちらの方がよいが、overlay_opencl, overlay_qsv が使えるのならその限りではない。

映像の上に映像をのせる overlay
Windows の ffmpeg で生放送する方法 : stack
qsv 対応の ffmpeg をつくる : overlay_qsv

基本コマンド

1入力の右に2入力を並べ、音声は1入力をコピーする
ffmpeg -i input1 -i input2 -filter_complex "xstack=inputs=2:layout=0_0|w0_0:shortest=0[v]" -map [v] -map 0:a -c:a copy output
ffmpeg -i input1 -i input2 -filter_complex "xstack[v]" -map [v] -map 0:a -c:a copy output

1入力の下に2入力を並べ、音声は1入力をコピーする
ffmpeg -i input1 -i input2 -filter_complex "xstack=inputs=2:layout=0_0|0_h0:shortest=0[v]" -map [v] -map 0:a -c:a copy output
ffmpeg -i input1 -i input2 -filter_complex "hstack[v]" -map [v] -map 0:a -c:a copy output

公式ドキュメント:FFmpeg Filters Documentation : xstack

オプション

  • inputs[int]
    入力ファイル数
    範囲:2 から INT_MAX まで
    既定値:2
  • layout[string]
    レイアウトの指定。wは横解像度で隣の数字が入力ファイルの指定で0から。hは縦解像度で数字は横解像度と同じ。座標指定も可能で 横_縦
    既定値:”0_0|w0_0″
  • shortest[boolean]
    一番短い入力ファイルが終わったときに強制的に終了させるか
    既定値:0(終了しない)

応用例

  • 4入力したときに
    1,3
    2,4
    の順番に並べる
    "xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0"
  • 4入力したときに
    1
    2
    3
    4
    の順番に並べる
    "xstack=inputs=4:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2"
  • 9入力したときに
    5,1,6
    4,3,8
    7,2,9
    の順番に並べる
    "xstack=inputs=9:layout=w3_0|w3_h0+h2|w3_h0|0_h4|0_0|w3+w1_0|0_h1+h2|w3+w1_h0|w3+w1_h1+h2"
  • 1,2,3
    4,5,6
    7,8,9
    "xstack=inputs=9:layout=0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0|0_h0+h3|w0_h0+h3|w0+w1_h0+h3"

    0_0 w0_0 w0+w1_0
    0_h0 w0_h0 w0+w1_h0
    0_h0+h3 w0_h0+h3 w0+w1_h0+h3
  • 1,4,7
    2,5,8
    3,6,9
    ”xstack=inputs=9:layout=0_0|0_h0|0_h0+h1|w0_0|w0_h0|w0_h0+h1|w0+w3_0|w0+w3_h0|w0+w3_h0+h1”

    0_0 w0_0 w0+w3_0
    0_h0 w0_h0 w0+w3_h0
    0_h0+h1 w0_h0+h1 w0+w3_h0+h1
  • 1,2,3,4
    5,6,7,8
    9,10,11,12
    13,14,15,16
    "xstack=inputs=16:layout=0_0|w0_0|w0+w1_0|w0+w1+w2_0|0_h0|w0_h0|w0+w1_h0|w0+w1+w2_h0|0_h0+h4|w0_h0+h4|w0+w1_h0+h4|w0+w1+w2_h0+h4|0_h0+h4+h8|w0_h0+h4+h8|w0+w1_h0+h4+h8|w0+w1+w2_h0+h4+h8"

    0_0 w0_0 w0+w1_0 w0+w1+w2_0
    0_h0 w0_h0 w0+w1_h0 w0+w1+w2_h0
    0_h0+h4 w0_h0+h4 w0+w1_h0+h4 w0+w1+w2_h0+h4
    0_h0+h4+h8 w0_h0+h4+h8 w0+w1_h0+h4+h8 w0+w1+w2_h0+h4+h8
  • 1,5,9,13
    2,6,10,14
    3,7,11,15
    4,8,12,16
    "xstack=inputs=16:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2|w0_0|w0_h0|w0_h0+h1|w0_h0+h1+h2|w0+w4_0|w0+w4_h0|w0+w4_h0+h1|w0+w4_h0+h1+h2|w0+w4+w8_0|w0+w4+w8_h0|w0+w4+w8_h0+h1|w0+w4+w8_h0+h1+h2"

    0_0 w0_0 w0+w4_0 w0+w4+w8_0
    0_h0 w0_h0 w0+w4_h0 w0+w4+w8_h0
    0_h0+h1 w0_h0+h1 w0+w4_h0+h1 w0+w4+w8_h0+h1
    0_h0+h1+h2 w0_h0+h1+h2 w0+w4_h0+h1+h2 w0+w4+w8_h0+h1+h2

コメントを残す

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

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