【问题标题】:FFmpeg on iPhone - Modifying Video OrientationiPhone 上的 FFmpeg - 修改视频方向
【发布时间】:2011-01-13 14:11:10
【问题描述】:

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

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

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

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

任何帮助将不胜感激。

谢谢, 马特。

【问题讨论】:

  • 这是一个 C++ 调用,会给你矩阵信息吗?你有使用这个的例子吗?我知道矩阵信息如何进行旋转我只需要知道获取该矩阵信息的简单方法。我希望这将转化为 Windows 实现......在此先感谢

标签: iphone video ffmpeg orientation


【解决方案1】:

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

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

使用 --enable-vfilters 配置构建

您可以使用以下选项:

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

旋转输入影片。

【讨论】:

  • 谢谢拉吉。我正在使用 FFmpeg 库进行开发,因此不能选择使用 ffmpeg 作为命令行程序。我必须想办法使用他们的源库。
  • Matthew, @"我正在使用 FFmpeg 库进行开发" 我知道,这篇文章的目的是一样的!您使用如上所示的选项创建命令行参数并将其传递给 ffmpeg main() 方法。其余的将由 ffmpeg 自己完成。您必须将 ffmpeg.c 文件包含到您的项目中,以及使用适当的配置命令创建的静态库,我希望这已经完成。
【解决方案2】:

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

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

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

【讨论】:

  • 这是最新 ffmpeg 的命令行;去年是 -vfilters "rotate=90"
【解决方案3】:

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

决定视频方向的是Transform matrix

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

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

【讨论】:

  • 编辑:我的第一条评论是假设这是我的问题。我这里提供的信息与我对变换矩阵的理解有关,以及从哪里获取文件中的信息。既然他在问这个问题,我想这篇文章会很贴切。为我之前的评论/编辑道歉,我再次认为这是我的问题。谢谢:)
【解决方案4】:

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

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

【讨论】:

  • 你能添加一个链接到你的补丁吗?
  • 这种变化是否也会影响视频中的元信息,告诉玩家如何在播放期间旋转/转换视频。您可以通过水平和垂直翻转视频来将视频旋转 180 度,但这只会切换哪些播放器正确或不正确地显示视频。不支持转换的播放器(例如,Windows Media Player)会正确显示视频,但由于视频似乎仍然嵌入了转换,QuickTime Player 现在会颠倒播放新编码的视频。要解决这个问题,您还必须使用 -map_metadata -1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
相关资源
最近更新 更多