Ffmpeg 视频压缩
文章目录
在日常开发中,会经常碰到需要视频压缩的情况,那对于视频压缩,当然是希望压缩率高,但是质量损失小;下面就介绍下 ffmpeg 视频压缩。
命令行参数-crf
在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为051,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,1828是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。
因此我们的策略是,在保证可接受视频画质的前提下,选择一个最大的crf值——如果输出视频质量很好,那就尝试一个更大的值;如果看起来很糟,那就尝试一个小一点的值。如下是执行压缩的命令示例:
ffmpeg -i src.mov -c:v libx264 -preset veryslow -crf 28 -c:a copy dest.mp4
- src.mov: 是需要压缩的源文件;
- c:v:将视频重新按 libx264 格式进行编码,可以通过 ffmpeg –encoders 查看 ffmpeg 具体支持哪些格式;
- preset:指定编码速度,速度越慢,压缩的视频质量就越高;
- crf:10-bit x264 下有效范围为 0 到 63,数字越大表示质量越低,输出大小越小;
- c:a:音频处理的方式,copy 的意思就是不处理,按原来的音频复制到新视频中即可;
- dest.mp4:压缩后生成的视频文件
其中 preset 参数还有如下选择:
preset
This option itemizes a range of choices from veryfast (best speed) to veryslow (best quality).
‘veryfast’
‘faster’
‘fast’
‘medium’
‘slow’
‘slower’
‘veryslow’
效果对比
-
源 crf = 18 crf = 19 crf = 20 crf = 28 crf = 51 文件大小(MB) 46.3 36.7 31.2 26.5 7.95 1.25 缩减比率 21% 33% 43% 83% 97%
尝试播放这些文件。发现 crf 取值为 18~28 的情况下生成的文件,其画质没有明显的差异,而以-crf 51 生成的视频画质已经惨不忍睹了!在实际应用中,多试几个crf值,在画质和压缩比之间找到一个你能接受的平衡点即可。
ffmpeg 二进制文件下载
https://evermeet.cx/ffmpeg/
参考链接
文章作者 Brook
上次更新 2022-05-20