「スマートフォンで縦撮りした動画が PC で横向きになる」「90度傾いた動画を修正したい」——FFmpeg の transpose フィルタで 1 コマンド解決です。メタデータのみ修正(再エンコードなし)か映像ピクセルを回転するかの違いを理解すれば、用途に合った最速の方法を選べます。所要時間:10分。
動作確認: FFmpeg 6.1(ubuntu-latest / GitHub Actions CI検証済み)
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
実測メモ(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=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度)で修正できますが、撮影方向によります。まず ffprobe で rotate タグを確認し、rotate=90 なら transpose=1、rotate=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 チートシートです。手元に置いておくと調べる時間を短縮できます。
関連記事
- 動画をリサイズ・スケールする — scale フィルタの使い方
- 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