前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >视频转码后宽高给互换了!教你如何对比两个视频文件

视频转码后宽高给互换了!教你如何对比两个视频文件

原创
作者头像
bellchen
发布2020-10-31 20:57:06
3.6K1
发布2020-10-31 20:57:06
举报

最近发现有些视频好奇怪,播放的时候,是竖屏 1080x1920的,但从腾讯云点播获取到的文件信息,却是横屏1920x1080的;

源文件见附件

下载到我心爱的MacBook看下,居然发现这个文件又是竖屏1080x1920的了;

其他同事用的是windows,他帮我看了下,发现是横屏1920x1080的,看来有古怪;

这一切的背后,到底是人性的泯灭,还是道德的沦丧?

不好意思,走错片场了,这到底是比尔盖茨错了,还是乔布斯错了呢?

云点播转码分析

听说云点播的转码能力很强,能够修复一些点播文件的异常,试着转码看下;

转个超高清的出来看看,操作步骤参考官网文档

结果出乎意料,转码前的分辨率是横屏1920x1080,转码后的视频却是竖屏1080x1920,看来云点播转码认为乔布斯是对的

但谁能告诉我这是为什么呢?

对比分析

对于写代码的工程师来说,如果一个程序修改之后有问题,前后表现不一致,最好的方式是对比下源代码,看看差异点在哪里。

但一个视频文件如何做对比呢?

我们知道(假装大家都知道),一个视频文件其实是:视频帧组成的视频流(可能是H264格式),音频帧组成的音频流(可能是AAC格式),再把视频流和音频流,以一定的格式打包起来(比如封装格式MP4)

那么我们就可以把文件的各个信息拆出来,用FFmpeg工具里的ffprobe读取出文件信息,对比下

指令如下:

ffprobe -show_streams -select_streams 0 -of json -i IMG_6896.mov >> 00.json

同样也对转码后的文件做信息读取,以下是读取出的视频信息,并且用beyond compare做了对比。

左边是源文件,文件信息里记录的的确是横屏1920x1080;

右边是转码后视频,文件信息里记录的的确是竖屏1080x1920;

剔除一些和宽高或播放显示无关的信息,可以发现,左边源文件,比右边转码后文件,多了一个Rotate字段,并且标记为90度。

看来问题是定位到了

真相

原来 iOS 上内置相机应用录制的 mov/mp4 视频会产生一个 Rotation 元数据,表示录制视频时摄像头旋转到了多少角度。其值一般为这四个:0、90、180或270。类似于图片文件的Exif信息中的 Orientation 元数据。

Rotation 元数据用于播放器确定渲染视频的方向;

大部分播放器会读取该字段,播放视频时自动旋转画面,已还原真实内容;

但有的播放器会对其视而不见,导致画面被旋转了;

例如mac下的MPlayerX,以及Windows下的Windows Media Player就不会读取该字段并把画面旋转90度;

1、【事实】文件信息里记录的宽高就是横屏1920x1080,但播放时需要旋转90度,播放应为竖屏1080x1920;

2、【播放】我使用的播放器很幸运地,支持了Rotation元数据;

3、【云点播媒资】云点播读取了文件信息里的宽高,因此原样返回了横屏1920x1080,没毛病;

4、【云点播转码】转码后文件删除了Rotation字段,并且修改宽高为竖屏1080x1920,使得文件可以在更多播放器上正常播放,提高了文件兼容性,点赞;

5、【比尔盖茨】Windows下只读取了文件元数据,原样返回了宽高为横屏1920x1080,无可厚非;

6、【乔布斯】Mac下根据实际播放表现,对用户隐藏了技术细节,直接告知文件是竖屏的,因此显示宽高为1080x1920,好像更人性化点;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 云点播转码分析
  • 对比分析
  • 真相
相关产品与服务
云点播
面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档