需求
修改录制MP4得分辨率,将原始分辨率720P修改为1080P。原始视频流是720P,录制完成后在手机端和电脑端查看视频属性信息时显示成1080P。
方案
1.录制时修改录制视频流中宽和高参数。
2.录制时修改视频流中SPS信息(修改SPS中分辨率信息)。
3.录制时通过FFMPEG修改视频尺寸(修改成1080P)。
论证
方案一:录制时修改录制视频流中宽和高
这种方式简单,但是只有MP4Info.exe中分辨率会变化。手机和电脑上看视频属性依旧不变。
方案二:录制时修改视频流中SPS信息(修改SPS中分辨率信息)
根据SPS格式,找到对应视频分辨率表示宽和高位。通过下面公式计算需要修改的值。
width=(pic_width_in_mbs_minus1+1)*16;
height=(pic_height_in_map_units_minus1+1)*16;
修改为1080P时,对应的
pic_width_in_mbs_minus1=120
pic_height_in_map_units_minus1=80
再根据哥伦布编码:n个0 + (n+1)位有效位,如:
120=1111000 哥伦布编码后=000000 1111000
将哥伦布编码后的数据替换掉原数据中表示宽和高的位置。只修改头一个SPS。
修改后手机和电脑上看视频属性分辨率都变了,但是VLC软件中看还是不变。而且这种方式会导致头几秒花屏或黑屏,不可行。
方案三:录制时通过FFMPEG修改视频尺寸(修改成1080P)
这种方式通过FFMPEG修改视频流每一帧的尺寸,修改后机和电脑上看视频属性以及VLC中看分辨率都变了。但是对手机性能有要求,性能不好时,录制30s可能只有5s视频。不能完全解决。
结论
1.不同的工具对视频分辨率的解析不一样,有的通过视频流参数信息,有的获取视频第一帧SPS中分辨率信息,有的获取实时SPS中分辨率信息。
2.以上三种方案都不能很好地实现需求,不知道还有什么别的方案,希望有牛人指导一二。