ffmpeg 视频码率压缩、质量控制 -crf 和 -qp 参数详解

昨天,有个朋友给我出了个难题:他手上有一个视频,1080P的,49秒,200多兆;要求在确保质量的情况下把文件压缩到10M以内。

这是什么概念呢?按照文件大小10M来计算,码率是:10 x 8 / 49 = 1.6 Mbps。也就比VCD的质量略好一点(注:VCD的标准码率是1150 Kbps)。

在不明显损失画质的前提下,看看使用FFmpeg能够帮到多少忙。用iPhone拍了一个1920 x 1080的视频,33秒,46.3 MB,编码格式是H.264。

考虑到H.264目前尚是主流的视频格式,为了播放的兼容性,我们在使用FFmpeg转码时同样选择H.264。

命令行参数-crf

在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为0~51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18~28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。

我们的策略是,在保证可接受视频画质的前提下,选择一个最大的crf值——如果输出视频质量很好,那就尝试一个更大的值;如果看起来很糟,那就尝试一个小一点的值。

让我们先执行下面这条命令:

ffmpeg -i D:\src.mov -c:v libx264 -preset veryslow -crf 18 -c:a copy D:\dest1.mp4

意思是:将D盘的源文件src.mov,以“非常慢”的速度重新编码成H.264格式,保存为D:\dest1.mp4。其中,-preset指定的编码速度越慢,获得的压缩效率就越高。而-c:a copy又是什么意思呢?因为音频的码率一般都比较小,我们就不折腾它了,况且解码后重新编码也会损害音质,于是,就将音频数据从源文件中以原有编码格式直接拷入目标文件吧。

小提示:想知道-c:v 后面的参数值怎么填吗?或者说FFmpeg到底支持哪些音视频编码格式?执行ffmpeg –encoders看一下吧。另外,执行ffmpeg -i D:\src.mov -c:v libx264 -preset -tune D:\dummy.mp4可以看到-preset参数的取值范围,如下:

有个小疑问:既然不在乎等待时间,为什么不给-preset指定一个最慢的placebo呢?那是因为:与 veryslow相比,placebo以极高的编码时间为代价,只换取了大概1%的视频质量提升。这是一种收益递减准则:slow 与 medium相比提升了5%~10%;slower 与 slow相比提升了5%;veryslow 与 slower相比提升了3%。

另外,针对特定类型的源内容(比如电影、动画等),还可以使用-tune参数进行特别的优化。但如果你不确定该用哪个选项,还是忽略这个参数吧。

对比效果

执行完一条转码命令之后,调整-crf参数值,分别设为19、20、28、51,重新转码输出为不同的MP4文件。记录数据,对比如下:

crf = 18crf = 19crf = 20crf = 28crf = 51
文件大小(MB)46.336.731.226.57.951.25
缩减比率21%33%43%83%97%

尝试播放这些文件。发现crf取值为18~28的情况下生成的文件,其画质没有明显的差异,而以-crf 51生成的视频画质已经惨不忍睹了!在实际应用中,多试几个crf值,在画质和压缩比之间找到一个你能接受的平衡点即可。

参考文章:ffmpeg与x264编码指南icon-default.png?t=M85Bhttp://blog.csdn.net/vblittleboy/article/details/8982857ffmpeg中crf和qp有什么区别?icon-default.png?t=M85Bhttp://cn.voidcc.com/question/p-mbbdeenl-ha.html

      crf 和 qp 参数对比icon-default.png?t=M85Bhttps://slhck.info/video/2017/02/24/crf-guide.html

内容概要:本文档《FFmpeg-X264-编码参数.docx》详细介绍了 FFmpeg X264 编码工具中的各项参数配置及其功能。文档首先阐述了三种码率控制方式(bitrate、qpcrf),解释了它们的特点应用场景。接着,介绍了 X264 的 preset tune 参数,帮助用户根据编码需求选择合适的预设优化选项。此外,文档还讨论了编码延时的调整方法,以及线程管理、不同帧类型的特性编码耗时等。针对 FFmpeg X264 参数的对应关系进行了对照说明,确保用户能够准确设置编码参数。最后,文档深入探讨了多种编码选项,如码率控制、帧类型控制、量化参数、宏块树(mb-tree)、弹性量化(AQ)、心理视觉优化(Psy-RD)、运动估计(ME)、子像素精度(subme)等,旨在为用户提供全面的编码指南。 适用人群:具备一定音视频处理基础,尤其是对 H.264 编码有一定了解的研发人员技术爱好者。 使用场景及目标:①理解 FFmpeg X264 编码工具的工作原理参数设置;②掌握如何根据实际需求调整编码参数,以实现最佳的编码效果性能;③学习如何优化编码流程,降低延迟、提高编码效率压缩比;④探索不同编码模式下的最佳实践,如码率控制、帧类型选择、量化参数调整等。 其他说明:本文档不仅提供了详细的参数解释,还结合了实际应用案例优化建议,帮助用户更好地理解运用 FFmpeg X264 编码工具。在学习过程中,建议用户结合具体项目需求进行实践操作,并根据实际情况灵活调整参数设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值