FFmpeg 影片旋轉與 Metadata 旋轉標記(Side Data)處理解析
在處理手機或相機拍攝的影片時,常會遇到「畫面明明是直的,但處理後方向卻亂掉」的狀況。這篇文章記錄了我理解 FFmpeg 畫面旋轉與消除 Metadata 轉向標記的經驗。
為什麼畫面會「轉兩次」?
影片的方向控制其實分為兩個層面:
原始像素資料:畫面實際儲存的長寬與像素陣列。
Metadata 轉向標記(Displaymatrix Side Data):播放器讀取時,根據這項標記自動旋轉畫面(例如
-90.00 degrees)。
FFmpeg 預設在處理影片時,會自動套用 Metadata 的旋轉標記。如果你又手動加上 -vf transpose,就會導致畫面被「旋轉了兩次」。
實例觀察
以我自行拍攝的影片 20191216.mp4 為例:
1. 檢視原始影片資訊
透過 ffprobe 可以發現,該影片原始像素資料其實是橫式(3840x2160),但含有旋轉標記:
Stream #0:1: Video: hevc, yuvj420p, 3840x2160, DAR 16:9 ...
Side data:
displaymatrix: rotation of -90.00 degrees
若直接擷取單幀畫面,FFmpeg 會自動套用旋轉標記,因此輸出呈現直式:
ffmpeg -i '20191216.mp4' -vf "format=yuv420p" -vframes 1 20191216.jpg
2. 直接使用 -vf transpose 的問題
如果直接對影片加上 transpose 濾鏡,FFmpeg 會先套用 Metadata 旋轉,再執行 transpose,且原有的旋轉標記依然會保留在輸出檔中:
順時針轉 90 度 (
transpose=1)
ffmpeg -i '20191216.mp4' -vf "transpose=1,format=yuv420p" -vframes 1 20191216_tr1.jpg逆時針轉 90 度 (
transpose=2)
ffmpeg -i '20191216.mp4' -vf "transpose=2,format=yuv420p" -vframes 1 20191216_tr2.jpg
關鍵解決方案:歸零旋轉標記 (-display_rotation 0)
若要完全掌控畫面轉向並清除 Metadata 標記,必須在輸入參數(-i 之前)加上 -display_rotation 0,強制 FFmpeg 忽略 Metadata 的轉向設定:
ffmpeg -display_rotation 0 -i '20191216.mp4' -vf "format=yuv420p" -vframes 1 20191216_dr0.jpg
此時再用ffprobe檢視 Side data,旋轉標記已被歸零:
Side data:
displaymatrix: rotation of -00.00 degrees
完全掌握FFMPEG旋轉與翻轉指令
在忽略 Metadata(-display_rotation 0)的前提下,搭配 -vf transpose 參數便能精準控制最終輸出畫面:
1. 純旋轉
順時針轉 90 度 (
transpose=1)
ffmpeg -display_rotation 0 -i '20191216.mp4' -vf "transpose=1,format=yuv420p" -vframes 1 20191216_dr0_tr1.jpg逆時針轉 90 度 (
transpose=2)
ffmpeg -display_rotation 0 -i '20191216.mp4' -vf "transpose=2,format=yuv420p" -vframes 1 20191216_dr0_tr2.jpg
2. 旋轉 + 水平翻轉
逆時針轉 90 度 + 水平翻轉 (
transpose=0)
ffmpeg -display_rotation 0 -i '20191216.mp4' -vf "transpose=0,format=yuv420p" -vframes 1 20191216_dr0_tr0.jpg順時針轉 90 度 + 水平翻轉 (transpose=3)
ffmpeg -display_rotation 0 -i '20191216.mp4' -vf "transpose=3,format=yuv420p" -vframes 1 20191216_dr0_tr3.jpg
速查表:-vf transpose 參數對照
| 參數值 | 效果描述 |
| 0 | 逆時針轉 90 度 + 水平翻轉 |
| 1 | 順時針轉 90 度 |
| 2 | 逆時針轉 90 度 |
| 3 | 順時針轉 90 度 + 水平翻轉 |
總結
處理手機影片旋轉問題時,記得核心原則:先用 -display_rotation 0 清除 Metadata 影響,再使用 -vf transpose 重構影像資料,即可完美解決影片畫面方向異常的問題。




留言