余白を追加することで、別のアスペクト比の映像に手軽に変換できる。ただし出力解像度が奇数になるとピクセルフォーマット次第で余白がずれたり、エンコードエラーになる。
リサイズする scale
映像を指定座標に切り取る crop
基本コマンド
下のコマンドでエラーが出るときは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=-1:aspect=4/3 output
ffplay -i input -vf pad=y=-1:aspect=4/3
ffplay -i input -vf setsar=1,pad=y=-1:aspect=4/3
4:3の映像を縦幅固定で16:9の映像にして中央に配置。
ffmpeg -i input -vf pad=x=-1:aspect=16/9 output
ffplay -i input -vf pad=x=-1:aspect=16/9
ffplay -i input -vf setsar=1,pad=x=-1:aspect=16/9
次の方法でも行える:4:3を16:9に、16:9を4:3に余白をつける
Resizing videos with ffmpeg/avconv to fit into static sized player – Super User
シネマスコープの映像を横幅固定で16:9の映像にして中央に配置。
ffmpeg -i input -vf pad=y=-1:aspect=16/9 output
ffplay -i input -vf pad=y=-1:aspect=16/9
ffplay -i input -vf setsar=1,pad=y=-1:aspect=16/9
公式ドキュメント:FFmpeg Filters Documentation : pad
オプション
- width, w[string]
出力解像度の横幅。0, iwは入力と同じ
既定値:iw - height, h[string]
出力解像度の縦幅。0, ihは入力と同じ
既定値:ih - x[string]
入力した映像の横座標のオフセット値。左が0になり右に向かって値が大きくなる。(iw-ow)/2、-1で中央そろえになる
既定値:0 - y[string]
入力した映像の縦座標のオフセット値。上が0になり下に向かって値が大きくなる。(ih-oh)/2、-1で中央そろえになる
既定値: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