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

動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 12 件を検証スクリプトで実行し、全て成功しました(2026-09-06)


動画回転の前後比較。左が横長の元映像、右は transpose=1 で時計回りに 90 度回転した縦長の状態

左が元映像、右が transpose=1(時計回り 90 度)。回転すると縦横比が入れ替わるため、右は上下に余白が付いています。

素材: Big Buck Bunny © Blender Foundation, CC BY 3.0

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

エイリアス 変換内容
0 cclock_flip 90度反時計回り + 垂直反転
1 clock 90度時計回り(最も多いケース)
2 cclock 90度反時計回り
3 clock_flip 90度時計回り + 垂直反転

コマンド例

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

確認範囲の訂正(2026-09-11): 旧版の回転方法別の処理時間は測定ログを追跡できないため取り下げました。回転メタデータの変更は画素を回転せず、再生アプリによって反映されない場合があります。画素を回転する方法は再エンコードが必要です。保存後、実際に渡す相手のアプリで向きと音声を確認してください。


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=1 90度時計回り回転 スマートフォン縦撮り修正
-vf transpose=2 90度反時計回り 過剰に回転した映像の修正
-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

関連記事


動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 12 件を検証スクリプトで実行し、全て成功しました(2026-09-06) 一次ソース: ffmpeg.org/ffmpeg-filters.html / ffmpeg.org/ffmpeg.html / trac.ffmpeg.org/wiki/RotateVideo