タグ別アーカイブ: Video_Filters

2つの連続したフィールドを1つのフレームで出力する weave

ffmpeg 3.2 でリリース予定のビデオフィルタ。フィールドを合わせてフレームにする weave フィルタの使い方。縦解像度が2倍になり、フレームレートとフレーム数は2分の1になる。

基本コマンド

separatefields でフィールド分解したのをフレームに戻す。つまり何も変わらない
ffmpeg -i input -vf separatefields,weave output
ffplay -i input -vf separatefields,weave

tinterlace フィルタの tinterlace=0 と同じことができる

公式ドキュメント:FFmpeg Filters Documentation : weave
続きを読む 2つの連続したフィールドを1つのフレームで出力する weave

複数の映像を1つの映像に交互に挟む interleave

2以上の映像を交互に1つの連続した映像で出力する interleave フィルタの使い方。出力フレーム数は1入力のフレーム数が上限になるので複数映像を交互に挟んで出力する場合はあらかじめフレーム数を減らしておく必要がある。

基本コマンド

偶数と奇数フレームに分けて合わせている。適宜 null フィルタを変更。このコマンドでは何も変化しない
ffmpeg -i input -vf "split[0][1];[0]select=(mod(n-1\,2)),null[0a];[1]select=(mod(n\,2)),null[1a];[0a][1a]interleave=2" output
ffplay -i input -vf "split[0][1];[0]select=(mod(n-1\,2)),null[0a];[1]select=(mod(n\,2)),null[1a];[0a][1a]interleave"

公式ドキュメント:FFmpeg Filters Documentation : interleave, ainterleave
続きを読む 複数の映像を1つの映像に交互に挟む interleave

ウェーブレットデノイザ vaguedenoiser

ffmpeg 3.2 でリリース予定のビデオフィルタ。Cohen-Daubechies-Feauveau(CDF) 9/7 のウェーブレットデノイザ。フィルタを当てるチャンネルを指定できる。

基本コマンド

ffmpeg -i input -vf vaguedenoiser=threshold=2:method=2:nsteps=6:percent=85:planes=15 output
ffmpeg -i input -vf vaguedenoiser=2:2:6:85:15 output
ffplay -i input -vf vaguedenoiser=2:2:6:85:15

公式ドキュメント:FFmpeg Filters Documentation : vaguedenoiser
続きを読む ウェーブレットデノイザ vaguedenoiser

ffmpeg でフレーム補間する minterpolate

ffmpeg 3.2 でリリース予定のビデオフィルタ。前後フレームから中間フレームを作り出す minterpolate フィルタの使い方。無料でフレーム補完する方法には AviSynth+MvTools が一般的だが、もっと手軽に1コマンドでフレーム補完した動画を作ることができる。

基本コマンド

かなり負荷が高く、シングルスレッドしか働かないので出力解像度を小さくしないと ffplay ではプレビューがまともに動かない。

30fps の動画を 60fps にフレーム補完する
ffmpeg -i input -vf minterpolate=fps=60:mi_mode=mci:mc_mode=obmc:me_mode=bilat:me=epzs:mb_size=16:search_param=32:vsbmc=0:scd=fdiff:scd_threshold=5 output
ffmpeg -i input -vf minterpolate=60:2:0:1:8:16:32:0:1:5 output

公式ドキュメント:FFmpeg Filters Documentation : minterpolate
続きを読む ffmpeg でフレーム補間する minterpolate

2入力の LUT を手軽に入れ替えられる lut2

ffmpeg 3.2 でリリース予定のビデオフィルタ。映像の YUV や RGB を別の映像と入れ換えるときに今までは extractplanes で対象チャンネルを取り出して、mergeplanes で合わせていたのが lut2 だけで入れ換えることができる。ただし複数入力するビデオフィルタでは同じ解像度と SAR でないとエラーが出る。

各映像チャンネルを分離する extractplanes
各映像チャンネルを結合する mergeplanes

また1入力で各チャンネルを入れ換えるには shuffleplanes や、swapuv フィルタがある。

plane を入れ替え、コピーする shuffleplanes

基本コマンド

