一、码率
码率控制对于在线视频比较重要,因为在线视频需要考虑其能提供的带宽。
那么,什么是码率?很简单:
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