この記事でわかること

テスト済みバージョン: 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の黒帯付きで出力)は scalepad フィルタを組み合わせます。

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)/21920×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