余白を追加することで、別のアスペクト比の映像に手軽に変換できる。ただし出力解像度が奇数になるとピクセルフォーマット次第で余白がずれたり、エンコードエラーになる。
基本コマンド
下のコマンドでエラーが出るときは setsar=1
フィルタを最初に当てる。
オリジナルの解像度に横に60ピクセル、縦に20ピクセル追加し、映像を横に30ピクセル、縦に10ピクセルずらし、余白の色を白にする。
ffmpeg -i input -vf pad=w=iw+60:h=ih+20:x=30:y=10:color=white output
ffplay -i input -vf pad=iw+60:ih+20:30:10:ffffff
ffplay -i input -vf setsar=1,pad=iw+60:ih+20:30:10:ffffff
16:9の映像を横幅固定で4:3の映像にして中央に配置。
ffmpeg -i input -vf pad=y=(ih-oh)/2:aspect=4/3 output
ffplay -i input -vf pad=y=(ih-oh)/2:aspect=4/3
ffplay -i input -vf setsar=1,pad=y=(ih-oh)/2:aspect=4/3
4:3の映像を縦幅固定で16:9の映像にして中央に配置。
ffmpeg -i input -vf pad=x=(iw-ow)/2:aspect=16/9 output
ffplay -i input -vf pad=x=(iw-ow)/2:aspect=16/9
ffplay -i input -vf setsar=1,pad=x=(iw-ow)/2:aspect=16/9
次の方法でも行える:4:3を16:9に、16:9を4:3に余白をつける
公式ドキュメント:FFmpeg Filters Documentation : pad
オプション
- width, w[string]
出力解像度の横幅
0 は入力と同じ。-1 はアスペクト比を揃えて縦解像度に合わせる。-n でnの倍数で割りきれるように繰り上げて調整する
既定値:iw - height, h[string]
出力解像度の縦幅
0 は入力と同じ。-1 はアスペクト比を揃えて横解像度に合わせる。-n でnの倍数で割りきれるように繰り上げて調整する
既定値:ih - x[string]
入力した映像の横座標のオフセット値
既定値:0(左) - y[string]
入力した映像の縦座標のオフセット値
既定値:0(上) - color[color]
追加した余白の色の指定。rrggbb 形式も可能
既定値:black - eval[int]
リサイズの評価方法。動的にリサイズできるオプションがないので用途不明- init:1フレーム目で固定
- frame:フレーム毎に変動
- aspect[rational]
出力解像度のアスペクト比の指定。縦または横の長さに合わせて出力解像度を変更する。1にすると縦横が同じサイズになり、16:9の映像に対して、16/9にすると変化がない
既定値:0/1(オリジナルのまま)
縦横幅に使える書式
これも使える。ffmpeg で使える計算書式
- in_w, iw
入力横幅 - in_h, ih
入力縦幅 - out_w, ow
横幅(width, w)で指定した値。縦幅の指定に横幅でリサイズした後の値を使うときに使う - out_h, oh
縦幅(height, h)で指定した値。横幅の指定に縦幅でリサイズした後の値を使うときに使う - x
x で指定した値。不明なら NAN - y
y で指定した値。不明なら NAN - a
iw / ih - sar
サンプルアスペクト比 - dar
(iw / ih) * sar - hsub, vsub
入力クロマサブサンプル値。yuv422p だと hsub は 2、vsub は 1