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

コメントを残す

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

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