iPhone上的FFmpeg - 修改视频方向

时间:2010-02-05 16:10:38

标签: iphone video ffmpeg orientation

我正在搞乱iPhone 3GS上装有FFmpeg的h264视频。问题是以“纵向”方向记录的任何视频都应用了一个变换矩阵,使它们在逆时针上旋转90度。

据我所知,到目前为止,我只需修改'tkhd'原子中的变换矩阵。问题是我无法访问或修改此数据。我检查了FFmpeg实现:

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

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

非常感谢任何帮助。

谢谢, 太

4 个答案:

答案 0 :(得分:12)

对于那些无法使用v filter选项的人来说,经过一些搜索,我找到了一个适用于我的构建的替代选项:

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

将视频顺时针旋转90度。希望这能帮助所有关于ubuntu的人像我一样挣扎! :)

答案 1 :(得分:3)

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

'rotate'= 90,180,或270,具体取决于顺时针旋转图像所需的度数,以获得真正的旋转。

答案 2 :(得分:2)

iPhone 3GS中录制的人像视频在风景中奇怪地旋转,只有快速播放才能正常播放,像VLC等播放器在风景中播放肖像模式视频,因为它是以这种方式编码的!也许苹果已经设置了一些,以便quicktime识别并正确设置方向。

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

使用--enable-vfilters

配置构建

您可以使用选项:

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

旋转输入影片。

答案 3 :(得分:2)

直接使用硬件摄像头的方向录制动画。当你转动它时,相机仍然以相同的方向记录并且直接写入文件。

决定视频方向的因素是Transform matrix

matrix的设置取决于iPhone的方向。这将决定您是否必须旋转视频。并且旋转可以是90度并且可以是180度。这取决于手机的方向。

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