iPhone 录制的视频在 Windows 系统上旋转

Sau*_*abh 6 video iphone ffmpeg ios

我正在 iPhone 上录制视频并将它们上传到我的 Linux 服务器。用户可以在网站上看到这些视频。如果用户在 mac 或 iDevices 上观看视频,则视频看起来不错,但是当用户在 Windows 系统上观看该视频时,这些视频正在旋转。

我假设这是因为 Windows 系统无法读取录制的视频中的某些苹果标志。我可以以某种方式录制视频,这样它们就不会在 Windows 系统上旋转吗?或者有什么方法可以使用 FFmpeg 以正确的界面方向重新编码视频?

我对 FFmpeg 或 iOS 方式都持开放态度。

slh*_*hck 9

您无法更改 iOS 摄像头录制视频的方式。它设置一个旋转标志,如果您希望视频在 OS X 和 Windows(以及其他播放器)中正确显示,您必须:

  • 移除旋转标志。现在您的视频是横向的,但仍然显示错误。
  • 重新编码视频,旋转它。

下载 ffmpeg(适用于您的操作系统的静态构建很好)。

然后你需要transpose过滤器,例如

ffmpeg -i portrait.mov \
-c:v libx264 -filter:v "transpose=1" \
-c:a copy \
-metadata:s:v:0 rotate=0 out.mp4
Run Code Online (Sandbox Code Playgroud)

几点说明:

  • 在这里,transpose=1将旋转 90°。如果您的视频颠倒,则需要组合选项。您可以使用-filter:v "transpose=2,transpose=2"或其他。请参阅此处:如何使用 FFmpeg 将视频翻转 180°(垂直/倒置)?

  • -metadata:s:v:0 rotate=0选项可确保第一个视频流中的旋转元数据再次设置为 0(之前为 90),因此您的视频现在可以在 OS X 和其他操作系统上正常显示。

  • 自然地,移调会重新编码视频,你会失去质量。在-crf后面添加选项-c:v libx264以设置控制质量的Constant Rate Factor。使用较低的值可以获得更好的质量。23 实际上是默认值,因此您根本不需要指定它,但是如果视频最终看起来很糟糕,您可能希望选择低至 18 的值,例如,-c:v libx264 -crf 18.

  • 在某些情况下,您可能只想删除旋转标志但保持原始视频比特流完好无损。为此,请替换-c:v libx264 -filter:v "transpose=1"-c:v copy

  • 查看x264 编码指南了解更多信息。