09.08.2005 - Двухпроходное перекодирование - Ямпольский Андрей

Двухпроходное перекодирование.

Автор: Ямпольский Андрей
Редакция: GOTVIEW

Двухпроходное перекодирование.

Данная статья рассчитывается на новичков, т.к. профессионалам в области перекодирования видео не надо объяснять, что такое двухпроходное перекодирование и зачем оно нужно. В данной статье я постараюсь избегать заумных терминов и буду разжёвывать каждую функцию. Двухпроходное перекодирование – это обработка видео, при которой проводится предварительный анализ видеоматериала. За счет этого и обеспечивается высокое качество конечного файла. При однопроходном кодировании с переменной скоростью передачи анализ файла происходит одновременно с процессом кодирования, поэтому такой способ, хотя и обеспечивает более высокую скорость работы, но дает более низкое качество конечного продукта.

Двухпроходное перекодирование, используя XviD.

Приступим. Какие же мы имеем настройки для двухпроходного перекодирования в XviD’е? Для начала зайдём в меню настроек XviD’а, для этого в программе VirtualDub (использовалась версия 1.6.9) открываем меню «Видео» выбираем пункт «Режим полной обработки», а затем выбираем пункт «Компрессия». Перед нами появляется окно со списком видео кодеков имеющихся в системе.

 

 

Выбираем XviD Codec и нажимаем на появившуюся справа кнопку «Изменить » В ответ на это действие появляется маленькое окошко с несколькими кнопками, ползунком, отвечающим за битрейт, и выпадающим меню с выбором количества проходов кодирования.

 

 

Для начала, разберёмся с количеством проходов кодирования.
1 pass – CBR: кодирует видео с постоянным битрейтом, указанным пользователем; 1 pass – quality: кодирование путём установки значения качества от 0 до 100 (100 – максимальное качество);
1 pass – quantizer: практически идентичный предыдущему варианту, только в данном случае каждый кадр сжимается с определённым качеством, тогда как при использовании «1 pass - quality» качество сжатия может варьироваться.
2 pass – 1st pass: можно перевести как «двухпроходное кодирование – первый проход», данная функция выполняет анализ видео материала перед кодированием во 2-м проходе. Кодек записывает в текстовый файл информацию о рекомендуемом битрейте для каждого кадра.
2 pass – 2nd pass Ext.: не делает никаких вычислений, но берёт их из обработанной кривой битрейта (данная функция работает только в Guardian Knot).
2 pass – 2nd pass Int.: внутренний механизм двухпроходного кодирования, изменяет битрейт, основываясь на паре установок, о них чуть позже.
Null: создаёт файл нулевой длины для теста скорости кодирования.

 

 

