特定の区間だけフィルタを当てるタイムライン編集について


ffmpeg のフィルタの中には区間、以上、未満、毎の時間の条件をつけることができるものがある。これらをつけられるのは filters で調べたときに T と表示されるフィルタである。記事の下で紹介。

オプション

  • t
    タイムスタンプ秒。1フレーム目の経過時間が最初の値になる
  • n
    1 から始まるフレーム番号
  • pos
    バイトサイズ。例:’between(pos,0,10M)’ 10MB まで有効にする
  • w, h
    入力映像の横と縦の解像度値

公式ドキュメント:FFmpeg Filters Documentation : Timeline-editing

使い方

注意点としてタイムライン編集を使ってオプションを指定する場合、フィルタのオプション名を省略しないこと。省略するとエラーが出たり、引数を認識しないことがあるため。これを回避するにはオプション名を明記するか、オプションの最後に enable を指定する。

enable=1 ですべてのフレームが有効になるが、正確には 0.5 以上ならすべてのフレームが有効になる。

本来の効果
ffplay -f lavfi testsrc2 -vf lutyuv=0:val:val
Y の 0 が反映されていない
ffplay -f lavfi testsrc2 -vf lutyuv=enable='between(t,1,2)':0:val:val
これなら反映される
ffplay -f lavfi testsrc2 -vf lutyuv=enable='between(t,1,2)':y=0:u=val:v=val
enable を末尾につければ引数のオプション名を明記しなくてもよい
ffplay -f lavfi testsrc2 -vf lutyuv=0:val:val:enable='between(t,1,2)'
10秒から180秒まで smartblur をかける
smartblur=enable='between(t,10,3*60)'
3秒まで curves のプリセット cross_process を指定する
curves=enable='lte(t,3)':preset=cross_process
3秒から curves のプリセット cross_process を指定する
curves=enable='gte(t,3)':preset=cross_process
1秒から3秒までと4秒から5秒まで cross_process をかける
noise=enable='between(t,1,3)+between(t,4,5)':alls=100:allf=t+u
2秒ごとに1秒間(0から1秒、2秒から3秒…) smartblur をかける
smartblur=enable='lt(mod(t,2),1)'

この書式が使える:ffmpeg で使える計算書式
発展的な使い方:2入力する映像のフィルタを詳しく設定する

ベンチマークについて

1入力フィルタをタイムライン編集で無効にする場合はフィルタ自体が無効になるのでベンチマークは大幅には改善する。一方で2入力以上のフィルタをタイムライン編集で無効にした場合はベンチマークは有効時よりも善くなるが、2入力していることには変わりないのでベンチマークは大幅には改善しない。

ベンチマークが下ほど悪くなる
ffmpeg -f lavfi -i color -f lavfi -i testsrc2 -filter_complex null -f null -
ffmpeg -f lavfi -i color -f lavfi -i testsrc2 -filter_complex overlay=enable=0 -f null -
ffmpeg -f lavfi -i color -f lavfi -i testsrc2 -filter_complex overlay=enable=1 -f null -

タイムライン編集ができるフィルタの中から紹介したことのある記事

blend YUV RGB を比較計算する blend
chromakey ffmpeg でクロマキー合成 その2
colorbalance Windows の ffmpeg で生放送する方法 : カラーバランス
colorchannelmixer RGBA の各値を別のチャンネルに混ぜ合わせる colorchannelmixer の使い方
colorkey ffmpeg でクロマキー合成
colormatrix Youtube にアップロードする時に注意する colormatrix の設定
curves トーンカーブで RGB の調整が出来る curves
delogo ffmpeg できれいにロゴを消す方法
dilation ffmpeg で OpenCV フィルタを使う
drawbox ニコ生のTSからサムネイルを出力する【ffmpeg】動画から特定フレームを画像で出力する方法
drawgrid 一定間隔で映像に線を引く drawgrid
drawtext YUV、彩度、色相 を見える化する signalstatsWindows の ffmpeg で生放送する方法 : テキスト
edgedetect ffmpeg でエッジ検出をする edgedetect
erosion ffmpeg で OpenCV フィルタを使う
framestep 【ffmpeg】動画から特定フレームを画像で出力する方法
hqdn3d ニコ生で使うデノイズフィルタの例Windows の ffmpeg で生放送する方法 : 3次元デノイズフィルタ
lut ffmpeg できれいにロゴを消す方法
maskedmerge マスクして2入力を合わせる maskedmerge
pp デノイズとインターレース解除ができる pp
removelogo ffmpeg できれいにロゴを消す方法
selectivecolor RGB, CMYK を個別に調整できる selectivecolor
smartblur ffmpeg でモーションブラーを掛ける
unsharp ニコ生で使うデノイズフィルタの例
w3fdif インターレース解除フィルタ w3fdif
yadif 一番メジャーなインターレース解除フィルタ yadif

ffmpeg -filtersT があればタイムライン編集に対応している

コメントを残す

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

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