scaleフィルタと同じようにリサイズ出来るフィルタだが、それとは別にspline16, spline36などの高品質のリサイズやHDRに対応している。ただしspline16, spline36scaleフィルタで設定できるオプションと比べ処理が速くないのでリアルタイムエンコード、つまり配信用途なら処理が遅くても問題ない。2022年3月4日のコミットでスライススレッドに対応しscaleフィルタと同程度に速くなった。scaleフィルタと違ってインターレース保持のリサイズは出来ない。HDRからSDRに変換するときはtonemapフィルタでトーンマッピングする。

外部ライブラリなので別途インストールする。
配布先:sekrit-twc/zimg: Scaling, colorspace conversion, and dithering library
配布先:the-sekrit-twc / zimg — Bitbucket(こちらで更新している)

基本コマンド

横幅640に縦幅はアスペクト比を揃えて bilinear のディザーなしにリサイズ。
ffmpeg -i input -vf zscale=640:-2 -c:a copy output

横幅を半分に縦幅はアスペクト比を揃えて spline16 のディザーなしにリサイズ。配信用途では指定解像度に spline16 のディザーなしがおすすめ。
ffmpeg -i input -vf zscale=iw/2:-2:f=spline16 -c:a copy output

色情報を設定するときは入力データがないとエラーになるので、ない、または不明のときは入出力の両方を指定する。
zscale=rin=0:pin=1:tin=1:min=1:r=0:p=1:t=1:m=1

CIE 色度図を表示する ciescope

シリコンスタジオによるHDR出力対応の理論と実践:
https://www.siliconstudio.co.jp/rd/presentations/files/CEDEC2016/cedec2016_sskk_hdr_kawase.pdf
UHDTV HDR,HLG & WCGを理解する by LightIllusionに関する製品情報|Edipit

Video playback – Official Kodi Wiki
Optimized Spline36 and Lanczos3 Resizers – Doom9’s Forum

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

