是有不同算法吗?用哪个参数来设置的?
降低视频文件中video流
的码率是什么原理?
1
GalaDOS 2021-05-25 16:22:27 +08:00
过程是把视频文件解码成原始像素数据,再用更低的码率去编码。参数一般就是编码器的-bitrate,-qp 之类的。
因为基本都是有损编码,每次转码都会有损失。并且目标码率越低,质量降得越明显。 |
2
jsion 2021-05-25 16:33:42 +08:00 1
确实有对每一帧的图片计算压缩,那么必然损失一些像素信息,尤其是运动画面会有不稳定的情况,码率不完全恒定,具体自己去看 ffmpeg 的设置:crf (限制码率) cqp (固定质量) abr(平均码率)
|
3
longbye0 2021-05-25 16:37:47 +08:00 via iPhone 1
帧内和帧间压缩都有。
帧内你可以简单理解为图像压缩,帧间就计算运动向量,压缩他们的差值。 不同算法就不同编码器,和选择相应的 profile 。 |
4
JinTianYi456 OP |
5
fgodt 2021-05-25 17:34:53 +08:00 1
这个比较专业了,视频编码需要用到一个 DCT 变换,DCT 变换本来是无损的但是编码会用到一个量化,量化后的数据就变成了有损数据,量化的值就决定了损失的数据的多少,视频的码率控制着量化值。
码率控制一般以一组图像为标准( GOP ),所以视频的质量确实是逐帧图片降低质量 |
6
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 这些码控算法的具体原理,这个就很难在论坛里说清楚了,最好还是自己搜文献看吧。 |
7
xmumiffy 2021-05-25 19:18:34 +08:00 via Android 1
@JinTianYi456 降码算法就是编码器 h264 h265 av1 之类的
|
8
Rheinmetal 2021-05-25 21:31:22 +08:00
了解原理要去看论文和代码了 比如经典的 x264
|
9
msg7086 2021-05-26 00:13:39 +08:00
没有 降低码率 的算法。
降低码率本质上是指用更低的码率重新压缩视频。 比如原始的未压缩视频是 20000kbps,你先压缩到 100kbps,现在要重新压缩到 70kbps,这意味着你先把视频解压成 20000kbps,然后用和第一次压缩类似的算法,丢弃更多的细节后,压缩到 70kbps 。 至于视频的压缩,这是一个很庞大的话题,几千字是说不清的,可以考虑去啃资料和教程,或者去听一些大学或者研究生课程。简单来说有几步。首先是帧间动态预测,一组相似的画面可以通过帧间压缩来降低码率,整个画面被切割成 MB 或者 CU,然后每个块与前后帧进行比较,如果残差比较省空间,就编码成残差,否则就原样按照画面编码。接下去跑 DCT 转换成频域,然后量化砍细节,最后执行无损压缩。 |
10
urmyfaith 2021-05-26 09:25:43 +08:00
嗑瓜子学习
|
11
xrr2016 2021-05-26 09:37:03 +08:00
离散余弦变换
|
12
no1xsyzy 2021-05-26 13:11:52 +08:00
DCT 会有个问题,在维持总体平均码率的情况下,亮场码率高,暗场码率低
你可以看看一些画面变动频繁的游戏,比如各种 FPS,或者我刚听说这个的时候正好老菊在更骑砍 2,也是非常明显。 现在一个技巧就是,在上传时候的视频把亮度直接调高,压制效果就好不少。 |