Так как эта статья посвящена двухпроходному кодированию, то этим мы и будем заниматься. Выбираем пункт «2 pass – 1st pass», нажимаем на кнопку «Advanced options», в закладке «Global settings» мы видим множество настроек, попробую объяснить основные.
Motion search precision: данную опцию желательно выставлять на значение «6 – Ultra High» для достижения наилучшего качества. Данная установка даёт лучшее качество, но увеличивает время кодирования. Также можно использовать установку «5 – Very High» для большинства задач, но крайне не рекомендуется брать значения ниже.
Quantization type: для битрейтов ниже 900 кбит/с лучше использовать H.263, с данной установкой изображение будет более гладким. При битрейтах выше 900 кбит/с можно использовать установку MPEG для более чёткой картинки.
MPEG-Custom: позволяет определить ваше собственное квантование матриц, в этой статье мы не будем обсуждать эту настройку.
Modulated или New Modulated HQ: настройка варьируется между H.263 и MPEG, позволяя достигнуть чёткое изображение без особого увеличения размера. Данная функция также не будет затронута в статье.
Следующим пунктом у нас идёт FourCC used, т.к. мы используем XviD, то не будем здесь ничего трогать и оставим всё как есть, т.е. значение «XVID». Данная функция отвечает за то, как *.avi файл будет себя идентифицировать. Изменение данного значения, позволит вам использовать DivX 4 (DIVX) или DivX 5 (DX50) фильтры для воспроизведения вашего видео материала.
Следующая установка (VHQ mode) из разряда «скорость/качество», т.е. от выбора данной установки будет зависеть скорость кодирования видео и его качество. Рекомендуется использовать значение VHQ4.
Замечание: не ставьте настройку VHQ mode в значение 0-Off и не используйте VHQ вместе с GMC (об этом чуть позже)! Установка Maximum I-frame interval (максимальное количество кадров между ключевыми кадрами).
240 для 23,976 fps
250 для 25 fps
300 для 29,970 fps
Minimum I-frame interval – предотвращает явление, когда видео фрагмент состоит только из ключевых кадров, что может сильно ухудшить качество изображения. Данное значение не должно превышать 10, рекомендуется использовать значение 1.
Lumi masking – данная функция пытается увеличить сжатие (уменьшить битрейт) в тёмных/светлых зонах. Данная функция ещё не реализована до конца, поэтому результат может варьироваться от случая к случаю. Использовать Lumi masking не рекомендуется, т.к. сейчас не имеет хорошего эффекта.
Grayscale – включает фильтр чёрно-белого кино.
Chroma motion – замедляет процесс кодирования на 10%, но улучшает качество, особенно эффективно использовать эту функцию для устранения «квадратов». Обязательно используйте эту функцию особенно в динамичных видео материалах.
Quarterpel – данная функция особенно эффективна при маленьких разрешениях. Рекомендуется для увеличения чёткости изображения.
Global Motion Compensation – функция может быть очень полезна при перекодировании изображения с пейзажами, вращениями, приближениями. Не рекомендуется использовать, т.к. GMC ещё не реализована до конца.
Interlacing – нейтрализует эффект гребёнки при количестве линий по вертикали выше 300.
Следующим пунктом в нашем описании настроек XviD’а идёт управление B-кадрами (B-frame control). Опять же повторюсь, что статья рассчитывается на новичков и затрагивать эту тему мы не будем. Чтобы отключить управление В-кадрами надо в строке Maximum B-frames написать «-1».
DX50 B-VOP Compatibility – генерирует В-фреймы совместимые с DivX 5.0.x. Использование данного метода позволяет улучшить сжатие (При включённом контроле В-кадрами).
Packed bitstream позволяет размещать В- и Р-кадры в одном потоке, что даёт кодирование без задержек. Не рекомендуется использовать при двухпроходном кодировании.
Print debug info on each frame сохраняет дополнительную информацию для каждого кадра. Используется для нахождения возможных ошибок кодека. Не рекомендуется включать, т.к. данная функция не особо полезна. Основные настройки расписаны теперь надо выбрать материал для перекодирования. Обычно, как исходный материал выбирается несжатый AVI, AVI высокого качества или MPEG2. Т.к жёсткий диск у меня небольшого объёма и хранить несжатый AVI не имею возможности, то использовал AVI высокого качества (высокий битрейт). Запускаем VirtualDub, я использовал версию 1.6.9. Открываем исходный файл для перекодирования. Выставляем настройки перекодирования аудио потока, для этого заходим в меню «Аудио» выбираем «Режим полной обработки», а потом в том же меню «Аудио» заходим в пункт «Компрессия». Нам предлагается список аудио кодеков, установленных в системе. Тут уже можно выбирать то, что вам по нраву, то, к чему вы привыкли. Я использовал кодек Lame MP3. Битрейт выбирается в зависимости от материала, если это фильм, в котором преобладают диалоги, то битрейт в 48 кбит/с будет вполне достаточен, частоты в 32 КГц хватит для большинства поставленных задач, а режим Mono или Stereo зависит от исходного материала. Если у вас он в режиме Stereo, то смело ставьте такой же режим, а если Mono, то даже и не думайте о перекодировании его в Stereo. Если же вы хотите перекодировать какой-нибудь клип или мюзикл, то качество аудио желательно ставить получше.

 

 

