YUV の映像なら彩度を 0 にするか、UV を 128 にする方法で、RGB の映像なら RGB 各値をそれぞれ一定倍率を掛け合わせる方法をとり、点滅するフレーム間隔を指定するのにタイムライン編集を行う。
YUV の映像
lut, hue
フィルタを使った2つの方法がある。
ffplay -f lavfi -i testsrc2,lut=val:128:128:enable='st(0,between((mod(n,4)),0,1));ld(0)*between(t,3,4)+ld(0)*between(t,6,7)'
ffplay -f lavfi -i testsrc2,hue=s=0:enable='st(0,between((mod(n,4)),0,1));ld(0)*between(t,3,4)+ld(0)*between(t,6,7)'
利用したフィルタ
Windows の ffmpeg で生放送する方法 : LUT(ルックアップテーブル)
色相を動的に変更できる hue
タイムライン編集の解説
- st(0,expr) , ld(0)
st(0,expr) で計算した結果を ld(0) で返している。計算の種類が増える場合は st(1,expr), ld(1) と値を変えれば値に対応した計算を行う - between((mod(n,4)),0,1)
n は 1 から始まるフレーム番号。4フレーム毎の余りを計算し、結果が 0 と 1 の時に 1 (有効)を返し、2 と 3 の時に 0(無効)を返す
余りの値は12301230123…
between() を使って10011001100… となる - ld(0)*between(t,3,4)+ld(0)*between(t,6,7)
t は 1フレーム目の経過時間から始まるタイムスタンプ秒。3秒から4秒の間と6秒から7秒の間でlut, hue
フィルタを有効にする。時間間隔ではなくフレーム間角で有効にするには t の代わりに n を使う
RGB の映像
ffplay -f lavfi -i testsrc,colorchannelmixer=.3:.59:.11:0:.3:.59:.11:0:.3:.59:.11:enable='st(0,between((mod(n,4)),0,1));ld(0)*between(t,3,4)+ld(0)*between(t,6,7)'
利用したフィルタ
RGBA の各値を別のチャンネルに混ぜ合わせる colorchannelmixer の使い方
点滅するフレーム間隔を変える
- 1フレーム毎に点滅し、最初は元映像のまま
mod(n,2) - 1フレーム毎に点滅し、最初はモノクロになる
eq((mod(n,2)),0) - 3フレームの間に2フレームモノクロになり、1フレーム元映像のまま
between((mod(n-1,3)),0,1)