Как стать автором
Обновить

Скорость кодирования Theora VS XVID

Работа с видео
В одном из своих проектов достаточно продолжительное время в качестве внутреннего промежуточного энкодера для обмена данными в общем формате между серверами я использовал XVID. Отличная реализация MPEG4 совместимого кодека. Последнее время всё чаще и чаще я стал находить статьи в интернете об относительно новом, революционном кодеке Theora, которому пророчат будущее в качестве стандарта Web. Оно и понятно. У него есть отличное преимущество в виде открытых исходных текстов и отсутствии лицензирования. Плюс возможность использования в любых проектах. В том числе и закрытых.
После прочтения многих статей я увидел ретроспективу развития этого кодека. С момента зарождения и до того дня, когда на развитие и улучшение Theora были выделены деньги, чтобы его можно было встроить в браузер и просматривать видео в отсутствии плагинов вроде Flash. Даже была статья о том, что по качеству данный кодек превзошёл H264 (правда я так и не увидел объективных оценок на этот счёт. Только PSNR).
Но как я не старался я не заметил в статьях количественных характеристик скорости работы Theora по отношению к другим кодекам. Я задумался о замене в проекте XVID новым кодеком Theora. Вдруг, он позволит получить лучшие результаты? А критическим моментом для меня как раз была скорость работы.
И чтобы не гадать кто из них работает быстрее, я написал простой тест, который заключался в том, что один и тот же видео фрагмент кодировался по очереди сначала Theora, а потом XVID. При этом измерялось время компрессии каждого кадра по отдельности и в сумме всех вместе. В качестве тестовой платформы использовались два компьютера с различными процессорами. Правда оба от компании Intel. Но в сумме результат получился примерно одинаковым на обоих. ОС — Ubuntu.
В качестве видео фрагмента использовался ролик содержащий 782 кадра разрешением 704x576.
Чуть не забыл. Версия Theora: 1.1.1. XVID: 1.2.2 Коэффициент квантования в максимальном качестве у обоих кодеков. Оптимизация работы с использованием ASM — максимальная. Предполагаем, что кодеки будут работать на современных процессорах с наличием SSE и прочих сопроцессоров, которые используются ими для ускорения.
Также вызовы функций кодирования будут происходить напрямую через использование API кодеков, чтобы обеспечить измерение скорости работы только алгоритма компрессии, а не дополнительных фильтров пред и пост обработки, которые могут присутствовать в различных сборках соответствующих кодеков для использования при сжатии «домашнего видео» и прочего.

Theora:


image
Среднее время кодирования одного кадра составило примерно 64,5 мс.

XVID


image
Среднее время кодирования одного кадра составило 13,3 мс.

Резьюм


Получаем разницу производительности XVID по сравнению с Theora примерно в 5 раз! То есть в моём случае, когда важна производительность кодека переходить на Theora пока рановато. Или же проводить работы по переносу критических частей алгоритма на ассемблер. Другим хорошим решением может быть использование платформы Nvidia Tesla на основе технологии CUDA. Или же разработка PCI-X карточек аппаратного кодирования на основе DSP. Благо есть отличный опыт связанный с переносом Theora на DSP: www.elphel.com/articles/AT3888835064_rus.html
А пока, XVID + SSE + MMX даёт лучшие результаты по скорости.

PS. Что интересно по уровню сжатия XVID дал лучшие результаты более чем в два раза! Но это не является адекватным тестом, так как необходимо подбирать параметры сжатия таким образом, чтобы выходное качество было примерно одинаковым. То есть это уже другая история и другие тесты.

Update: Frosty и других, кто знаком с кодеками исключительно по их использованию для кодирования домашнего видео (что не так уж и плохо)) хочу обратить внимание, что то количество параметров, которое он упоминул (правда и не перечислил) в комментариях на самом деле на уровне работы с кодеком Theora (точно также как и для XVID) программно сводится к 2 возможным вариантам: Это либо указание желаемого битрейта. Либо, указание качества (которое влияет на коэффициент квантования или же им является). При этом сами параметры — взаимоисключающие. Либо один, либо другой. Если есть сомнения на этот счёт — см. описание API кодека: theora.org/doc/libtheora-1.1/group__encfuncs.html (Подсказка: Настройки осуществляются в функции th_encode_alloc(). Передаются в виде структуры th_info. Где можно заметить эти два описанных поля: target_bitrate и quality). Абсолютно то же самое касается и XVID.
Другие возможные настройки «верхнего» уровня — это использование оптимизации процессора/видеокарты и др. В статье упомянуто, что оптимизация используется максимально возможное. Точно также как и качество.
Суть данного поста именно определение относительной скорости кодирования одного кодека по сравнению с другим на одной и той же последовательности кадров. А не сравнение качества получаемого видео после перекодирования DVD. ) Я решал конкретную задачу и получил конкретный результат. Я вполне осознаю, что при уменьшении разрешения время кодирования существенно уменьшится. Но это не существенно повлияет на результат измерения относительной скорости. Спасибо!)
Теги:TheoraXVIDТеораскорость кодирования
Хабы: Работа с видео
Всего голосов 16: ↑9 и ↓7+2
Просмотры1.6K
Комментарии Комментарии 14

Похожие публикации

Лучшие публикации за сутки