ffmpegのフィルタの中には効果を与えるのに期間(区間)、以上、未満、毎の時間の条件をつけることができるものがある。これらをつけられるのはffmpeg -filtersで調べたときにTと表示されるフィルタである。
ffmpeg -filters using Gyan ffmpeg
関連フィルタにsendcmd、asendcmdのコマンド対応がある。こちらは任意の時間の他にパラメータも任意に変更できる。
任意に時間や、効果を変えられるsendcmd、asendcmdフィルタの使い方
オプション
- t
0から始まるタイムスタンプ秒。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
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=preset=cross_process:enable='lte(t\,3)'
3秒からcurvesのプリセットcross_processを指定する。
curves=preset=cross_process:enable='gte(t\,3)'
1秒から3秒までと4秒から5秒までsmartblurフィルタを当てる。
noise=alls=100:allf=t+u:enable='between(t\,1\,3)+between(t\,4\,5)'
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、彩度、色相 を見える化する signalstats、Windows の 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 |