1入力の Y(または R)をそのままに、1入力の UV(またはGB)を2入力の UV(またはGB)と入れ換える
ffmpeg -i input1 -i input2 -filter_complex lut2=c0=x:c1=y:c2=y output
ffmpeg -i input1 -i input2 -filter_complex lut2=x:y:y output

公式ドキュメント:FFmpeg Filters Documentation : lut2
続きを読む 2入力の LUT を手軽に入れ替えられる lut2

映像の差分を加算する maskedclamp

ffmpeg 3.2 でリリース予定のビデオフィルタ。映像を3入力し、1入力を基本の映像として、1入力と比較して2入力は差分の値がプラスのときに、1入力と比較して3入力は差分の値がマイナスのときに、その差分だけ1入力と入れ換える maskedclamp フィルタの使い方。同じようなことが blend フィルタでもできるが、こちらは3入力できるところが特徴である。

基本コマンド

同じ映像を3入力しても出力映像は変わらない
ffmpeg -i input -vf split=3[0][1][2];[0][1][2]maskedclamp=undershoot=0:overshoot=0:planes=15 output
ffmpeg -i input -vf split=3[0][1][2];[0][1][2]maskedclamp=0:0:15 output
ffplay -i input -vf split=3[0][1][2];[0][1][2]maskedclamp=0:0:15

公式ドキュメント:FFmpeg Filters Documentation : maskedclamp
続きを読む 映像の差分を加算する maskedclamp

映像フィルタを当てる前後のデータを見える化する

ffmpeg には多くの映像フィルタと音声フィルタがあるが、その効果を調べるのに主観的な判断だけではなく、客観的な判断ができるように数値を映像に表示したり、ヒストグラムを表示したりすることで映像で差違を見える化する。null フィルタを別のフィルタに変更することでフィルタを当てた同士で比較できる。
続きを読む 映像フィルタを当てる前後のデータを見える化する

一定間隔で映像に線を引く drawgrid

映像に縦線や横線、または格子状に直線を引く drawgrid フィルタの使い方。

基本コマンド

100×100 毎に太さ2pxで赤の半分透過した格子状の線を引く
ffmpeg -i input -vf drawgrid=width=100:height=100:thickness=2:color=red@0.5 output
ffmpeg -i input -vf drawgrid=0:0:100:100:red@.5:2 output
ffplay -i input -vf drawgrid=0:0:100:100:red@.5:2 output

公式ドキュメント:FFmpeg Filters Documentation : drawgrid
続きを読む 一定間隔で映像に線を引く drawgrid

写真など傾いた対象を修正する perspective

斜めから撮った写真や動画をまっすぐから見たように修正する perspective フィルタの使い方。修正部分だけを取り出すには crop フィルタを併用する。crop フィルタを併用しないと出力解像度が元の解像度のままになりアスペクト比がおかしくなる。

基本コマンド

既定値のコマンドだと何も変化しない
ffmpeg -i nput -vf perspective=x0=0:y0=0:x1=W:y1=0:x2=0:y2=H:x3=W:y3=H:interpolation=linear:sense=source:eval=int ouput
ffmpeg -i input -vf perspective=0:0:W:0:0:H:W:H:0:0:0 ouput
ffplay -i input -vf perspective=0:0:W:0:0:H:W:H:0:0:0

台形の例
ffplay -f lavfi -i testsrc -vf pad="iw+4:ih+4:2:2:0x000000",perspective=x0=W/4:y0=H/4:x1=3*W/4:y1=H/4:sense=destination
続きを読む 写真など傾いた対象を修正する perspective

エッジ部分に調整のあるポストプロセッシングフィルタ pp7

pp7(Postprocessing filter with 7 point DCT)フィルタは fspp の次に負荷の重たいポストプロセッシングフィルタである。

デノイズとインターレース解除ができる pp
速くて単純なポストプロセッシングフィルタ fspp

基本コマンド

ffmpeg -i input -vf pp7=qp=1:mode=2 output
ffmpeg -i input -vf pp7=1:2 output
ffplay -i input -vf pp7=1:2

公式ドキュメント:FFmpeg Filters Documentation : pp7
公式wiki:Postprocessing – FFmpeg
続きを読む エッジ部分に調整のあるポストプロセッシングフィルタ pp7