【发布时间】:2012-05-11 17:35:16
【问题描述】:
当我使用 FFMPEG 转换来自 iPhone 4 的 .mov 文件和来自 Android 的 .3gp 文件时。 我需要将视频旋转 90 度,但 iPhone 4s 需要旋转 180 度...
有没有办法解决这个问题?
【问题讨论】:
当我使用 FFMPEG 转换来自 iPhone 4 的 .mov 文件和来自 Android 的 .3gp 文件时。 我需要将视频旋转 90 度,但 iPhone 4s 需要旋转 180 度...
有没有办法解决这个问题?
【问题讨论】:
我不记得 Android 是如何处理这个问题的,但 iPhone 会在 mov 文件元数据中记录方向信息。根据录制时相机的握持方式,视频可能需要 0、90、180 甚至 270 度旋转才能在转换后直立播放。 到目前为止,我不知道 ffmpeg 有任何添加来解析这个元数据,所以你必须使用 ffprobe -show_streams 或类似的东西手动完成,然后适当地设置旋转。
更新:kibitzer points out 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 %ROTATE%
ffmpeg 在 95% 的情况下理解方向,但在某些情况下,在某些硬件中......
【讨论】: