我正在搞乱iPhone 3GS上装有FFmpeg的h264视频。问题是以“纵向”方向记录的任何视频都应用了一个变换矩阵,使它们在逆时针上旋转90度。
据我所知,到目前为止,我只需修改'tkhd'原子中的变换矩阵。问题是我无法访问或修改此数据。我检查了FFmpeg实现:
static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
清楚地显示了如何在avformat中访问矩阵,但是当我尝试使用相同的函数访问头字节时,我没有得到任何合理的值。即使我成功地拉出矩阵,我也不确定如何更换它? FFmpeg具有检索和附加到轨道标题的功能,但似乎没有替换它?
非常感谢任何帮助。
谢谢, 太
答案 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度。这取决于手机的方向。
在您了解矩阵是什么以及它与图像的关系后,您将能够确定视频的方向。