オプション

  • width, w[string]
    出力解像度の横幅
    0 は入力と同じ。-1 はアスペクト比を揃えて縦解像度に合わせる。
    -n でnの倍数で割りきれるように繰り上げて調整する
  • height, h[string]
    出力解像度の縦幅
    0 は入力と同じ。-1 はアスペクト比を揃えて横解像度に合わせる。
    -n でnの倍数で割りきれるように繰り上げて調整する
  • size, s[string]
    横幅x縦幅。使える書式
  • dither, d[int]
    ディザーオプション
    • 0, none:既定値
    • 1, ordered
    • 2, random
    • 3, error_diffusion
  • filter, f[int]
    リサイズアルゴリズム
    • 0, point
    • 1, bilinear:既定値
    • 2, bicubic
    • 3, spline16
    • 4, spline36
    • 5, lanczos:既定値はlanczos3、メモ1メモ2
  • out_range, range, r[int]
    出力カラーレンジの指定
    • -1, input:既定値
    • 0, limited, tv
    • 1, full, pc
  • primaries, p[int]
    出力カラープライマリー(別の言い方ではカラースペース、ホワイトポイント)の指定
    • -1, input:既定値
    • 1, 709, bt709
    • 2, unspecified, unknown
    • 4, bt470m
    • 5, bt470bg
    • 6, 170m, smpte170m
    • 7, 240m, smpte240m
    • 8, film
    • 9, 2020, bt2020
    • 10, smpte428
    • 11, smpte431
    • 12, smpte432
    • 22, jedec-p22, ebu3213
  • transfer, t[int]
    出力トランスファーの指定
    • -1, input:既定値
    • 1, 709, bt709
    • 2, unspecified
    • 4, bt470m
    • 5, bt470bg
    • 6, 601, smpte170m
    • 8, linear
    • 9, log100
    • 10, log316
    • 11, iec61966-2-4
    • 13, iec61966-2-1
    • 14, 2020_10
    • 15, 2020_12
    • 16, smpte2084:PQ (Perceptual Quantization)
    • 18, arib-std-b67:HLG (Hybrid Log-Gamma)
  • matrix, m[int]
    出力カラーマトリクスの指定
    • -1, input:既定値
    • 0, gbr
    • 1, 709, bt709
    • 2, unspecified
    • 4, fcc
    • 5, 470bg
    • 6, 170m, smpte170m
    • 7, smpte240m
    • 8, ycgco
    • 9, 2020_ncl, bt2020nc
    • 10, 2020_cl, bt2020c
    • 12, chroma-derived-nc
    • 13, chroma-derived-c
    • 14, ictcp
  • in_range, rangein, rin[int]
    入力カラーレンジの指定
    • -1, input:既定値
    • 0, limited, tv
    • 1, full, pc
  • primariesin, pin[int]
    入力カラープライマリー(別の言い方ではカラースペース、ホワイトポイント)の指定
    • -1, input:既定値
    • 1, 709, bt709
    • 2, unspecified
    • 4, bt470m
    • 5, bt470bg
    • 6, 170m, smpte170m
    • 7, 240m, smpte240m
    • 8, film
    • 9, 2020, bt2020
    • 10, smpte428
    • 11, smpte431
    • 12, smpte432
    • 22, jedec-p22, ebu3213
  • transferin, tin[int]
    入力トランスファーの指定
    • -1, input:既定値
    • 1, 709, bt709
    • 2, unspecified
    • 4, bt470m
    • 5, bt470bg
    • 6, 601, smpte170m
    • 8, linear
    • 9, log100
    • 10, log316
    • 11, iec61966-2-4
    • 13, iec61966-2-1
    • 14, 2020_10, bt2020-10
    • 15, 2020_12, bt2020-12
    • 16, smpte2084:PQ (Perceptual Quantization)
    • 18, arib-std-b67:HLG (Hybrid Log-Gamma)
  • matrixin, min[int]
    入力カラーマトリクスの指定
    • -1, input:既定値
    • 0, gbr
    • 1, 709, bt709
    • 2, unspecified
    • 4, fcc
    • 5, 470bg, bt470bg
    • 6, smpte170m
    • 7, smpte240m
    • 8, ycgco
    • 9, 2020_ncl, bt2020nc
    • 10, 2020_cl, bt2020c
    • 12, chroma-derived-nc
    • 13, chroma-derived-c
    • 14, ictcp
  • chromal, c[int]
    出力クロマロケーションの指定
    • -1, input:既定値
    • 0, left
    • 1, center
    • 2, topleft
    • 3, top
    • 4, bottomleft
    • 5, bottom
  • chromalin, cin[int]
    入力クロマロケーションの指定
    • -1, input:既定値
    • 0, left
    • 1, center
    • 2, topleft
    • 3, top
    • 4, bottomleft
    • 5, bottom
  • npl[double]
    ピーク輝度値(nominal peak luminance)の指定。zimg 2.3.0以上
    既定値:nan
    範囲:0 から DBL_MAX
  • agamma[boolean]
    近似ガンマを許可する。zimg 2.3.0 以上
    既定値:1(許可)
    範囲:0 と 1

縦横幅に使える書式

これも使える。ffmpeg で使える評価式

  • in_w, iw
    入力横幅
  • in_h, ih
    入力縦幅
  • out_w, ow
    横幅(width, w)で指定した値。縦幅の指定に横幅でリサイズした後の値を使うときに使う
  • out_h, oh
    縦幅(height, h)で指定した値。横幅の指定に縦幅でリサイズした後の値を使うときに使う
  • a
    iw / ih
  • sar
    サンプルアスペクト比
  • dar
    (iw / ih) * sar
  • hsub, vsub
    入力クロマサブサンプル値。yuv422p だと hsub は 2、vsub は 1
  • ohsub, ovsub
    出力クロマサブサンプル値。yuv422p だと hsub は 2、vsub は 1

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

コメントを残す

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

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