我只大致看过xvid的自定义矩阵的情况
比如说有一幅画面,做完dct以后是下面的情况。我懒得打16x16的矩阵,所以用4x4代替了。
44 23 24 19
25 42 51 36
32 25 16 14
11 22 32 11
现在假如我们有一个量化矩阵是这样的:
10 13 16 20
13 15 18 22
16 18 21 25
20 22 25 30
现在我们把两个矩阵除一下,得到了
4 1 1 0
1 2 2 1
2 1 0 0
0 1 1 0
现在我们做zigzag得到
4 1 1 2 2 1 0 2 1 0 1 0 1 1 0 0
这比我们最初的矩阵要好压缩得多。而且通常情况下做完量化以后基本都是要除到尾巴上一堆0的,压缩效果更好。
关于动画等动态画面的话,这里就有两种情况了
一种是关键帧,这和静态画面的压缩方法是一样的。
对于前后参考帧,画面是由前后画面的差所组成的,压缩方法和静态类似,但是用的矩阵通常是不同的。
这也就是为什么xvid会有intra-matrix和inter-matrix的原因。前者是帧内压缩量化矩阵,后者是帧间压缩量化矩阵。
DCT本身是把画面讯号用余弦波叠加得到。越柔和的画面部分,波长越大。画面尖锐的,比如黑线白线这样的,就需要用波长很短的高频余弦波来表达,这就是高频部分。