一つの映像の前後フレームを1フレームに表示し確認できるtileフィルタの使い方。複数並べた映像を元の連続フレームに戻すにはuntileフィルタを使う。

映像を分割し連続フレームにするuntile

3×3のタイルの出力例

基本コマンド

3×3のタイルを-t 3で3秒間の重複のない連続画像を出力する。
ffmpeg -i input -t 3 -vf tile=layout=3x3:nb_frames=0:margin=0:padding=0:color=black:overlap=0:init_padding=0 output-%03d.jpg

キーフレームだけ出力する場合には入力ファイルの前に-skip_frame nokeyをつける。
ffmpeg -skip_frame nokey -i input -t 3 -vf tile=3x3 output-%03d.jpg

ノンリニア編集のように過去5つ前までのフレームを横に表示し、アスペクト比を維持せずに最大横幅が1920ピクセル、縦幅が1080ピクセルまで。
ffplay -i input -vf tile=5x1:overlap=4,scale=1920:1080:force_original_aspect_ratio=decrease

関連記事

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

オプション

  • layout[image_size]
    1フレームのタイルの枚数を指定する。左上から右に順に配置
    既定値:6×5(横x縦)
  • nb_frames[int]
    1フレームにレンダリングするタイル数を指定する
    既定値:0(すべて)
    範囲:0 から INT_MAX(layoutで指定したタイル以下)まで
  • margin[int]
    隣接した上下左右にcolorで指定した色の枠を指定ピクセル分追加する
    既定値:0
  • padding[int]
    タイルの間にcolorで指定した色の枠を指定ピクセル分追加する
    既定値:0
  • color[color]
    margin, paddingで追加した余白の色を指定する
    既定値:black(rrggbb形式も可能)
  • overlap[int]
    フレームに表示される最後のタイルが次のフレームの最初のタイルと重なる枚数の指定
    既定値:0
    範囲:0からINT_MAX(layoutで指定したタイル数未満)まで
  • init_padding[int]
    最初のタイルに空フレーム(真っ暗映像)を挿入する枚数の指定
    既定値:0
    範囲:0からINT_MAX(総フレーム数 – 1)まで

任意の順番に表示する

1つの映像のフレームを任意の順番に配置する方法。shuffleframesフィルタを併用することで任意の順番に配置する。注意点はフレームレート、タイムスタンプ、解像度などを一致させる。複数入力の映像または、画像を指定場所に配置するならxstackフィルタを使う。tileフィルタは左上から右に進んで右下方向にしか指定できないので、shuffleframesでフレーム順を入れ換えることで任意の順番にタイルを表示できる。

コマンド例

  • 普通の配置
    12
    34
    tile=2x2:overlap=3,framestep=4

  • 13
    24
    "shuffleframes=0 2 1 3,tile=2x2:overlap=3,framestep=4"

  • 167
    258
    349
    "shuffleframes=0 5 6 1 4 7 2 3 8,tile=3x3:overlap=8,framestep=9"

複数ファイルに余白をつけて並べる

通常映像を並べるフィルタにhstack、vstack、xstackフィルタがあるが、これらだと余白を追加するのにpadフィルタでそれぞれの映像に余白を追加してから並べることになり入力数が多くなるだけコマンドも長くなる。そこで余白が固定ピクセル数ならinterleaveフィルタを併用してコマンドを短くする例を紹介する。interleaveフィルタを使うと入力した数だけフレーム数が倍になるので最後に元の動画のフレームレートをfpsフィルタで指定する。

映像に余白を追加する pad
複数の映像を1つの映像に合わせるinterleave

input1が上にinput2が下に並び、その間に10ピクセルの白い余白が追加される。
ffmpeg -i input1 -i input2 -filter_complex interleave=2,tile=1x2:padding=10:color=white,fps=30/1.001 -c:a copy output

これを普通にpad、vstackフィルタで行う。2入力ならそれほど変わらないが多くなるほど複雑になる。
ffmpeg -i input1 -i input2 -filter_complex pad=iw:ih+10:0:0:color=white[0v];[0v][1:v]vstack -c:a copy output

4つの映像を並べる例。

タイルに分けた一部分にフィルタを当てる

フレーム内の一部分にフィルタを当てるfeedback

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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