引子
压缩视频大多使用ffmpeg,我们需要思考清楚,为什么需要压缩视频。是因为用户体验(秒开、流畅)问题?还是因为成本(带宽、存储)问题?还是因为运营(广告、互动)需要?我们在进行压缩之前要锚定好关键目标,然后平衡取舍。
背景
最初我拿到的需求是用户播放卡顿,需要解决。使用ffmpeg简单分析视频源,基本信息包括分辨率、帧率、码率这几个关键数据,参考信息包括文件格式、编码格式、像素格式等;(音频占用文件不大,先放低优先级)
可以看到分辨率是1080x1928,帧率是30fps,码率是13095kbps,文件就是mp4,编码格式是h264(main),像素格式yuv420p;文件时长00:01:10.1,1分10秒;按这个码率,视频部分尺寸是13095x70=916650kb,这里是bit位,换算大KB是114581.25,换算MB是约111.90MB。
我们简单评估一下对用户网络的要求,如果缓冲是500ms,那么13095x0.5=6547.5kb=818.4375KB=约0.8MB的下载速度,还是比较苛刻的,因为网络运营商给大家报的是kbps是小b,换算一下相当于要求6.4Mb。
解决
针对以上问题,我的解决思路如下:
1、手机播放端一般不需要这么高分辨率,降低720p;
2、帧率30fps也可以适当降低,降低到22~25都可以;
3、码率压缩,选用-crf固定码率比压缩/-b:v最高码率压缩方式都可以;
4、视频编码h264(main)可以调整到h264(high);
以上4个参数配置压缩命令如下:ffmpeg -y -i xx.mp4 -c:a copy -c:v libx264 -profile:v high -r 30 -crf 30 -s 720x1080 xx-out.mp4
简单介绍参数:
-y:表示输出文件覆盖
-i:表示输入文件
-c:a:表示音频部分编码,copy表示直接复制到新文件
-c:v:表示视频部分编码,libx264表示使用h264编码
-profile:v:h264编码参数,使用更紧凑的压缩算法
-r:表示视频帧率,30fps
-crf:表示码率应用固定码率比,从0~500,越大码率越低,一般18~32效果较好
-s:视频分辨率裁剪,720x1080表示裁剪成720p
效果
以上命令执行完成后效果如下:
最明显码率降低到926kbps,其他都按照参数发生变化,新文件体积优化到926x70=64820kb,约7.91MB。从111.90MB降低到7.91MB,优化效果是很好的。对用户网络带宽要求大约降低到463kb,比起6.4Mb来说只是零头。
是不是就可以达成秒开了呢?我们再回过头看看moov头的情况:
可以看到ftyp、free是文件标识,不用理会;mdat是视频+音频数据存储,占用8030053字节,接下来才是moov头,我们知道视频播放会先获取moov头才知道具体的元数据信息,如何编码,分辨率几何之类的。一般视频播放器也会有优化,就是先读取视频头前面一定数量字节,如果还没有解析到moov头,会重新发起请求从文件尾部读取一定数量字节,用于补充解析moov。理想状态肯定是第一次缓冲数据就能解析moov头,并继续缓冲数据,而不是断开再请求,解析moov头,再请求缓冲数据。所以需要针对moov头进行前移操作。
具体的ffmpeg命令如下:-movflags +faststart
在上述命令中增加以上参数即可。最终命令如下:ffmpeg -y -i xx.mp4 -c:a copy -c:v libx264 -profile:v high -r 30 -crf 30 -s 720x1080 -movflags +faststart xx-out.mp4
扩展
基本针对视频优化我们先介绍到这里,上面是最基本的优化,其他的优化我们也基于上面继续推进。
1、更换编码格式,尝试h265(需要兼容苹果qt),尝试vp9,尝试av1;
2、视频切片,使用hls+ts的m3u8文件格式;
3、应用2-pass优化码率;
4、最重要引进视频质量评价体系,ssim、psnr、vmaf;
5、尝试多分辨率分发,480p、720p、1080p;
6、网络优化,cdn加速;
7、其他小优化;
在实际实践过程中,还是需要不断调整应用,遇到问题解决问题;选定优化目标,选择质量比对参数,就可以不断调优上述参数,达到最终的优化平衡。文章来源:https://www.toymoban.com/news/detail-694867.html
本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓文章来源地址https://www.toymoban.com/news/detail-694867.html
到了这里,关于如何压缩视频-ffmpeg的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!