前些日子,我在使用 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 举报,一经查实,本站将立刻删除。