Простое и быстрое кодирование / декодирование видео - PullRequest
3 голосов
/ 04 мая 2011

Мне нужен простой и быстрый видеокодек с альфа-поддержкой в ​​качестве альтернативы Quicktime Animation, которая имеет ужасную степень сжатия для обычного видео.

Поскольку я не нашел ни одного хорошего кодера / декодера с открытым исходным кодом сАльфа-поддержка, я пытался написать свою собственную (с вдохновением от huff-yuv).

Моя стратегия следующая:

  1. Конвертировать в YUVA420
  2. Вычтите текущий кадр из предыдущего (нет необходимости в ключевых кадрах).
  3. Хаффман кодирует результат предыдущего шага.Разделите каждый кадр на блоки 64x64 и создайте новую таблицу Хаффмана для каждого блока и закодируйте ее.

С помощью этой стратегии я достигаю приличную степень сжатия 60-80%.Я мог бы, вероятно, улучшить степень сжатия, разделив каждый кадр на блок после шага 1 и добавив векторы движения, чтобы уменьшить вывод данных из шага 2. Однако, более высокая степень сжатия, чем 60%, ниже, чем производительность.

Приемлемая скорость сжатия на четырехъядерном процессоре 60 мс / кадр.

Однако скорость декодирования страдает, 40 мс / кадр (практически в режиме реального времени при полном использовании процессора).

Мой вопросЕсть ли способ сжатия видео с гораздо более быстрым декодированием, при этом при этом достигается приличная степень сжатия?

Декодирование символов, кодированных Хаффманом, кажется довольно медленным.Я еще не пробовал использовать поиск таблиц, не уверен, что поиск таблиц является хорошей идеей, поскольку у меня есть новая таблица Хаффмана для каждого блока, а создание таблицы поиска довольно дорого.Насколько мне удалось выяснить, невозможно использовать какие-либо SIMD или GPU функции .Есть ли альтернатива?Обратите внимание, что это не должно быть без потерь.

1 Ответ

1 голос
/ 04 мая 2011

Вы хотите попробовать код Голомба вместо кода Хаффмана.Код Голомба IMO быстрее для декодирования, чем код Хаффмана.Если он не должен быть без потерь, вы хотите использовать кривую Гильберта и DCT, а затем код Голомба.Вы хотите подразделить кадры с кривой заполнения пространства.IMO: непрерывное подразделение кадра с помощью sfc, а также декодирование очень быстрое.

...