[FFmpeg] 動画の向きを変える (回転、反転)

動画(映像)の回転・反転をするには、映像フィルターの機能を使う方法と、映像メタデータ情報の設定で行う方法があります。

映像フィルター機能による回転・反転 (要エンコード)

映像ストリームにフィルターを適用して回転・反転する方法です。
この手法の場合、映像ストリームのエンコードが必要となります。なお、音声は無劣化コピーできるため、コード内に -c:a copy を記述しています。

回転、回転+反転 (transpose)

transpose=[値/文字列] フィルターを使うと回転と回転+反転の指定ができます。
値や文字列の指定による結果は以下の通りです。

文字列 結果
0 cclock_flip 反時計回りに90度回転+反転
1 clock 時計回りに90度回転
2 cclock 反時計回りに90度回転
3 clock_flip 時計回りに90度回転+反転

回転

ffmpeg -i INPUT.mp4 -vf "transpose=1" -c:a copy OUTPUT.mp4
ffmpeg -i INPUT.mp4 -vf "transpose=clock" -c:a copy OUTPUT.mp4

回転+反転

ffmpeg -i INPUT.mp4 -vf "transpose=0" -c:a copy OUTPUT.mp4
ffmpeg -i INPUT.mp4 -vf "transpose=cclock_flip" -c:a copy OUTPUT.mp4

180度回転

ffmpeg -i INPUT.mp4 -vf "transpose=1,transpose=1" -c:a copy OUTPUT.mp4

※180度回転したい場合は、transpose の指定を2回書けばよいです。

縦長・横長を保持したまま回転

横長、縦長の状態を保持したまま動画を回転させたい場合に使うコードです。

縦長を保持して回転する (portrait)

ffmpeg -i INPUT.mp4 -vf "transpose=1:portrait" -c:a copy OUTPUT.mp4

横長を保持して回転する (landscape)

ffmpeg -i INPUT.mp4 -vf "transpose=1:landscape" -c:a copy OUTPUT.mp4

※縦長・横長の状態が優先されるため、場合によっては結果が変わらない (変更前の状態と同じになる) こともあります。

参考URL

反転 (hflip, vflip)

映像を単純に反転させるコマンドです。
インカメラ撮影などで被写体が反転しているときなどに使えます。

水平方向に反転 (hflip)

ffmpeg -i INPUT.mp4 -vf "hflip" -c:a copy OUTPUT.mp4
参考URL

垂直方向に反転 (vflip)

ffmpeg -i INPUT.mp4 -vf "vflip" -c:a copy OUTPUT.mp4
参考URL

回転と組み合わせることもできる

ffmpeg -i INPUT.mp4 -vf "vflip,transpose=clock" -c:a copy OUTPUT.mp4

映像のメタデータを設定して回転させる (無劣化コピー)

映像ストリームのメタデータに回転の情報を設定 (上書き) すると、無劣化のまま変更することができます。

回転 (-display_rotation)

ffmpeg -display_rotation 90 -i INPUT.mp4 -c copy OUTPUT.mp4

設定された回転情報はメタデータから確認できる

メタデータに設定された回転情報は、ffmpeg -i [ファイル名] で確認できます。

ffmpeg -i INPUT.mp4 ~中略~ Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20250926_102459.mp4': ~中略~ Stream #0:0[0x1](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 156 kb/s, start 0.014104 (default) Metadata: creation_time : 2025-09-26T01:30:26.000000Z handler_name : SoundHandle vendor_id : [0][0][0][0] Stream #0:1[0x2](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 17506 kb/s, 29.97 fps, 29.97 tbr, 90k tbn (default) Metadata: creation_time : 2025-09-26T01:30:26.000000Z handler_name : VideoHandle vendor_id : [0][0][0][0] Side data: displaymatrix: rotation of -90.00 degrees
上記の最後の行にある displaymatrix: rotation of -90.00 degrees が該当する回転情報です

-display_rotation 0 をセットすると、変更後はメタデータ(Side data)に回転情報が表示されなくなります。(削除される)

参考URL

反転はうまくいかない?

反転設定として -display_vflip-display_hflip もあるのですが、指定の方法が間違っているのか思った通りの動きをしないのでここでは割愛します。
映像を反転したいときは -vf "hflip" を使うのがおすすめです。

(うまくいくようになったら追記する予定。もしうまくいく人いたら教えてほしい)

記事をシェアする
  • X
  • Bluesky
  • Facebook
  • Hatena
  • line