降低视频文件中画面的码率是怎么个原理?逐帧图片降低质量吗?

2021-05-25 16:07:03 +08:00
 JinTianYi456

是有不同算法吗?用哪个参数来设置的?

2951 次点击
所在节点    FFmpeg
12 条回复
GalaDOS
2021-05-25 16:22:27 +08:00
过程是把视频文件解码成原始像素数据,再用更低的码率去编码。参数一般就是编码器的-bitrate,-qp 之类的。
因为基本都是有损编码,每次转码都会有损失。并且目标码率越低,质量降得越明显。
jsion
2021-05-25 16:33:42 +08:00
确实有对每一帧的图片计算压缩,那么必然损失一些像素信息,尤其是运动画面会有不稳定的情况,码率不完全恒定,具体自己去看 ffmpeg 的设置:crf (限制码率) cqp (固定质量) abr(平均码率)
longbye0
2021-05-25 16:37:47 +08:00
帧内和帧间压缩都有。

帧内你可以简单理解为图像压缩,帧间就计算运动向量,压缩他们的差值。

不同算法就不同编码器,和选择相应的 profile 。
JinTianYi456
2021-05-25 16:54:08 +08:00
@GalaDOS @jsion 是还要深入一层,就是说: 降低画面码率,我知道肯定是要丢失画面信息的,那么如何丢失?是否有不同的丢失策略 /算法?就比如说一个视频画面它 maxrate:v 是 100K 的,然后我加参数-maxrate:v 70K 降低码率。假设默认的降码率算法是 A( 前面的命令就等于`-maxrate:v 70K -降码算法 A` ),然后它还有个其它降码率算法是 B 又或者还有 C 。我想问的就是`-maxrate:v 70K -降码算法 B`这样子
fgodt
2021-05-25 17:34:53 +08:00
这个比较专业了,视频编码需要用到一个 DCT 变换,DCT 变换本来是无损的但是编码会用到一个量化,量化后的数据就变成了有损数据,量化的值就决定了损失的数据的多少,视频的码率控制着量化值。
码率控制一般以一组图像为标准( GOP ),所以视频的质量确实是逐帧图片降低质量
GalaDOS
2021-05-25 17:36:32 +08:00
@JinTianYi456 画面信息丢失的多少,由编码器选择的量化参数决定。打一个比方,浮点数“1.33”,选择不同的量化参数后,它会被压缩成“1.3”,或者“1”,甚至“0”。参数的选择影响输出数据的多少,以及丢失信息的多少。对应到视频数据,每一帧画面被划分成很多小块,每个小块有一个量化参数,编码器通过控制每个小块的量化参数,调整每一帧画面的数据量,进而控制码率。

至于实际上这些量化参数如何选择,则是码率控制算法决定的。这个大概就是你想知道的“降码算法”吧。以 x264 为例,它大体有 crf,abr,cqp 这些选择。如果你有特定的目标码率,那基本就只能用 abr 。因为 crf 和 cqp 都只关注画面质量,不控制输出码率。如果你只是想要一个相对比较小的码率,也可以用 crf 和 cqp,给一个比较大的值,也即要求一个比较低的画面质量,码率自然就跟着降低了。

如果你还想问 abr 这些码控算法的具体原理,这个就很难在论坛里说清楚了,最好还是自己搜文献看吧。
xmumiffy
2021-05-25 19:18:34 +08:00
@JinTianYi456 降码算法就是编码器 h264 h265 av1 之类的
Rheinmetal
2021-05-25 21:31:22 +08:00
了解原理要去看论文和代码了 比如经典的 x264
msg7086
2021-05-26 00:13:39 +08:00
没有 降低码率 的算法。

降低码率本质上是指用更低的码率重新压缩视频。

比如原始的未压缩视频是 20000kbps,你先压缩到 100kbps,现在要重新压缩到 70kbps,这意味着你先把视频解压成 20000kbps,然后用和第一次压缩类似的算法,丢弃更多的细节后,压缩到 70kbps 。

至于视频的压缩,这是一个很庞大的话题,几千字是说不清的,可以考虑去啃资料和教程,或者去听一些大学或者研究生课程。简单来说有几步。首先是帧间动态预测,一组相似的画面可以通过帧间压缩来降低码率,整个画面被切割成 MB 或者 CU,然后每个块与前后帧进行比较,如果残差比较省空间,就编码成残差,否则就原样按照画面编码。接下去跑 DCT 转换成频域,然后量化砍细节,最后执行无损压缩。
urmyfaith
2021-05-26 09:25:43 +08:00
嗑瓜子学习
xrr2016
2021-05-26 09:37:03 +08:00
离散余弦变换
no1xsyzy
2021-05-26 13:11:52 +08:00
DCT 会有个问题,在维持总体平均码率的情况下,亮场码率高,暗场码率低
你可以看看一些画面变动频繁的游戏,比如各种 FPS,或者我刚听说这个的时候正好老菊在更骑砍 2,也是非常明显。
现在一个技巧就是,在上传时候的视频把亮度直接调高,压制效果就好不少。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779114

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX