跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何用FFmpeg的-crf参数实现视频转码质量与文件大小的平衡?

大家好,我是苏承栈。最近有个朋友给我出了个难题:如何在保证视频质量的前提下,将一个1080P的视频压缩到10M以内。这听起来是不是有点像天方夜谭?别急,今天我们就来聊聊如何用FFmpeg的-crf参数来实现这个目标。

首先,我们要明确一下-crf参数的作用。它是一个控制视频压缩程度的参数,取值范围是0~51,其中0为无损模式,数值越大,画质越差,但生成的文件越小。一般来说,18~28是一个比较合理的范围,18被认为是视觉无损的。

关键步骤

1. 使用-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则是将音频数据从源文件中以原有编码格式直接拷入目标文件。

2. 调整-crf参数值,寻找最佳平衡点

你可以尝试将-crf参数值分别设为19、20、28、51,重新转码输出为不同的MP4文件。记录数据,对比如下:

  • 源crf = 18
  • crf = 19
  • crf = 20
  • crf = 28
  • crf = 51

文件大小(MB):46.3 | 36.7 | 31.2 | 26.5 | 7.9

缩减比率:21% | 33% | 43% | 83% | 97%

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

小结与拓展

通过本文,我们了解了如何使用FFmpeg的-crf参数来实现视频转码质量与文件大小的平衡。如果你对FFmpeg还有其他疑问,欢迎关注「极星编程网」(www.jxgpc.com),了解更多编程技术知识。

——苏承栈,极星编程网资深编辑

相关文章