使用FFmpeg调整手机拍摄视频的旋转角度

前些日子,我在使用 MoviePy 处理手机拍摄的视频,处理完成之后,发现原来是竖屏拍摄的最后变成了横屏,而且内容显示也很奇怪。

但是使用播放器播放处理之前的视频却是没有问题的。

今天要使用 FFMPEG 来处理这个问题。

查看旋转角度

之前做 Android 开发的时候,知道使用手机拍摄视频会存在一个旋转角度,所以在处理的时候要设置一下角度。

所以我就猜测是旋转角度的问题,我们可以使用 FFMPEG 来查看一下旋转角度的信息

ffmpeg -i input.mp4
ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
...
  Stream #0:0[0x1](eng "0x1"): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt470bg/smpte170m, progressive), 1920x1080, 17339 kb/s, 30.11 fps, 30 tbr, 90k tbn (default)
    Side data:
      displaymatrix: rotation of -90.00 degrees

可以看到这里的旋转角度为 -90 也就是逆时针旋转 90°。

知道了问题就好办了,只要调整旋转角度就可以了。

旋转视频

在 FFMPEG 中旋转使用 -vf(set video filters) 来设置过滤,旋转的参数为 transpose ,它的值可以是以下几个

  • 0: 逆时针旋转 90°并垂直翻转
  • 1: 顺时针方向旋转 90°
  • 2: 逆时针方向旋转 90°
  • 3: 顺时针旋转 90°并垂直翻转

由于我们的视频是逆时针旋转的 90°,所以要调整的话要反过来,也就是顺时针旋转 90°

ffmpeg -i input.mp4  -vf "transpose=1"  out.mp4

执行完指令后,打开播放器,就从竖屏变横屏了。

但这不是我们想要的,我们要的是保持竖屏。

由于 transpose 会识别 rotation ,所以原来竖屏的旋转了 90°变横屏了,所以在旋转之前需要把旋转角度调整为 0°。

调整旋转角度

调整角度使用 rotate ,由于不需要重新编解码所以直接使用原来的,参数为 copy

ffmpeg -i input.mp4 -metadata:s:v rotate="0" -c:v copy -c:a copy tmp.mp4

执行完之后竖屏变横屏了,和原来相比逆时针旋转了 90°,和预期一致。

这时候再顺时针旋转一下就能回到原来竖屏的样子了

ffmpeg -i tmp.mp4  -vf "transpose=1"  out.mp4

执行完,回到竖屏,和预期一致。

总结

ffmpeg -i input.mp4 -metadata:s:v rotate="0" -c:v copy -c:a copy tmp.mp4
ffmpeg -i tmp.mp4  -vf "transpose=1"  out.mp4

参考资料:https://www.zhihu.com/question/533941668

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论