ffmpeg 第11章 码率控制/压缩视频 ffmpeg 第11章 码率控制/压缩视频

2024-12-01

一、码率

码率控制对于在线视频比较重要,因为在线视频需要考虑其能提供的带宽。

那么,什么是码率?很简单:

bitrate = file size / duration

比如一个文件 20.8M,时长 1 分钟,那么,码率就是:

biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps

一般音频的码率只有固定几种,比如是 128Kbps,

那么,video 的就是

video biterate = 2831Kbps -128Kbps = 2703Kbps

二、 控制码率

ffmpg 控制码率有 3 种选择

  • -minrate

  • -maxrate

  • -b:v

2.1、-b:v

主要是控制平均码率

比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。

ffmpeg -y -i input.mp4 -b:v 2000k output.mp4

上面把码率从原码率转成 2Mbps 码率,这样其实也间接让文件变小了,目测接近一半。

  • -y 覆盖输出文件,即如果 output.mp4 文件已经存在的话,不经提示就覆盖掉了

  • "output.mp4" 输出文件名,也可以修改路径和名称

  • 不过,ffmpeg 官方 wiki 比较建议,设置 b:v 时,同时加上 -bufsize

-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如 1 和 2 的平均值是1.5, 1.49 和 1.51 也是 1.5, 当然是第二种比较好)

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

2.2、-minrate -maxrate

-minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置 maxrate

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
阅读 236