標準で使えるscale
フィルタの使い方。外部ライブラリにzscale
フィルタがありこちらはHDR、高品質リサイズ向けで処理速度はscale
フィルタより速くない。
- 映像に余白を追加する pad
- 映像を指定座標に切り取る crop
- 比較する動画の解像度に合わせる scale2ref
- Zライブラリを使ったリサイズフィルタ zscale
- 映像を拡大するアップコンバートフィルタのまとめ
基本コマンド
アスペクト比を維持しながら横幅1280ピクセルにリサイズする。
ffmpeg -i input -vf scale=1280:-1 output
さらに縦幅が奇数になる場合には繰り上げて偶数にする。
ffmpeg -i input -vf scale=1280:-2 output
アスペクト比を維持しながら長辺1280ピクセルより大きいとき長辺1280ピクセルにリサイズする。小さければそのまま。
ffmpeg -i input -vf "scale=if(gte(iw\,ih)\,min(1280\,iw)\,-2):if(lt(iw\,ih)\,min(1280\,ih)\,-2)" output
アスペクト比を維持して最大横幅が1280ピクセル、縦幅が720ピクセルまで。
ffmpeg -i input -vf "scale=1280x720:force_original_aspect_ratio=decrease" output
リサイズ方法をlanczosに変える。
ffmpeg -i input -vf scale=1280:-2:flags=lanczos output
ffmpeg -i input -vf scale=1280:-2 -sws_flags lanczos output
lanczosにaccurate_rndを併用する。
ffmpeg -i input -vf scale=1280:-2 -sws_flags lanczos+accurate_rnd output
ガンマ補正を行う。既定値では行わない。
ffmpeg -i input -vf scale=1280:-2 -gamma 1 output
evalの利用例。出力解像度は変更できないので複数の映像を合わせる。例えばoverlay
フィルタなどで使える。
ffmpeg -i input1 -i input2 -filter_complex [1:v]scale=-1:ih-100*t:eval=frame[top];[0:v][top]overlay=x=100:y=100:shortest=1 output
上の例だとoverlay
フィルタの指定座標に向かってリサイズする。2入力目の映像の中心に向かってリサイズするにはoverlay
フィルタの座標も動的に変更する。これを一度に行うのがzoompan
フィルタだがまだ記事を書いていない。
ffmpeg -i input1 -i input2 -filter_complex [1:v]scale=-1:ih-100*t:eval=frame[top];[0:v][top]overlay=x=100+100*t:y=100+100*t:shortest=1 output
video – ffmpeg: How to scale .png over time – Super User
公式ドキュメント:FFmpeg Filters Documentation : scale
オプション
- width, w[string]
出力解像度の横幅。0は入力と同じ。-1はアスペクト比を揃えて縦解像度に合わせる。-nでnの倍数で割りきれるように繰り上げて調整する - height, h[string]
出力解像度の縦幅。0は入力と同じ。-1はアスペクト比を揃えて横解像度に合わせる。-nでnの倍数で割りきれるように繰り上げて調整する - size, s[string]
横幅x縦幅。使える書式 - flags[string]
リサイズアルゴリズムの指定。+をつけて複数指定できる。設定値は後述 - interl[boolean]
インターレース保持のリサイズ指定 - 0:保持しない。既定値
- 1:保持する
- in_color_matrix[string]
入力カラーマトリクス - auto:既定値
- bt709
- fcc
- bt601
- smpte240m
- out_color_matrix[string]
出力カラーマトリクス
設定値はin_color_matrixと同じ - in_range[int]
入力カラーレンジ - 0, auto, unknown:既定値
- 1, mpeg, limited, tv
- 2, jpeg, full, pc
- out_range[int]
出力カラーレンジ。設定値はin_rangeと同じ - force_original_aspect_ratio[int]
縦横どちらに合わせアスペクト比維持してリサイズするか - 0, disable:無効。既定値
- 1, decrease:短い方に合わせる
- 2, increase:長い方に合わせる
- param0, param1
設定方法不明 - eval[int]
リサイズの評価方法 - 0, init:1フレーム目で固定。既定値
- 1, frame:フレーム毎に変動
縦横幅に使える書式
これも使える。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
evalに使える書式
- n
0から始まるフレーム番号 - t
タイムスタンプ秒 - pos
デコード時点での合計ファイルサイズ
リサイズアルゴリズム
-sでのリサイズと、-vfのscale
フィルタでflagsを指定しない場合はbicubicが使われるが、-filter_complexのscale
フィルタでflagsを指定しない場合はbilinearが使われて、-vf、-filter_complexで使われるアルゴリズムが異なる。
- fast_bilinear
- bilinear
- bicubic
- experimental
- neighbor
- area
- bicublin
- gauss
- sinc
- lanczos
- spline
- print_info
- accurate_rnd
- full_chroma_int
- full_chroma_inp
- bitexact
[…] リサイズする scale | ニコラボ […]