关于视频编解码的一些疑问,求大神解答

zpole

视频编码成 I P B 帧到变成一个文件这个过程中,有没有其他的压缩过程?编码后 I 帧是 rgb 或 yuv 等原始数据的图片还是像 jpg 之类的还有其他压缩?有没有可能不解码,在保留 p b 帧原始数据(即关于 i 帧的相对变化)时,换掉 i 帧,应用场景比如视频抠图,背景静止时只要 i 帧抠图换背景是不是就够了?

5 条回复  •  2020-06-18 17:54:19 +08:00
coderluan
coderluan3 小时 34 分钟前
I 帧也是压缩的, 比如这帧图像就是一面白墙, 不压缩得多蠢, 也就是说你不解码是得不到原始图像的.
1
zpole
zpole3 小时 32 分钟前 via iPhone
@coderluan 是呀。那我如何保证 decode 换完 i 以后,再 encode p b 不变呢
2
coderluan
coderluan3 小时 32 分钟前
这个过程一般叫 intra prediction, 也就是帧内预测, 一般是先分块再压缩的, 具体的压缩算法看编码标准.
3
coderluan
coderluan3 小时 21 分钟前
@zpole 没太弄明白你的需求, 播放视频和视频处理实际是不一样的, 实际上视频处理就是处理解码之后的图片, 然后再压缩, 所以和视频编码无关了, 而是视频处理软件自己提供一个复制操作的功能而已.
4
msg7086
msg70862 小时 43 分钟前
编码后的帧就是这个编码了呀。

比如说,你用 JPG 编码器编码一张图片,编码完的数据就是「 JPG 」了。
同理你用 x265 编码器编码一张图片,编码完的数据就是「 h.265 」了。

PB 帧存储的是残差,你只替换 I 帧当然是可以的,替换完以后新的残差都会基于新的 I 帧来渲染。平时如果视频文件损坏,有时候你会看到有一段会出现画面一小部分在移动或者显露出原本画面的效果,这就是典型的参考帧没了,所以拿 buffer 里错误的帧作参考对象的结果。

实际的视频里背景一般是不会静止的,会有摄影噪声。如果你提前用滤镜对噪声做过滤,或者在编码的时候在残差判定里直接跳过小容量残差的话,倒是可以做到的。但是画面编码的最小单位是块( h.264 是 mb,h.265 是 cu ),所以最少也是一块一块生效的。

要达到你说的那种效果,替换帧的做法是非常不现实的,研发成本高得惊人,效果稀烂。
5