ffmpeg のフィルタで容量を減らすと言えばたいていの場合デノイズしてのっぺりさせてきたが、今回はデノイズではなくてYチャンネル(輝度)のステップを間引いて容量を減らしてみた。この方法のデメリットはのっぺりしたりぼやけたりはしないがステップが単純化されるのでグラデーションがきれいではなくなる(バンディングがのる)のと、処理が遅いのでリアルタイムエンコード(配信)向きである。

任意でステップを調整できるのでバンディングが目立つところを間引かずに他の所を間引くことで目立たないところで容量を減らすことができる。ステップの調整は映像の内容によって変えた方がきれいに見える。

追記 2015年11月6日 0時21分
可逆圧縮(utvideo)の時は確かに容量は減るのだが、不可逆圧縮(libx264)のときはかえって容量は増えて SSIM も悪くなる傾向にあるのでもう少し調べてみる。

追記 2015年11月11日
paletteuseではなくてlutyuvでも間引くことができるがわずかな効果しかない。Yチャンネルは修正しない方が無難かもしれない。

追記 2017年3月31日
見た目の変化がわかりにくい青色、YUV の U をデノイズした方がよい結果になるかも。使うフィルタはremovegrainを使う。

奇数の値を+1繰り上げる。繰り下げる場合は-1。偶数はそのまま。
lutyuv=y="if(mod(val,2),val,val+1)":u="if(mod(val,2),val,val+1)":v="if(mod(val,2),val,val+1)"

その他にremovegrainでそれぞれのチャンネルに個別にデノイズ処理する方法もある。

Windows の ffmpeg で生放送する方法 :: グレイン除去

追記ここまで

基本コマンド

zscaleが使える場合は spline16 を使いunsharpは輝度だけ調整する
ffmpeg -i video -i img.png -filter_complex [0:0]scale=iw/2:-1,format=yuv420p,extractplanes=y+u+v[y0][u][v];[y0]unsharp=3:3:0.5[y1];[y1][1:0]paletteuse=dither=none:bayer_scale=5,format=yuv420p[y2];[y2][u][v]mergeplanes=0x001020:yuv420p out

1/2リサイズ限定。上よりかなり処理が遅くなるが上のzscaleよりほんの少し容量が減る。unsharpは輝度だけ調整する
ffmpeg -i video -i img.png -filter_complex [0:0]extractplanes=y+u+v[y0][u][v];[y0]zscale=iw/2:-1:f=spline16,unsharp=3:3:0.5[y1];[y1][1:0]paletteuse=dither=none:bayer_scale=5,format=yuv420p[y2];[y2][u][v]mergeplanes=0x001020:yuv444p,format=yuv420p out

フィルタ内容

  1. extractplanesで Yチャンネルを取り出す
  2. パレット画像にpaletteuseを適応して Yチャンネルで使う色を間引く
  3. 間引いた Yチャンネルをmergeplanesで合わせる

パレット画像

普段使っている画像編集ツールでもよいが、ドット単位の編集にはPictBearがおすすめ。画像は 16×16 の 256色使うことができ、基本となる画像の色は 0 から 255 までのグレースケールと透過の 256パターンである。適宜間引く場合は黒で塗りつぶす。右クリックから保存する。

何も間引いていないパレット画像(これを基本とする)

均等に半分間引いたパレット画像

暗い部分を中心に間引いたパレット画像

間引く色を調べる

Yチャンネルはグレースケールなのでそのまま出力することで、グラデーションを残したい部分を修正できる。色を調べるのにSpotColorを使っている。

1枚画像の場合
ffmpeg -i input -vf extractplanes=y -an -vframes 1 output.png

動画出力の場合(適宜開始と終了時間を指定する)
ffmpeg -ss 0 -i input -t 10 -vf extractplanes=y -an -vcodec utvideo output.mkv

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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