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)'
利用したフィルタ。
色相を動的に変更できる hue
Windows の ffmpeg で生放送する方法 : LUT(ルックアップテーブル)
タイムライン編集の解説
- 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)
フレームを間引く方法にshuffleframes
フィルタを使う方法もある。
指定フレーム毎に順番を入れ換える shuffleframes