scale
フィルタと同じようにリサイズ出来るフィルタだが、それとは別にspline16, spline36などの高品質のリサイズやHDRに対応している。ただしspline16, spline36はscale
フィルタで設定できるオプションと比べ処理が速くないのでリアルタイムエンコード、つまり配信用途なら処理が遅くても問題ない。2022年3月4日のコミットでスライススレッドに対応しscaleフィルタと同程度に速くなった。scale
フィルタと違ってインターレース保持のリサイズは出来ない。HDRからSDRに変換するときはtonemap
フィルタでトーンマッピングする。
外部ライブラリなので別途インストールする。
配布先:sekrit-twc/zimg: Scaling, colorspace conversion, and dithering library
配布先:the-sekrit-twc / zimg — Bitbucket(こちらで更新している)
- リサイズする scale
- 比較する動画の解像度に合わせる scale2ref
- 映像を拡大するアップコンバートフィルタのまとめ
- 異なるダイナミックレンジにトーンマッピングするtonemap
- 色の情報の扱いについて
基本コマンド
横幅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
シリコンスタジオによる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]
リサイズアルゴリズム - 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
https://ffmpeg.org/ffmpeg-filters.html#zscale
オプションの値の指定方法の説明が公式と違っている
返信が遅れましたが、公式のドキュメントの更新がされていないようです。
ffmpeg -h filter=zscale
でオプション一覧を確認できます。