横長(16:9)の動画を縦長(9:16)にするには、はみ出す左右を切り落とすか、足りない上下を埋めるかのどちらかです。

縦型動画への変換前後の比較。左が 16:9 の横長映像、右は 9:16 に切り出した縦長の状態

左が 16:9 の元の映像、右が crop=ih*9/16:ih,scale=1080:1920 で 9:16 に切り出した結果です。左右が大きく切り落とされます。

素材: Tears of Steel (CC) Blender Foundation | mango.blender.org、CC BY 3.0。映画の1フレームを切り出し、フィルターで加工しています。

縦動画フォーマットの基本

項目 値
アスペクト比 9:16
解像度(標準) 1080×1920 px
解像度(最小) 540×960 px(TikTok のインフィード広告の条件)

方法1: 中央クロップ(crop)

横長の映像の中央を、縦長のサイズで切り出します。被写体が画面の中央にある場合に向いています。

1920×1080 → 1080×1920 中央クロップ

まず高さが1920になるまで拡大し、その中央から幅1080を切り出します。

ffmpeg -i input.mp4 -vf "scale=-1:1920,crop=1080:1920:(iw-1080)/2:0" output_vertical.mp4

scale=-1:1920 の -1 は、縦横比を保つように幅を自動で決める指定です。

中央の正方形を切り出し、上下に黒帯を付ける

1920×1080 の動画の中央から 1080×1080 を切り出し、縦長の画面に収める例です。上下には黒い帯が付きます。

ffmpeg -i input.mp4 -vf "crop=1080:1080:(iw-1080)/2:(ih-1080)/2,scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(1080-iw)/2:(1920-ih)/2" output_vertical.mp4

方法2: 黒帯パディング(pad)

映像全体を縮小し、上下に黒い帯を足します。映像はすべて見えますが、帯が目立ちます。

横動画を縦フォーマットに黒帯付きで収める

ffmpeg -i input.mp4 -vf "scale=1080:-2,pad=1080:1920:0:(1920-ih)/2:black" output_padded.mp4

scale=1080:-2 で幅を1080に縮め、pad で高さ1920の画面の上下中央に置きます。

カラー背景でパディング

ffmpeg -i input.mp4 -vf "scale=1080:-2,pad=1080:1920:0:(1920-ih)/2:color=0x1a1a2e" output_padded_color.mp4

帯の色は、color=0x1a1a2e のように16進数のカラーコードで指定できます。

方法3: ぼかし背景パディング(推奨)

元の映像をぼかして背景にし、その上に元の映像を重ねます。黒い帯が出ないので、自然に見えます。

ffmpeg -i input.mp4 -filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:3[bg];[0:v]scale=1080:-2[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2[out]" -map "[out]" -map "0:a?" -c:v libx264 -b:v 8M -pix_fmt yuv420p -c:a copy output_blur_bg.mp4

-map "[out]" だけでは映像しか出力されないので、-map "0:a?" で音声も入れています(? は、音声がない動画でもエラーにしない指定です)。

-filter_complex の中では、次の処理をしています。

  1. [bg]:元の映像を、縦横比を保ったまま1080×1920を覆う大きさに拡大し、はみ出した部分を切り落としてから、ぼかして背景にする
  2. [fg]:元の映像を、縦横比を保ったまま幅1080に縮小する
  3. overlay:ぼかした背景の中央に [fg] を重ねる

方法4: 特定位置でのクロップ

被写体が中央にない場合は、切り出す位置をずらします。

下のコマンドの x は、scale=-1:1920 で拡大した後の画面での位置です(1920×1080 の素材なら、拡大後の幅は約 3413)。ブラウザで試すなら、動画クロップツールで上下左右から削る割合(%)を指定して切り出せます。

左側を優先してクロップ(x=0)

ffmpeg -i input.mp4 -vf "scale=-1:1920,crop=1080:1920:0:0" output_left.mp4

右側を優先してクロップ

ffmpeg -i input.mp4 -vf "scale=-1:1920,crop=1080:1920:iw-1080:0" output_right.mp4

iw-1080 は「幅から1080を引いた位置」で、右端に合わせる指定です。

任意のx座標でクロップ

ffmpeg -i input.mp4 -vf "scale=-1:1920,crop=1080:1920:300:0" output_custom.mp4

crop の3つ目の値(x)を変えると、切り出す位置が左右に動きます。

出力のサイズを確認する

書き出した動画の幅・高さと、ピクセルの縦横比(SAR)を ffprobe で確認します。1080,1920 に続く SAR が 1:1、N/A、または 10240:10239 のように 1:1 にごく近い値なら 9:16 です。

ffprobe -v error -select_streams v:0 -show_entries stream=width,height,sample_aspect_ratio -of csv=p=0 output_vertical.mp4

SAR が 4:3 や 64:45 のときは、元の動画のピクセルが正方形ではありません(DVD や古いビデオカメラの映像など)。このままでは 9:16 で表示されないので、フィルタの先頭に scale=iw*sar:ih,setsar=1, を足し、ピクセルを正方形にしてから処理します。

音声を維持する

-vf を使うコマンドは、何も付けなくても音声が残ります(MP4 では AAC に変換されます)。音声を変換せずに残すなら -c:a copy、ビットレートを決めるなら -c:a aac -b:a 256k を付けます。-filter_complex で -map "[out]" を指定するコマンドは、-map "0:a?" も付けないと音声が入りません。

ffmpeg -i input.mp4 -vf "scale=-1:1920,crop=1080:1920:(iw-1080)/2:0" -c:v libx264 -b:v 8M -pix_fmt yuv420p -c:a aac -b:a 256k output_vertical.mp4

crop フィルタの基本構文

crop=w:h:x:y
パラメータ 説明
w 切り出す幅
h 切り出す高さ
x 切り出し開始位置(左から)
y 切り出し開始位置(上から)

値には、iw(切り出す前の幅)や ih(切り出す前の高さ)などの変数を使えます。

関連記事

よくある質問

TikTok の推奨解像度は?

1080×1920(9:16)が最も無難です。アップロードした動画は TikTok 側で再エンコードされます。

横動画を縦に変換すると画質が落ちる?

1920×1080 の素材から 9:16 を切り出すと、使われるのは元の映像の幅 約 608 ピクセル分です。方法1のコマンドはこれを 1080×1920 に拡大するので、元の映像よりぼやけます。上下に黒い帯を付けて 9:16 にする方法はおすすめしません。視聴体験が悪くなるためです。

iPhone で撮った縦動画が横向きで再生される

iPhone は撮影時に、動画へ「回転メタデータ(向きの情報)」を書き込みます。この情報を読まないプレーヤーでは、横向きで再生されます。ffmpeg -i in.mov -c:v libx264 -c:a copy out.mp4 のように再エンコードすると、FFmpeg が回転メタデータに合わせて映像そのものを回転させます。そのため、どのプレーヤーでも縦向きになります。ここに transpose を足すと、二重に回転してしまいます。

YouTube Shorts と TikTok で別々に作るべき?

基本的には同じファイルで構いません。どちらも 1080×1920 が推奨で、違うのは長さの上限だけです。Shorts は最大3分です(2024年後半に60秒から延びました)。TikTok の上限は変わることがあるので、長い動画は投稿前に TikTok のヘルプで確認してください。