С аудио дорожкой проблем возникнуть не должно, да и настроек поменьше будет, чем для обработки видео. И так, заходим в меню «Видео», выбираем «Режим полной обработки» и заходим в пункт «Компрессия». В списке видео кодеков выбираем XviD MPEG-4 Codec и жмём на кнопку «Изменить».
В пункте «Encoding Mode» выбираем «2 pass – 1st pass» и жмём на кнопку «Advanced options…». Далее я приведу, как были выставлены настройки у меня.
Motion Search Precision – 6-Ultra High
Quantization Type – MPEG
FourCC Used – XVID
VHQ mode – 4-Wide search
Maximum I-frame interval – 240
Minimum I-frame interval – 1
Также использовались функции: Quarterpel и Use chroma motion.
B-frame control отключён, путём выставления значения «-1» в строке Maximum B-frames. На этом настройки для первого прохода закончены, закрываем все окна настроек, путём нажатия «ОК». И сохраняем файл как AVI, и наблюдаем за первым проходом кодирования.
Процесс это довольно длительный, поэтому следует поднабраться терпения, четырёхминутный клип у меня кодировался чуть больше 10 минут. Кажется, что это не так уж и долго, но если вы намереваетесь кодировать полнометражный фильм, то у вас это займёт порядка 7-8 часов.

 

 

После завершения первого потребуется внести небольшие изменения в настройки кодирования. Снова заходим в меню «Видео», пункт «Компрессия», кодек – XviD MPEG-4 Codec, жмём на кнопку «Изменить» и изменяем значение Encoding mode c «2 pass – 1st pass» на «2 pass – 2nd pass Int.». Графу Desired size оставляем без изменений. Нажимаем кнопку «Advanced options…» и выбираем закладку Quantization.

 

 

Я бы рекомендовал новичкам оставить все настройки без изменений. Изменение значений в графах «Max quantizer» может улучшить качество видео, но при этом нарушит механизм предсказывания битрейта, так что, тем, кто хочет поэкспериментировать с этими настройками, советую быть осторожнее.
Следующая закладка Two Pass

 

 

Discard first pass должна быть всегда отмечена, чтобы перезаписывать видео поверх того файла, что создался при 1-м проходе.
Below I-frame distance… надо выставлять в зависимости от количества кадров в секунду: 12 для 23.976 FPS, 13 для 25.000 FPS и 15 для 29.970 FPS.
I-frame bitrate reduction % служит для снижения битрейта: 24 для 23.976 FPS, 25 для 25.000 FPS и 30 для 29.970 FPS.
High bitrate scenes % и Low birate scenes % лучше оставить как есть (0), для лучшего качества изображения.
Устанавливаем Bitrate payback delay value (FPS) 240 для 23.976 FPS, 250 для 25.000 FPS и 300 для 29.970 FPS.
Payback with bias рекомендуется для высоких битрейтов (выше 900 kBit/s).
Payback proportionally используется для низких битрейтов (ниже 900 kBit/s).
На этом настройки для второго прохода закончены, закрываем все окна, нажатием «ОК» и сохраняем наш файл как AVI, заменяя файл, который мы использовали для первого прохода.
Ждать придётся столько же, сколько при первом проходе. Итого двухпроходное перекодирование 4-хминутного клипа у меня заняло примерно 21 минуту, скорость кодирования составляла порядка 9 кадров в секунду. Как результат хочу отметить, что качество получилось немного, я бы даже сказал несущественно, хуже, а клип сжался с 50 Мб до 38.

Двухпроходное перекодирование MPEG2 в *.avi, используя XviD и DivX.

Теперь коснёмся основной причины использования двухпроходного перекодирования, которая даёт намного лучшие результаты по сравнению с исходным файлом – это перекодирование из MPEG2 в AVI. Сразу оговорюсь, чтобы позже не возникало вопросов типа: «почему у меня всё глючит?», «почему у меня возникает рассинхронизация звука?» и т.п. При захвате изображения в формате MPEG2 обязательно выставляйте стандартные для этого формата разрешения.
За исходный файл для перекодирования был взят 30-тисекундный отрывок из телепередачи. Файл был записан с битрейтом в 9 Мбит/с и разрешением 720х576, размером в 32 Мб.
Было бы неплохо для этой задачи протестировать оба кодека (XviD и DivX). Ну и начнём мы с XviD, если уж мы его затронули в разделе перекодирования из высококачественного (или несжатого) AVI в AVI, пригодного для записывания на диск. Для этой задачи воспользуемся уже привычным VirtualDub’ом. Изменять настройки, которые мы использовали для перекодирования AVI, нам не потребуется, т.к. они универсальны для видео хорошего качества. Т.е. в настройках компрессии видео снова выставляем «2 pass – 1st pass» и переходим к настройкам компрессии аудио. Т.к. я использовал в качестве исходного материала ТВ-передачу, а не клип, как в прошлом примере, то и хорошее качество звука не требуется, поэтому достаточно будет 32КГц, 48 кбит/с, Mono, CBR (используем кодек Lame MP3).

