当我使用 FFMPEG 转换来自 iPhone 4 的 .mov 文件和来自 Android 的 .3gp 文件时。我需要将视频旋转 90 度,但 iPhone 4s 需要 180 度...
有没有什么办法解决这一问题?
我不记得 Android 是如何处理这个问题的,但 iPhone 会在 mov 文件元数据中记录方向信息。根据录制时相机的握持方式,视频可能需要 0、90、180 甚至 270 度旋转才能在转换后直立播放。 到目前为止,我不知道 ffmpeg 有任何添加来解析这个元数据,所以你必须手动使用ffprobe -show_streams
或类似的东西,然后适当地设置旋转。
更新:正如kibitzer 指出的那样, ffmpeg 现在确实检测到视频已旋转,但尚未提供自动旋转修复。相反,您仍然必须解析旋转信息并使用 、 和 视频 过滤器的组合transpose
来vflip
正确hflip
旋转视频。
较新的 ffmpeg 返回一个rotate:元数据标头(当您运行时ffmpeg -i
),它指定视频旋转的角度,因此您不必自己解析旋转矩阵,只需使用 ffmpeg 的过滤器旋转视频即可。
例如,如果 ffmpeg 输出rotate: 90那么你会运行类似:
ffmpeg -y -i rotated_vid.mov -vf "transpose=1" correct_video.avi
我使用一个名为 mediainfo 的程序,它显示方向角度并输入 ffmpeg 选项:
-vf %旋转%
ffmpeg 在 95% 的情况下理解方向,但在某些情况下,在某些硬件中......