タグ別アーカイブ: Expression_Evaluation

色相を動的に変更できる 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入力の 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

一定間隔で映像に線を引く 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

YUV RGB を比較計算する blend

2入力した映像の YUVA や RGBA を比較して結果を表示する blend の使い方。差分を調べて比較動画を作ったり、マスクした部分に別の映像を重ねたりいろいろな映像効果を作ることができる。

基本コマンド

比較動画として上に二つ並べて左下に差分(Y は 0 差分、UV は1入力)の動画を表示するコマンド例
ffplay -f lavfi "movie=left.mp4,setpts=PTS-STARTPTS,split[a1][a2];movie=right.mp4,setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack"
比較動画として上に二つ並べて左下に差分(Y は 0 差分、UV は128)の動画を表示するコマンド例
ffplay -f lavfi "movie=left.mp4,setpts=PTS-STARTPTS,split[a1][a2];movie=right.mp4,setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,lutyuv=val:128:128,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack"

公式ドキュメント:FFmpeg Filters Documentation : blend, tblend
続きを読む YUV RGB を比較計算する blend

特定の区間だけフィルタを当てるタイムライン編集について

ffmpeg のフィルタの中には区間、以上、未満、毎の時間の条件をつけることができるものがある。これらをつけられるのは filters で調べたときに T と表示されるフィルタである。記事の下で紹介。

続きを読む 特定の区間だけフィルタを当てるタイムライン編集について

Zライブラリを使ったリサイズフィルタ zscale

scale と同じようにリサイズ出来るフィルタだが、それとは別のリサイズ方法 point, spline16, spline36 が使える。ただし spline16, spline36scale で設定できるオプションと比べ処理が速くないのでリアルタイムエンコード、つまり配信用途なら処理が遅くても問題ない。scale と違ってインターレース保持のリサイズは出来ない。3.0 以降で使える。

ffmpeg の scale で使えるリサイズ方法:FFmpeg Scaler Documentation :: Scaler Options
続きを読む Zライブラリを使ったリサイズフィルタ zscale