5

我正在搞乱在 iPhone 3GS 上加载了 FFmpeg 的 h264 视频。问题是任何以“纵向”方向录制的视频都应用了一个变换矩阵,导致它们显示逆时钟旋转 90 度。

据我目前了解,我只需要修改“tkhd”原子中的变换矩阵。问题是我无法访问或修改这些数据。我检查了 FFmpeg 的实现:

static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)

这清楚地显示了如何以 avformat 访问矩阵,但是当我尝试使用相同的函数访问标题字节时,我没有得到任何合理值。即使我成功拉出矩阵,我也不知道如何替换它?FFmpeg 具有检索和附加到轨道头的功能,但似乎没有任何替换功能?

任何帮助将不胜感激。

谢谢,马特。

4

4 回答 4

13

对于那些无法使 v 过滤器选项起作用的人,经过一番搜索,我找到了一个适用于我的构建的替代选项:

ffmpeg -i in.avi -vf "transpose=1" out.avi

这会将视频顺时针翻转 90 度。希望这可以帮助所有像我一样在 ubuntu 上苦苦挣扎的人!:)

于 2010-11-24T19:05:53.140 回答
4

我刚刚在 FFMPEG git master 分支上接受了一个补丁,它应该可以帮助我们所有人调整 iPhone 的方向以及随后应用于它发送的 .mov 文件的转换。FFMPEG 现在将发送回元数据:

'rotate'=90,180 或 270,具体取决于您需要将图像顺时针旋转多少度才能获得真正的旋转。

于 2012-01-24T21:31:22.983 回答
2

电影是直接用硬件相机的方向录制的。当您转动它时,相机仍然以相同的方向和相同的直接写入文件进行记录。

决定视频方向的是变换矩阵

矩阵的设置取决于 iphone 的方向。这将决定您是否必须旋转视频。这种旋转可以是 90 度,也可以是 180 度。这取决于手机的方向。

在您了解矩阵是什么以及它与图像的关系后,您将能够确定视频的方向。

于 2011-09-07T21:59:23.110 回答
2

iPhone 3GS 中录制的纵向视频在横向上奇怪地旋转,只有 quicktime 才能正确播放,VLC 等播放器在横向播放纵向模式视频,因为它是这样编码的!也许苹果已经设置了一些位,以便 quicktime 正确识别和设置方向。

您可以使用 ffmpeg 的 -vfilters 选项来旋转视频。它在版本 r21242 中可用。您必须在您的 ffmpeg 版本上对其进行修补。

使用 --enable-vfilters 配置构建

您可以使用以下选项:

ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4

旋转输入电影。

于 2010-02-24T14:36:39.923 回答