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

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 nput -vf perspective=0:0:W:0:0:H:W:H:0:0:0 ouput
ffplay -i nput -vf perspective=0:0:W:0:0:H:W:H:0:0:0

続きを読む 写真など傾いた対象を修正する 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

速くて単純なポストプロセッシングフィルタ fspp

fspp(fast and simple postprocessing)とは前回の pp に続くポストプロセッシングフィルタである。pp よりもオプションが簡素なので使いやすい。

デノイズとインターレース解除ができる pp

基本コマンド

ffmpeg -i input -vf fspp=4:0:0 output
ffplay -i input -vf fspp=4:0:0

公式ドキュメント:FFmpeg Filters Documentation : fspp
公式wiki:Postprocessing – FFmpeg
続きを読む 速くて単純なポストプロセッシングフィルタ fspp

デノイズとインターレース解除ができる pp

pp(postprocessing)フィルタとは、デコード段階でフィルタを当てるフィルタを意味するが、フィルタチェーンでの pp の位置によってフィルタが当たる順番も変わる。用途に合わせてたくさん種類があるので使いこなすのは難しい。ビルドオプションに --enable-gpl が付いてないと使えない。

同様のフィルタに fspp, pp7, spp, uspp があるが、順番に負荷が大きくなり fspp 以降は負荷を考えると実用性は低い。

速くて単純なポストプロセッシングフィルタ fspp

基本コマンド

ffmpeg -i input -vf pp=de output
ffplay -i input -vf pp=de

公式ドキュメント:FFmpeg Filters Documentation : pp
公式wiki:Postprocessing – FFmpeg
続きを読む デノイズとインターレース解除ができる pp

RGB レベルで明暗調整できる colorlevels

手軽に RGB を明るくしたり、暗くしたり、コントラストを上げ下げできる colorlevels フィルタの使い方。RGB を操作するフィルタに curvesselectivecolorcolorbalance などがある。

トーンカーブで RGB の調整が出来る curves
RGB, CMYK を個別に調整できる selectivecolor
Windows の ffmpeg で生放送する方法 : colorbalance

基本コマンド

既定値では変化はない
ffmpeg -i img -vf colorlevels output
ffplay -i img -vf colorlevels

公式ドキュメント:FFmpeg Filters Documentation : colorlevels
続きを読む RGB レベルで明暗調整できる colorlevels

CLUT データから色を置換する haldclut

映像や画像 の CLUT(カラールックアップテーブル、カラーパレットとも言われる)データから色を置換する haldclut フィルタの使い方。CLUT 画像は一般に配布されているものを使うことができるが、解像度を所定のサイズにする必要がある。

基本コマンド

CLUT データを準備する
ffmpeg -f lavfi -i haldclutsrc=8:d=10 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -c:v ffv1 clut.nut
元映像に CLUT データを参照して haldclut フィルタを当てる
ffmpeg -i input -i clut.nut -filter_complex [0][1]haldclut -shortest output
ffplay input -vf movie=clut.nut,[in]haldclut
ffplay -f lavfi -i movie=input[0];movie=clut.nut[1];[0][1]haldclut

続きを読む CLUT データから色を置換する haldclut

黒フレームを調べる blackframe

黒フレームを調べる blackframe フィルタの使い方。輝度の値からどれだけ黒いかの設定があるのでシーンチェンジを調べるのに使える。blackdetect よりも設定方法が分かりやすい。

基本コマンド

コンソールの表示されるのでテキストにリダイレクトした方が見やすい
ffmpeg -i input -vf blackframe=98:32 -f null -
ffmpeg -i input -vf blackframe=98:32 -f null - > blackframe.txt 2>&1

出力例

frame:1170 pblack:99 pts:3513510 t:39.039000 type:I last_keyframe:1170

続きを読む 黒フレームを調べる blackframe