この記事でわかること
scaleフィルタの基本構文- アスペクト比を自動保持しながらリサイズする方法(
-1/-2指定) iw/ihを使って元のサイズに対する相対変更をする方法- 最大解像度を超えないように制限する方法
padフィルタでレターボックス(黒帯)を追加する方法- 出力ピクセルフォーマットを指定する方法
テスト済みバージョン: FFmpeg 6.1で確認済み(ubuntu-latest / CI検証済み) 対象 OS: Windows / macOS / Linux
scaleフィルタの基本構文
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
| 部分 | 説明 |
|---|---|
-vf | 映像フィルタを指定するオプション(-filter:v と同義) |
scale=幅:高さ | 出力の幅と高さをピクセルで指定 |
幅・高さの両方を明示した場合、アスペクト比が異なると映像が引き伸ばされます。ほとんどのケースでは後述のアスペクト比保持オプションを使うことを推奨します。
アスペクト比の自動保持
-1 と -2 の違い
scaleフィルタでは片方の値を -1 または -2 にすることで、もう一方の辺からアスペクト比を計算して自動設定できます。
| 値 | 動作 |
|---|---|
-1 | アスペクト比を保持して自動計算。奇数になる可能性がある |
-2 | アスペクト比を保持しつつ2の倍数に丸める(H.264エンコードに必須) |
H.264はピクセル幅・高さが奇数だとエラーになるため、-2 を使うことを推奨します。
幅を固定して高さを自動計算
ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4
高さを固定して幅を自動計算
ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4
相対サイズ変更(iw / ih 変数)
iw(入力幅)と ih(入力高さ)を使って、元のサイズに対する相対的なリサイズができます。
半分のサイズに縮小
ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 output.mp4
1.5倍に拡大
ffmpeg -i input.mp4 -vf scale=iw*1.5:ih*1.5 output.mp4
アスペクト比保持で幅を2分の1に
ffmpeg -i input.mp4 -vf scale=iw/2:-2 output.mp4
iw/ih 変数は元の解像度を知らなくても汎用的なスクリプトを書けるので便利です。
最大解像度制限
4K素材を最大フルHD(1920px)に制限したい場合など、「これ以上大きくしない」制約を付けたいケースに使います。min() 関数で入力解像度と上限値の小さい方を選択します。
ffmpeg -i input.mp4 -vf "scale='min(1920,iw)':-2" output.mp4
このコマンドでは、入力幅が1920未満ならそのまま、1920以上なら1920に縮小します。高さは -2 でアスペクト比を保ちながら自動計算されます。
式を含むフィルタはクォートで囲むことでシェルの特殊文字(
'、,)を保護してください。
パディング(PAD)でレターボックスを追加
異なるアスペクト比の映像を特定サイズの枠内に収めたい場合(例: 16:9映像を1920×1080の黒帯付きで出力)は scale と pad フィルタを組み合わせます。
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4
| 部分 | 説明 |
|---|---|
scale=1920:1080:force_original_aspect_ratio=decrease | アスペクト比を保ちながら1920×1080に収まるよう縮小 |
pad=1920:1080:(ow-iw)/2:(oh-ih)/2 | 1920×1080の枠に中央配置でパディング |
デフォルトのパディングカラーは黒(black)です。変更したい場合は pad=...:color=white のように指定します。
出力ピクセルフォーマットの指定
H.264エンコード時は yuv420p を明示的に指定すると幅広いプレーヤーとの互換性が上がります。
ffmpeg -i input.mp4 -vf scale=1280:-2 -pix_fmt yuv420p output.mp4
format フィルタをチェーンで追加することも可能です。
ffmpeg -i input.mp4 -vf "scale=1280:-2,format=yuv420p" output.mp4
よく使うコマンドまとめ
ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4
ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4
ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4
ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 output.mp4
よくある質問
height not divisible by 2 エラーが出る
-1 を使った場合に奇数ピクセルになると発生します。-2 に変更してください。
ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4
拡大するとぼやける
scaleフィルタのデフォルトアルゴリズム(bilinear)は拡大時に若干ぼやけます。品質を上げたい場合は -sws_flags lanczos を追加してみてください。
ffmpeg -i input.mp4 -vf scale=3840:-2 -sws_flags lanczos output.mp4
関連記事
動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg-filters.html / ffmpeg.org/ffmpeg.html / trac.ffmpeg.org/wiki/Scaling