大家好,我是苏承栈。最近有个朋友给我出了个难题:如何在保证视频质量的前提下,将一个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),了解更多编程技术知识。
——苏承栈,极星编程网资深编辑