Но есть ещё одна загвоздка – это отсутствие аппаратного деинтерлейса в режиме захвата MPEG2. Деинтерлейс включается только при проигрывании захваченного видео, но т.к. мы будем перекодировать его, то при проигрывании (уже AVI-файла) деинтерлейс не включится. По этой причине при перекодировании надо использовать программный фильтр деинтерлейса. Для этого надо зайти в меню «Видео» далее «Фильтры». В появившемся окне нажать на кнопку «Добавить» и выбрать из списка фильтр «deinterlace», после нажатия «ОК» перед нашим взором появится меню с выбором режимов деинтерлейса. Выбираем самый первый (Смешать поля вместе) и нажимаем «ОК».

 

 

Далее закрываем все окна путём нажатия «ОК». И сохраняем файл как AVI. И тут-то мы сталкиваемся с первым недостатком перекодирования из MPEG2 – это скорость кодирования, которая составляла на моём компьютере (1200 Duron, 128 mb RAM) примерно 2 кадра в секунду. И первый проход кодировался порядка 10 мин, следовательно, второй проход будет длиться столько же времени, итого 20 минут, чтобы перекодировать 30 секунд фильма в хорошем качестве. По окончанию первого прохода, меняем в настройках кодека значение Encoding Mode на «2 pass – 2nd pass Int.» и заменяем уже созданный AVI-файл.
В результате получаем файл размером 17 Мб и изображение с отличным качеством и без эффекта «гребёнки». По-моему, неплохая разница в 2 раза, но всё же маловато, посмотрим, на что способен DivX.
За основу был взять тот же 30-тисекундный файл в формате MPEG2. Настройки аудио компрессии выбираем точно такие же, как и при перекодировании с помощью XviD. В настройках компрессии видео выбираем кодек DivX MPEG-4 Codec (я использовал версию 5.1.1).

 

 

В меню настроек кодека нажимаем на кнопку выбора профиля (Select Profile Wizard).

 

 

Выбираем Home theater, далее указываем разрешение нашего исходного видео ролика, т.е. 720х576 и 25 кадров в секунду. Жмём кнопку «Готово».

 

 

В разделе Bitrate/Quality устанавливаем ползунок в крайнее правое положение в значение Slowest. В разделе Bitrate устанавливаем «Multipass, 1st pass» и выставляем битрейт примерно на 1500-2000 кбит/с. Не забудьте использовать фильтр «deinterlace». Все настройки произведены, можно сохранять файл как AVI. По времени кодируется примерно столько же, сколько и при использовании XviD, может быть чуть быстрее. После окончания 1-го прохода, изменяем настройки кодека с «Multipass, 1st pass» на «Multipass, nth pass».

 

 

А значение ползунка bitrate modulation выставляем в крайнее правое положение (low motion – 0,25, этот показатель отвечает за динамичность видео, но даже в самых современных и динамичных экшенах преобладает статика примерно на 70%). Настройки для второго прохода завершены, можно заменять AVI-файл и ждать окончания кодирования. Что же мы получаем в конечном итоге? Наш файл занимает не 17 Мб, а всего лишь 5!! Но давайте сначала просмотрим результат наших трудов. При использовании фильтра деинтерлейса вместе с кодеком DivX у меня в изображении полезли квадраты, которые резко портят впечатление от просмотра.

 

 

Хочу отметить, если не использовать этот фильтр, то искажения видео не происходит, но эффект «гребёнки присутствует». Так что дело за вами, что для вас важнее качество или размер. Вывод могу сделать только один: перекодирование MPEG2 в AVI – это привилегия только мощных компьютеров, иначе нет смысла тратить столько времени, гораздо проще будет пойти и купить диск с любимым фильмом в магазине.

Обсудить на форуме

@Mail.ru Rambler's Top100