简单快速的视频编码/解码

时间:2011-05-03 22:09:08

标签: c++ compression video-encoding

我需要一个简单快速的带alpha支持的视频编解码器作为Quicktime Animation的替代品,它对常规视频的压缩率非常高。

由于我没有找到任何支持alpha的开源编码器/解码器,我一直在努力编写自己的(来自huff-yuv的灵感)。

我的策略如下:

  1. 转换为YUVA420
  2. 从前一个减去当前帧(不需要关键帧)。
  3. 霍夫曼编码上一步的结果。将每个帧拆分为64x64块,并为每个块创建一个新的霍夫曼表并对其进行编码。
  4. 通过这种策略,我获得了不错的压缩率60-80%。我可以通过在步骤1之后将每个帧拆分成块来提高压缩率,并添加运动矢量以减少步骤2中的数据输出。但是,比60%更好的压缩率是比性能更低的prio。

    四核CPU上可接受的压缩速度为60ms /帧。

    然而,解码速度受到影响,40毫秒/帧(几乎没有实时使用完整的CPU)。

    我的问题是,是否有一种方法可以通过更快的解码来压缩视频,同时仍然可以获得不错的压缩率?

    解码霍夫曼编码的符号似乎相当慢。我还没有尝试使用表查找,不确定表查找是否是一个好主意,因为我为每个块都有一个新的霍夫曼表,并且构建查找表非常昂贵。据我所知,它无法使用任何 SIMD或GPU功能。还有其他选择吗?请注意,它不一定是无损的。

1 个答案:

答案 0 :(得分:1)

您想尝试Golomb代码而不是Huffman代码。一个golomb代码是IMO更快,然后解码一个霍夫曼代码。如果它不必失去你想要使用希尔伯特曲线和DCT然后使用哥伦布码。您希望使用空间填充曲线细分帧。 IMO是一个带有sfc和解码的帧的连续细分非常快。