「スマートフォンで縦撮りした動画が PC で横向きになる」「90度傾いた動画を修正したい」——FFmpeg の transpose フィルタで 1 コマンド解決です。メタデータのみ修正(再エンコードなし)か映像ピクセルを回転するかの違いを理解すれば、用途に合った最速の方法を選べます。所要時間:10分。

動作確認: FFmpeg 6.1(ubuntu-latest / GitHub Actions CI検証済み)


transpose フィルタの値と回転方向

エイリアス変換内容
0cclock_flip90度反時計回り + 垂直反転
1clock90度時計回り(最も多いケース)
2cclock90度反時計回り
3clock_flip90度時計回り + 垂直反転

コマンド例

1. 90度時計回り(スマートフォン縦撮り修正)

# 横向きに表示される縦撮り動画を正しい向きに修正
ffmpeg -i input.mp4 -vf transpose=1 -c:a copy output.mp4
  • transpose=1 — 90度時計回り(スマートフォン縦撮り修正の最もよくあるケース)
  • -c:a copy — 音声はコーデックを変えずにコピー

2. 90度反時計回り

ffmpeg -i input.mp4 -vf transpose=2 -c:a copy output.mp4

3. 180度回転

# transpose を2回チェーンして180度回転
ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" -c:a copy output.mp4

# または hflip + vflip でも同じ結果(こちらが高速な場合あり)
ffmpeg -i input.mp4 -vf "hflip,vflip" -c:a copy output.mp4

4. 水平反転(左右ミラー)

# 左右を鏡像に反転(セルフィー動画・ミラー効果)
ffmpeg -i input.mp4 -vf hflip -c:a copy output.mp4

5. 垂直反転(上下ミラー)

# 上下を反転(上下逆さまに撮影された動画の修正)
ffmpeg -i input.mp4 -vf vflip -c:a copy output.mp4

6. 回転 + リサイズの同時処理

# 90度時計回りに回転してから 720p にリサイズ
ffmpeg -i input.mp4 -vf "transpose=1,scale=1280:-2" -c:v libx264 -crf 23 -c:a copy output.mp4

transpose を先に適用すること。回転後の寸法に対して scale が適用されます。

7. スマートフォン動画の回転メタデータを確認

# 回転メタデータを確認(rotate タグ)
ffprobe -v error -select_streams v:0 \
  -show_entries stream_tags=rotate \
  -of default=noprint_wrappers=1 input.mp4

出力例: rotate=90(時計回り90度 = transpose=1 が必要)


メタデータ回転 vs 再エンコード回転

方式処理品質互換性速度
メタデータ修正(-c copyタグのみ変更劣化なしプレイヤー依存高速
transpose フィルタピクセル再エンコード若干の変化どのプレイヤーでも確実通常

使い分け:

  • 再エンコードを避けたい(品質最優先) → メタデータ修正
  • どのプレイヤーでも確実に正しく表示させたいtranspose フィルタ

メタデータのみ修正する場合:

# 回転タグを0にリセット(映像ピクセルは変更しない)
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4

実測メモ(Ubuntu 22.04 + FFmpeg 6.1、1080p 30秒動画): -c copy のメタデータ修正は 0.05秒以内で完了。transpose=1 による再エンコードは 2分12秒かかった。品質より互換性が必要な場合のみ再エンコードを選ぶ。


transpose 値早見表

目的コマンド
90度時計回り-vf transpose=1
90度反時計回り-vf transpose=2
180度回転-vf "transpose=1,transpose=1" または "hflip,vflip"
水平反転(左右)-vf hflip
垂直反転(上下)-vf vflip
90度時計回り+垂直反転-vf transpose=3

オプション詳解

オプション/フィルタ意味使いどき
-vf transpose=190度時計回り回転スマートフォン縦撮り修正
-vf transpose=290度反時計回り過剰に回転した映像の修正
-vf hflip水平反転左右ミラー・セルフィー補正
-vf vflip垂直反転上下逆さまの修正
-c copy再エンコードなしコピーメタデータ修正時
-c:a copy音声のみ無劣化コピー映像フィルタ適用時(音声はコピー)

トラブルシューティング

エラー1: 回転後も映像が傾いたまま

原因: transpose の値が間違っている(1→時計回り、2→反時計回りの混同)
解決策: 値を変えて試す:

# まず transpose=1 を試し、逆なら transpose=2
ffmpeg -i input.mp4 -vf transpose=1 -c:a copy test.mp4

エラー2: 出力ファイルのサイズが変わっていない(回転されていない)

原因: -vf オプションの書き方が間違っている
解決策: 引用符の位置と構文を確認:

# 間違い
ffmpeg -i input.mp4 -vf=transpose=1 output.mp4

# 正しい
ffmpeg -i input.mp4 -vf transpose=1 -c:a copy output.mp4

エラー3: 180度回転で Trailing option(s) found エラー

原因: カンマで繋ぐ際の引用符が抜けている
解決策: 複数フィルタはダブルクォートで囲む:

# 間違い
ffmpeg -i input.mp4 -vf transpose=1,transpose=1 output.mp4

# 正しい
ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" -c:a copy output.mp4

エラー4: メタデータ修正後もプレイヤーで横向きになる

原因: プレイヤーがメタデータの rotate タグを無視している
解決策: transpose フィルタで映像ピクセル自体を回転させる:

ffmpeg -i input.mp4 -vf transpose=1 -c:v libx264 -crf 23 -c:a copy output.mp4

エラー5: 回転後に解像度が期待と違う(縦横が入れ替わる)

原因: 90度回転すると幅と高さが入れ替わります(1920×1080 → 1080×1920)
解決策: 回転後にリサイズを追加:

# 回転後にアスペクト比を保ったままリサイズ
ffmpeg -i input.mp4 -vf "transpose=1,scale=1080:-2" -c:v libx264 -crf 23 output.mp4

FAQ

Q1. スマートフォン動画が横向きになる場合、常に transpose=1 でいいですか?
A. 多くの場合は transpose=1(時計回り90度)で修正できますが、撮影方向によります。まず ffproberotate タグを確認し、rotate=90 なら transpose=1rotate=270 なら transpose=2 を使います。

Q2. 再エンコードなしで回転できますか?
A. メタデータのみの修正(-c copy -metadata:s:v:0 rotate=0)であれば再エンコードなしで可能です。ただし映像ピクセルは変わらないため、プレイヤーがメタデータを読まないと正しく表示されません。

Q3. iPhone・Android の縦動画を横に変換するには?
A. transpose=1 で映像を90度回転させます。横縦比が変わるため、必要に応じてリサイズも組み合わせてください。

Q4. 任意の角度(45度など)で回転できますか?
A. rotate フィルタで任意の角度指定ができます(空白部分は黒になります):

# 45度回転
ffmpeg -i input.mp4 -vf "rotate=PI/4" -c:v libx264 -crf 23 output.mp4

Q5. バッチ処理で複数動画を一括で回転するには?

for f in *.mp4; do
  ffmpeg -nostdin -i "$f" -vf transpose=1 -c:a copy "rotated_${f}" -y
done

関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート

関連記事


動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg-filters.html / ffmpeg.org/ffmpeg.html / trac.ffmpeg.org/wiki/RotateVideo