一つの映像の前後フレームを1フレームに表示し確認できるtile
フィルタの使い方。複数並べた映像を元の連続フレームに戻すにはuntile
フィルタを使う。
基本コマンド
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
関連記事
- ニコ生のTSからサムネイルを出力する
- ニコ生のTSから一定時間毎に画像を出力する
- 解像度が一致しなくても映像を並べられる xstack
- 指定フレーム毎に順番を入れ換える shuffleframes
- 【ffmpeg】動画から特定フレームを画像で出力する方法
- Windows の ffmpeg で生放送する方法 : スタック(映像を並べる)
公式ドキュメント: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つの映像を並べる例。