x264处理安卓手机视频时产生的视频旋转问题
你好
省流:用 ffmpeg -i video.mp4 output.mp4 处理一下就可以了
什么玩意?这就完了?
事情也不是很复杂:安卓拍摄的视频会附带带有rotation的Side data在视频的Meta data中——也就是也就是说安卓拍的视频可能自带了旋转信息。
可以做个实验测试一下,使用 ffmpeg -i video.mp4 -hide_banner
查看一个安卓手机拍摄的竖屏视频的信息。
1 | Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4': |
目光放到视频流信息这里,其中可以看见是视频流的信息,里面有视频分辨率和视频的旋转信息:
1 | Stream #0:0[0x1](eng): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, bt709), 1920x1080, 10002 kb/s, 60.02 fps, 59.94 tbr, 90k tbn (default) |
注意看这个视频流的分辨率——1920x1080?这不是横屏的分辨率吗,怎么回事呢?答案在底下的 Side data
里面的 displaymatrix: rotation of -90.00 degress
这里。
——旋转 90 度!!!
在播放器读取到这样的 Side data 之后播放视频的时候就会自动旋转 90 度,变成1080x1920——也就是播放时所看到的竖屏。
原来如此原来如此。
原来什么啊?所以为什么x264处理视频会旋转呢?
因为x264 疑似 直接丢了旋转的信息(做过实验但是我忘了结果,感兴趣可以自己试试)。而如果你使用 ffmpeg 就不会发生这样的事——ffmpeg会自动检测旋转信息然后在对视频处理的时候默默帮你旋转然后消去旋转信息。
所以解决办法就有了,让ffmpeg先处理把视频的旋转信息消掉,然后再让x264处理就行了。
虽然看起来有些笨,但是暂时是没想到别的简单的方法了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 🐦微语鸟舍🐦!
评论