横長(16:9)の動画を、ショート動画向けの縦長(9:16)で投稿したい場面はよくあります。左右を切り抜けば画面いっぱいになりますが、登場人物が画面の端にいる動画では、大事な部分が切れてしまいます。
この記事では、ffmpeg を使って 切り抜きなしで 16:9 動画を 9:16 キャンバスに収める方法を、黒帯版とぼかし背景版の2通りで説明します。最後に、複数ファイルをまとめて処理するスクリプトと、確認用のコマンドも載せます。
前提
- ffmpeg 6 以降(
scale、pad、boxblur、overlayフィルタを使います) - 入力:1280×720、16:9、30fps 前後の MP4
- 出力:1080×1920、9:16、H.264 + AAC
例として、AI 生成の 15 秒・16:9・720p のクリップを使います。

構成図:1280×720(16:9)のAI生成フレームを、切り抜かずに 1080×1920 キャンバスの中央へ置き、上下を黒帯で埋める。
計算:16:9 を幅 1080 に合わせると
9:16 の幅 1080px に 16:9 の映像を合わせると、高さは次のようになります。
1080 / 16 * 9 = 607.5 → 偶数に丸めて 608
H.264 では幅・高さを偶数にする必要があるので、scale=1080:-2 と書くと ffmpeg が自動で偶数(608)に丸めてくれます。上下の余白は (1920 - 608) / 2 = 656 px ずつです。
元が 1280×720 なので、幅 1080 に合わせると少し縮小になります。拡大しないので、画質が粗くなる心配はありません。
方法1:黒帯で埋める
いちばん単純な方法です。
ffmpeg -i input.mp4 \
-vf "scale=1080:-2,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
-c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p \
-c:a copy output_black.mp4
フィルタの意味は次のとおりです。
-
scale=1080:-2:幅を 1080 にし、高さは縦横比を保って偶数に丸める。 -
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black:1080×1920 のキャンバスの中央に置き、余白を黒で埋める。 -
setsar=1:サンプルアスペクト比を 1:1 に固定する。一部のプレイヤーで縦横比がずれるのを防ぎます。
音声は再エンコード不要なので -c:a copy にしています。入力に音声がない場合も、このままでエラーにはなりません。
方法2:ぼかした映像で埋める
黒帯が寂しい場合は、同じ映像を拡大してぼかし、背景に敷く方法があります。
ffmpeg -i input.mp4 -filter_complex "\
[0:v]split=2[bg][fg];\
[bg]scale=1080:1920:force_original_aspect_ratio=increase,\
crop=1080:1920,boxblur=luma_radius=40:luma_power=2[bgb];\
[fg]scale=1080:-2[fgs];\
[bgb][fgs]overlay=(W-w)/2:(H-h)/2,setsar=1[v]" \
-map "[v]" -map 0:a? \
-c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p \
-c:a aac -b:a 192k -ar 48000 output_blur.mp4
ポイントは次のとおりです。
-
split=2で映像を背景用(bg)と前景用(fg)に分ける。 - 背景は
force_original_aspect_ratio=increaseで 1080×1920 を覆うまで拡大し、cropではみ出しを切る。背景なので切れても問題ありません。 -
boxblurで強くぼかす。luma_radiusを大きくするほど背景が目立たなくなります。 - 前景は方法1と同じく幅 1080 に合わせ、
overlayで中央に重ねる。 -
-map 0:a?の?は「音声があれば使う」という意味で、音声なしの入力でも失敗しません。
背景は拡大していますが、ぼかすので粗さは目立ちません。前景(本編)は縮小だけなので、画質は保たれます。
方法3:単色+少し上寄せ
ショート動画アプリでは、画面下部にキャプションやボタンが重なります。本編を少し上に寄せると、重なりを避けやすくなります。
ffmpeg -i input.mp4 \
-vf "scale=1080:-2,pad=1080:1920:0:(oh-ih)/2-160:0x111111,setsar=1" \
-c:v libx264 -crf 18 -pix_fmt yuv420p -c:a copy output_up.mp4
(oh-ih)/2-160 で、中央より 160px 上に配置しています。値はプラットフォームの UI に合わせて調整してください。目安として、下から 20%、右から 15% 程度は UI と重なりやすい領域です。
複数ファイルをまとめて処理する
フォルダ内の MP4 をすべて黒帯版に変換するシェルスクリプトです。
#!/usr/bin/env bash
set -euo pipefail
mkdir -p out
for f in *.mp4; do
ffmpeg -nostdin -y -i "$f" \
-vf "scale=1080:-2,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1" \
-c:v libx264 -crf 18 -pix_fmt yuv420p \
-c:a copy "out/${f%.mp4}_9x16.mp4"
done
-nostdin を付けておくと、ループ内で ffmpeg が標準入力を読み込んでしまう問題を防げます。
結果を確認する
変換後は、解像度・長さ・音声の有無を ffprobe で確認します。
ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height,sample_aspect_ratio \
-show_entries format=duration -of compact output_black.mp4
width=1080|height=1920|sample_aspect_ratio=1:1 と表示され、長さが元の動画と同じなら成功です。音声の有無は次のコマンドで分かります。
ffprobe -v error -select_streams a \
-show_entries stream=codec_name -of csv=p=0 output_black.mp4
何も表示されなければ、音声トラックはありません。
よくあるつまずき
-
height not divisible by 2エラー:scale=1080:-1と書くと奇数になることがあります。-2を使います。 -
縦横比がずれて見える:
setsar=1を付け忘れていないか確認します。 -
ぼかし版が重い:
boxblurの半径を下げるか、背景だけ先に縮小してからぼかすと速くなります。 -
色が変わる:
-pix_fmt yuv420pを指定すると、多くのプレイヤーで同じ色に見えます。
まとめ
- 16:9 → 9:16 は、切り抜かずに
scale+padで中央に置くのが安全です。 - 黒帯が気になるなら、
split+boxblur+overlayでぼかし背景にできます。 - UI と重なる場合は、
padの y 座標で本編を少し上に寄せます。
参考
※ 例に使ったクリップは AI 生成です。「Crazy Frog AI」は MixVio のテンプレートエフェクト名で、ページの FAQ には "No. This is an independent highway-chase effect for two consenting adults. There are no weapons, no blood, and no crash, and it is not a frog character." とあります。本記事は MixVio チームが書きました。