Pull to refresh

x264 + VirtualDub vs XviD. Исследуем возможности, повышаем эффективность

Reading time4 min
Views34K
В предыдущем посте я писал про разработку собственной матрицы под XviD. Той статьи не было бы, если б я сразу занялся x264. А занялся я им, потому что видел, что такие проблемы XviD, как квадратичность, искажение градиента цвета, ореол вокруг объектов, устраняются в x264.
Целью задачи стало выяснение этих возможностей кодека, а также скорости кодирования и размера файла. x264 успешно справился со всеми задачами и ниже вы узнаете, как это сделать легко и непринуждённо.

Краткая информация


Кодек x264 — очень успешная реализация стандарта H.264, созданная под крылом сообщества VideoLAN (автора VLC media player) со свободной лицензией. Обычно экспортируется консольный вариант, ориентированный в первую очередь на юниксоидов, под винды также есть варианты с графическим интерфесом. Собственно, недружественность опенсорсных разработчиков с рядовыми пользователями (вечные проблемы с документацией и графическим интерфейсом успешно и по сей день отделяют Microsoft от многих хороших и бесплатных проектов) и стала тормозным фактором на пути выхода кодека к широким массам и любителям видеоколлекций. Но, слава Всевышнему, не всё так уныло на сегодняшний день и есть достойные графические варианты. Теперь будьте внимательны, потому что речь пойдёт именно о релизе 2273 от Komisar (ссылка здесь). Сам файл, который установится в систему, это x264vfw.dll. Установить его можно на любой диск, а установщик позаботится, чтобы этот путь попал в реестр винды. Также вы можете иметь установленным этот кодек, если у вас есть полный K-Lite Codec Pack. Если там иная версия, установите 2273. Я пробовал версию 2274 с другим интерфейсом — категорически не советую, если только вы не собираетесь вникать в консольные команды. Чтобы вы не запутались, смотрите скриншоты.





Маркёром выделены ключи, которые мы будем разбирать и менять. Поехали.

Quantizer — квантизатор, который огрубляет итоговый сигнал, чем больше, тем хуже качество. Я кодирую только квантизатором и только в один проход, почему — смотрите предыдущий пост.
Здесь он отличается от того, что в XviD, поэтому я прикинул, что нужно брать значения кратные 4. Вот резюме:
4, 8 — рекомендуется только тем, кто занимается обработкой видео, так как качество идеальное, но большой размер файла;
12, 16 — для любителей качественных роликов небольшого размера в домашней коллекции;
20 — мой выбор, самый оптимальный квантизатор, подходит для фильмов;
24, 28 — компромиссный вариант, нормальное качество, подходит для большинства фильмов и сериалов, а также для загрузки роликов на ютуб;
32 и выше — бывают и такие случаи.

Во второй вкладке много интересных и полезных настроек.
Блок Analysis — разбивка блоков на части, фишка стандарта H.264, призвана обеспечить лучшее качество, но на поверку оказалась практически бесполезной — размер файла увеличивается, улучшение качества нужно искать с микроскопом, так что отключайте все «пташки».

Subpixel ME refinement — сложность оценки движения, значения от 1 до 11.
Чем больше, тем меньше размер и скорость. На самом деле размер уменьшался до 5, с цифры 6 размер стал расти, а скорость падать, видимо, это связано с Psy RDO, который до цифры 6 не работает. Так что вывод такой: если хотите максимальную скорость, то ставьте 1 и жертвуйте несколькими мегабайтами, если же не хотите жертвовать мегабайтами, а минутами, то ставьте 5.

Max GOP size — максимальный интервал между ключевыми кадрами, подробнее в предыдущем посте. Ставьте в пределах 200-300 и не партесь.

Max consecutive B-frames — максимальная последовательность B-кадров, чем их больше, тем меньше размер, но с этим нужно быть осторожней, могут быть проблемы с воспроизведением. Рекомендую 1 или 2.

Мы подошли к блоку Encoding и это, пожалуй, наиболее интересная часть настроек.
Deblocking filter (птичка и два числовых значения) — решает проблему квадратов, так ненавистных у XviD. По-умолчанию стоят значения 0, максимум 6. Мне 0 показалось мало и я попробовал 6 — понравилось. Теперь всегда буду ставить 6. Компромисс — 3.

Intra / Inter Deadzone — сглаживающий фильтр, работает по принципу Гаусса. Интересно, что в VirtualDub есть подобный фильтр и я им часто пользовался, но теперь он особого смысла не имеет. Дело в том, что при использовании его только в VirtualDub кодек в итоге всё равно оставляет шумы, а если использовать его только в кодеке — никаких проблем с шумами. Я выбрал максимум 32, потому что некоторые моменты просто восторгают — проезжающая машина даёт перламутровый блеск, море и небо просто загляденье. Некоторые заметят, что есть недостаток замыливания мелких деталей, тогда советую меньшие значения, кратные 4. Отключить совсем можно при квантизаторе меньше 16. На скорость не влияет.

Остальные ключи на этой вкладке объяснять не буду — просто поставьте, как на скриншоте.
Теперь третья вкладка, скриншота нет и не нужно. Там только нужно изменить два значения раз и навсегда. QP factor — выставьте оба в 1, если не хотите сюрпризов в виде неожиданного ухудшения качества.

Теперь важная инормация для тех, кто пользуется внешним плеером. Если есть проблемы с воспроизведением, сделайте следующие настройки:
Max frame refs = 1, Max consecutive B-frames = 0, CABAC = выкл.
Не все эти настройки одновременно влияют на совместимость, поэтому экспериментируйте.

На скорость могут влиять Subpixel ME refinement, Max frame refs, Max consecutive B-frames. За счёт использования многоядерности x264 оставляет позади XviD. С теми настройками, которые на скриншотах, размер файла сопоставим с XviD со средним квантизатором, но качество гораздо лучше. Так что прощай старый добрый XviD, ты много отнял у меня времени и нервов, а также дискового пространства, но тебе пора на заслуженный покой.

Кто любит паковать в mkv — юзайте MeGUI, инфы в инете достаточно. А если вам нравится в avi, то пожалуйте в VirtualDub. Кстати, как быстро открыть неавишный файл в VirtualDub? Легко. Ставите AviSynth, создаёте текстовый файл с расширением .avs и пишите строку
DirectShowSource("путь к фильму")
Если название кириллицей, не забудьте про кодировку Win. Потом открываете файл в VirtualDub. Рекомендации по звуку в предыдущем посте. Если делаете рипы в HD для заливки на ресурсы, можно вместо квантизатора 20 использовать 24 или 28, но обязательно с Deblocking filter и Intra / Inter Deadzone — получите нормальное качество с малым размером.

Для особо интересующихся здесь можно почитать о настройках x264 на русском.

Кодируйте на здоровье!
Tags:
Hubs:
Total votes 19: ↑14 and ↓5+9
Comments20

Articles