タグ別アーカイブ: Video_Filters

2つの映像のヒストグラムをうまく揃えるように調整する midequalizer

ffmpeg 3.3 から追加予定のフィルタ。2つの映像を入力して2つ目の映像のヒストグラムを1つ目の映像にうまく揃える midequalizer フィルタの使い方。高ビット深度対応の YUV, GBRP, GRAY, アルファ に対応している。同じ場面を映している2台のカメラ、例えばステレオカメラで、映像の明るさを揃えるのに使う。

基本コマンド

ffmpeg -i input1 -i input2 -filter_complex midequalizer=15 output

公式ドキュメント:FFmpeg Filters Documentation : midequalizer

オプション

planes[int]
フィルタを当てるチャンネル指定
詳しくは ffmpeg について | チャンネルの順番と注意点 を参照
既定値:15(すべてのチャンネル)
範囲:0 から 15 まで

閾値の指定で2つのフィルタを使い分けやすくする threshold

ffmpeg 3.3 から追加予定のフィルタ。4つの映像を入力して、1、2入力の比較で3、4入力を使い分けて1出力する threshold フィルタの使い方。高ビット深度対応の YUV, GBRP, GRAY, アルファ に対応している。2つのフィルタを使い分けたり、白黒2色のマスクが手軽に設定できる。

具体的に説明すると1入力と2入力を比較して、1 < = 2 の部分に4入力が、2 < 1 部分に3入力が割り当てられる。planes 指定でフィルタを当てなければ1入力がそのまま出力される。planes 指定でフィルタを当てても1映像のまま出力する場合でも映像が変わらなければ負荷は変わらない。
続きを読む 閾値の指定で2つのフィルタを使い分けやすくする threshold

輪郭を保護しながらシャープにしたりぼかしたりする unsharp

似たフィルタに smartblur があり、こちらもぼかしたりシャープにできる。RGB の映像は YUV に変換され、輝度だけ、彩度だけ、また両方にフィルタを掛けられる。

基本コマンド

ffmpeg -i input -vf unsharp=lx=5:ly=5:la=1:cx=5:cy=5:ca=0:opencl=0 output
ffplay -i input -vf unsharp=5:5:1:5:5:0:0

公式ドキュメント:FFmpeg Filters Documentation : unsharp
続きを読む 輪郭を保護しながらシャープにしたりぼかしたりする unsharp

輪郭を保護しながらぼかしたりシャープにする smartblur

似たフィルタに unsharp があり、こちらもぼかしたりシャープにできる。RGB の映像は YUV に変換され、輝度だけ、彩度だけ、また両方にフィルタを当てられる。

基本コマンド

輝度、または彩度の片方しか指定しなかった場合はもう片方も同じように指定される。片方のオプションを無効にするには luma_strength, chroma_strength のオプションを 0 にする。

ffmpeg -i input -vf smartblur=lr=1:ls=1:lt=0:cr=-0.9:cs=-2:ct=-31 output
ffplay -i input -vf smartblur=1:1:0:-0.9:-2:-31

公式ドキュメント:FFmpeg Filters Documentation : smartblur
続きを読む 輪郭を保護しながらぼかしたりシャープにする smartblur

フェードイン、フェードアウトの設定ができる fade

フェードするチャンネルにアルファチャンネルあるなしで用途が異なる fade フィルタの使い方。アルファチャンネルがない場合のフェードインは指定色から元映像にフェードし、フェードアウトは元映像から指定色にフェードする。アルファチャンネルがあればクロスフェードのように2映像をきれいにつなげることができる。そのほかにアルファチャンネルの濃度の変化をマスクとして利用し、別のフィルタの濃度変化にも使える。

基本コマンド

元映像から始まり開始2秒から白に1秒間でフェードインする
ffplay -f lavfi -i testsrc,fade=t=out:st=1:d=2:c=white

赤から始まり開始2秒から元映像に1秒間でフェードアウトする
ffplay -f lavfi -i testsrc,fade=t=in:st=1:d=2:c=0xff0000
続きを読む フェードイン、フェードアウトの設定ができる fade

色相を動的に変更できる hue

YUV の輝度と彩度を調整できる hue フィルタ。値の指定にフレーム数やタイムスタンプが使えるので時間によって動的に変えられる。

基本コマンド

既定値では変化ない
ffmpeg -i input -vf hue=h=0:s=1:b=0 output
ffplay -i input -vf hue=0:1

色相を動的に変える例
ffplay -i input -vf hue=n
評価式(計算書式)の print を使えば値を調べられる
ffplay -i input -vf hue=print(n)
ffmpeg で使える計算書式

公式ドキュメント:FFmpeg Filters Documentation : hue
続きを読む 色相を動的に変更できる hue

ユーフォ2期OP冒頭部分のモノクロ部分だけ黒にする

ユーフォ2期,1話から5話までのOP冒頭部分のモノクロ部分だけ黒にする。モノクロ部分の UV が 128 になるのを利用してこの部分以外をマスクして真っ黒にする。

コマンド例
ffmpeg -i video.ts -vf bwdif=0:-1:1,decimate,removelogo=logo.bmp,split=3[0][1][2];[2]format=yuv444p,avgblur=3:2,shuffleplanes=1:1:1,lutyuv=between(val\,120\,135)\*255:val:val[2a];[1]lutyuv=0:val:val[1a];[0]format=yuvj420p[0a];[0a][1a][2a]maskedmerge=0x7,format=yuv420p -acodec copy output.mp4
続きを読む ユーフォ2期OP冒頭部分のモノクロ部分だけ黒にする

前後フレームの差分で動いた部分だけマスクする モーションマスク

前後フレームの YUV 差分をマスクしてフィルタを当てなくするモーションマスクの使い方。マスクするチャンネルは Y だけと、YUV のすべてを指定でき、マスクを反転することもできる。使うフィルタは tblend で前後フレームを1入力で取り込み、maskedmerge で1,2入力の割合を決めている。

前後フレームの差分をブレンドする tblend
マスクして2入力を合わせる maskedmerge
続きを読む 前後フレームの差分で動いた部分だけマスクする モーションマスク

前後フレームの差分をブレンドする tblend

1入力から前後フレームを読み込んでそれぞれを計算する tblend(time blend)フィルタの使い方。オプションは blend フィルタと同じ。

YUV RGB を比較計算する blend

条件を指定するのに使う
ffmpeg で使える計算書式
続きを読む 前後フレームの差分をブレンドする tblend

非局所平均のデノイザ nlmeans

ffmpeg 3.2 でリリース予定のビデオフィルタ。ffmpeg のフィルタの中でかなり処理が重たい部類に入るエッジ保護のデノイザ nlmeans フィルタの使い方。なぜこれほどまでに重たいかというとデノイズする部分を映像内容によって異なる処理をするために重たくなるから。詳しい処理内容は「non-local means filter」で検索する。

処理内容の紹介記事
Non-local Means Filterによるデノイジング | OpenCV.jp
Non-local Means Filterの実装 – Qiita

該当ソースコード:FFmpeg/vf_nlmeans.c at master · FFmpeg/FFmpeg
公式ドキュメント:FFmpeg Filters Documentation : nlmeans
続きを読む 非局所平均のデノイザ nlmeans