确实有对每一帧的图片计算压缩,那么必然损失一些像素信息,尤其是运动画面会有不稳定的情况,码率不完全恒定,具体自己去看 ffmpeg 的设置:crf (限制码率) cqp (固定质量) abr(平均码率)
这个比较专业了,视频编码需要用到一个 DCT 变换,DCT 变换本来是无损的但是编码会用到一个量化,量化后的数据就变成了有损数据,量化的值就决定了损失的数据的多少,视频的码率控制着量化值。
码率控制一般以一组图像为标准( GOP ),所以视频的质量确实是逐帧图片降低质量
没有 降低码率 的算法。
降低码率本质上是指用更低的码率重新压缩视频。
比如原始的未压缩视频是 20000kbps,你先压缩到 100kbps,现在要重新压缩到 70kbps,这意味着你先把视频解压成 20000kbps,然后用和第一次压缩类似的算法,丢弃更多的细节后,压缩到 70kbps 。
至于视频的压缩,这是一个很庞大的话题,几千字是说不清的,可以考虑去啃资料和教程,或者去听一些大学或者研究生课程。简单来说有几步。首先是帧间动态预测,一组相似的画面可以通过帧间压缩来降低码率,整个画面被切割成 MB 或者 CU,然后每个块与前后帧进行比较,如果残差比较省空间,就编码成残差,否则就原样按照画面编码。接下去跑 DCT 转换成频域,然后量化砍细节,最后执行无损压缩。
DCT 会有个问题,在维持总体平均码率的情况下,亮场码率高,暗场码率低
你可以看看一些画面变动频繁的游戏,比如各种 FPS,或者我刚听说这个的时候正好老菊在更骑砍 2,也是非常明显。
现在一个技巧就是,在上传时候的视频把亮度直接调高,压制效果就好不少。