Страница 1 из 1

x264 coding FAQ by SM, version 1.1a

Добавлено: 10 фев 2006, 18:36
Слэйер Мун
За весь прошедший год многие люди с форума АсоФ'а (а также его же чата) неоднократно задавали мне вопросы по поводу сжатия (компрессии, перекодировки) видео (на 99% это были вопросы касательно уменьшения размера видео-записей боёв). Т.к. мне надоело всем объяснять одно и тоже - спешу (спешил я долго =) написать этот мини (очень мини)-ФАК по вопросам кодирования видео в чрезвычайно перспективный и идеальный для наших целей (наилучшее соотношение размер/качество выходного видео) формат H264/AVC (как многие уже знают этот формат будет использоваться для сжатия видео-контента в будущих носителях видео-информации - Blue Ray, HD-DVD, как сейчас MPEG 2 используется для хранения видео в DVD). H264 формат платный, существует определённое количество фирменных кодеров (наиболее известен Nero Digital, использующий Н264/AVC) и каждый стоит денег, поэтому мы как любители open source будем использовать бесплатную альтернативу - x264.

Итак, что нам нужно чтобы перекодировать эээммм... допустим боевое видео, закоденное в xvid ( или divx) в х264 ? Для начала сам кодер, последние билды этой штуки (нужно отметить что существует CLI-версия х264 (CLI - command line interface), мы её в данный момент не рассматриваем, мы будем использовать VFW-версию (VFW - video for windows), она наиболее user-friendly) всегда можно взять на http://forum.doom9.org/showthread.php?s=&threadid=89979 . Хочу сразу заострить внимание читателей на том, что х264 не кодек (codec - COder/DECoder) ! Это кодер/энкодер (encoder), т.е. им можно только кодировать видео, но просматривать его никак не получится, для просмотра же абсолютно все рекомендуют использовать универсальный декодер FFDShow,взять его можно на http://ffdshow.sourceforge.net/tikiwiki ... ng+ffdshow или ссылки на него можно найти на той же странице, на которой лежит постоянно обновляемая версия х264 (см. начало ФАКа). С помощью FFDShow можно просматривать любое MPEG4 видео а также H264/AVC и прослушивать большое количество сжатого audio (что находится внутри видео имеется в виду), вещь очень полезная и нужная, работает быстро, выдаёт качественную картинку, имеет "миллион" настроек, хотя и без тонкой настройки работает "как надо".
Итак - кодер и декодер есть (cамо-собой разумеется, что нам также нужны установленные XVID или же DIVX, вобщем тот кодек, с помощью которого закодено видео которые мы хотим перевести в х264), теперь нам нужна прога, которая собственно и будет выполнять кодирование. Не буду оригинальным и возьму VirtualDub, как наиболее подходящую для наших целей софтварину. Лично я использую простую русскую версию этой программы, которая всегда доступна для скачки на том же http://samlab.ws
Установив х264 VFW, FFDShow и VirtualDub приступим к самому действу и начнём мы его с запуска Vdub'а =) Далее идём в меню настройки кодера х264 (тут и ниже по тексту всё делаем, как на картинках) :
Изображение
Далее жмём "Изменить" и настраиваем х264 следующим образом :
Изображение
На вкладке х264 Configuration :
Изображение
Сразу хочу отметить что полоска Target Bitrate у меня установлена на значение 100 не с проста, по ходу дела объясню почему.
На закладке Rate Control всё должно выглядеть вот так :
Изображение
Можно сказать ничего не меняем по сравнению с настройками по умолчанию.
На третьей закладке всё выставляем как показано тут :
Изображение
И на последней всё делаем так :
Изображение
Особо не вдаваясь в подробности можно отметить что всё что нам надо поставили на "максимум" (видео будет кодироваться очень долго и результат будет лучшим с визуальной точки зрения), конечно это не идеальный вариант (в идеале под каждый тип видео нужно иметь свои настройки) но по мне так очень хороший (жажду критики от мега-отцов кодинга).
Помните на первой закладке у нас стоял ползунок Target Bitrate на значении 100 ? Так вот после долгого юзанья (кодирования различного видео) х264 я пришёл к выводу, что для успешного (по нашим излюбленным показателям размер/качество) кодирования видео боёв в 2D файтингах так называемого олд-скульного вида (SF, КоФ, ЛБ и т.п.) нам подойдёт битрэйт 100, для 3Д и 2Д файтингов не олд-скульных (ГГ, VS-серия вообще) нам подойдёт битрэйт 200. Почему так ? В 3Д и "VS-серии-подобных-играх" очень часто обновляется (изменяется) бОльшая часть того, что мы видим перед глазами - в 3Д это сами персонажи, которые больше чем в 2Д плюс к этому 3Д задники, которые постоянно меняются в зависимости от перемещения бойцов, тоже с ГГ например - всё мелькает, бэкграунд часто меняется (все летают и из-за этого идёт постоянное смещение - вверх, вниз + сам бэк полностью меняется по время выполнения даст-комбы). При использовании битрэйта 100, так хорошо подходящего для олд-скульных 2Д файтов, в 3Д мы получаем вместо удобоваримой картинки страшную кашу. А вот если мы поставим битрэйт 200 то всё будет чики-пуки =) Полезным также является выбор Direct mode "Spatial" для 2D и "Temporal" для 3D.
В итоге мы поняли (да ? =) что все настройки для кодирования видео должны быть такие как у меня на картинках (впрочем и это обсуждаемо, жду критики х2) но в зависимости от типа (олд 2D или же 3D/new 2D) видео мы меняем битрэйт с 100 на 200. Для комбо видео можно даже поставить 300 или 400, качество будет очень недурным и при этом размер не будет огромным как у большинства комбо-видео наших зарубежных коллег (будь они прокляты со своим МПЕГом 1 =).
Вобщем настроили мы х264 как надо, теперь зарядим кодирование им в 2 прохода (так и никак иначе, даже не обсуждается, хотя я читал что можно больше но там что то хитро надо настраивать) =). Для этого в диалоговом окне с настройками х264 опять переходим к первой закладке и там ставим Multipass - FirstPass (т.е. мы выбираем режим кодирования в первом проходе), жмём ОК. Кстати если кто ещё не догадался перетащить нужное видео путём drag'n'drop'а (или же банальным Файл/Открыть видео файл) в рабочее окно VirtualDub - самое время это сделать =)
Между делом, если наc по какой то причине не устраивает звук в видео (например он в MP3 44100 hz, 128 kbit/s а для интернет-версии записи боя это слишком много, надо менять на 22050 Гц, Моно, 24 Кбит/сек или что-то такое) то мы будем его даунсэмплить, для этого идём в пункт меню VDub'а - Аудио, там выбираем Режим полной обработки, далее нам откроется недоступное до этого момента меню Компрессия (всё там же - в Аудио) и в ней уже мы сможем выбрать формат в который перейдёт наш звук после конвертации, см. картинку :
Изображение
Далее уже в VirtualDub'е идём в меню Файл/Cохранить как AVI, там пишем имя файла (какое угодно собственно) а внизу НЕ забываем ставить галочку Don't run this job now; add it to job control so i can run it in batch mode, вобщем как на картинке :
Изображение
Поставив галочку мы автоматически ставим наш видео файл в очередь на кодирование (в данном случае файл будет кодироваться первым, в один проход). Очередь всегда можно посмотреть в меню Файл/Управление заданиями.
После этого "заряжаем" второй проход - идём опять в настройки х264, меню Видео/Компрессия и там в списке слева - х264 - H264/AVC encoder и жмём "Изменить". В меню настройки кодека меняем наш Multipass - FirstPass на Multipass - Nth Pass, жмём ОК. Далее полностью повторяем операцию идентичную той что мы проделали с кодированием в первый проход - идём в меню Файл/Cохранить как AVI там пишем имя файла (какое угодно собственно) а внизу НЕ забываем ставить галочку Don't run this job now.
Как всё это сделали мы получили видео полностью готовое к кодингу, нам осталось лишь зайти в Файл/Управление заданиями и там нажать кнопку "Начать". Видео (одно и тоже видео под одним и тем же именем) прокодится два раза и мы получим что хотели. Всё =)

p.s. Да - настраивать чуть гемморойно, но к нашей радости нам не придётся делать это каждый раз для каждого нового видео что мы хотим пережать. Нам всего лишь нужно настроить всё как надо для первого прохода, затем в меню Файл нажать "Сохранить параметры обработки". Тоже самое проделать со настройками для кодирования во второй проход, т.е. тоже их сохранить. Далее юзать, меняя только битрэйт, если нужно =)

p.p.s. Битрэйты 100 и 200 для 2D и 3D/new school 2D видео применимы только к видео в разрешениях 320х240 (стандартный размер для инет-видео записей боёв), соответственно если разрешение больше - увеличиваем битрэйт, но это уже поле для экпериментаторства =)

p.p.p.s. Этот ФАК версии 1.1а явно нуждается в дополнениях и изменениях, так что если вдруг у кого-то возникли вопросы (омг только не это!) предложения или пожелания - постите в этой теме.

p.p.p.p.s. Спасибо Хейту за полезную информацию, кое-чем из неё я дополнил этот мини-ФАК.

Добавлено: 03 мар 2006, 16:06
Слэйер Мун
Update - последние билды х264 теперь нужно брать тут - http://x264.nl Апдэйты каждый день.
FFDShow, с оптимизациями под различные sse =) Брать тут - http://www.free-codecs.com/FFDShow_download.htm

Добавлено: 24 апр 2006, 05:21
hate264
Ой, бедняги.

Последняя закладка настройки конфига, опция Method = uneven multi-hexagon или hexagonal (по умолчанию). Exhaustive роняет скорость сжатия процентов на 30, поднимая PSNR на десятые.

И если уж я здесь. Предпоследняя (MBs&Frames). Max. Ref Frames и Consecutive - в максимум. Галку к Mixed Refs.

>(так и никак иначе, даже не обсуждается, хотя я читал что можно больше но там что то хитро надо настраивать)
Внимание-внимание! Суперхитрая настройка, позволяет ускорить сжатие в два раза! В главном окошке включить один проход, в продвинутых настройках на закладке Rate Control поставить Bitrate Variability (%) в 0. Там же: Direct Mode = Spatial для 2D и Temporal для 3D.

СМ, респект, обнови картинки до последней версии.

Для людей, не боящихся командной строки:

Код: Выделить всё

x264 --ratetol 1000 -I 300 -i 30 -r 16 -b 7 --b-pyramid -B 112 -A all -w -8 -m 7 --direct spatial --me umh --merange 16 --b-rdo --bime --mixed-refs --progress -o сжатый_файл.mkv исходный_файл.avs
Желающие разобраться в настройках да скачают классный мануал: ttp://forum.doom9.org/showthread.php?t=98247

Под конец нашего представления злостно нарушу правила форума. Декодер, которым можно смотреть h264, лежит у корейцев на форуме (ttp://www.kmplayer.com/kbbs/attachment.php?at ... 1144985413). Зарегистрируйтесь ))) и устанавливайте голый .ax на здоровье (подсказка: regsvr32 CoreAVCDecoder.ax - только начало))))). Отмечу, что он действительно хорош.

Добавлено: 24 апр 2006, 16:35
Слэйер Мун
Очень интересно, вечером попробую предложенные тобой варианты.

Картинки обновлю конечно.

Добавлено: 15 май 2007, 11:56
hate264
Снять sticky: vfw-версия кодека (сорры, подавился своими словами, правильно будет так) год как не выпускалась, а сейчас полностью сменила оболочку.

Добавлено: 15 май 2007, 20:34
OverKilL.
гуд

Re: x264 coding FAQ by SM, version 1.1a

Добавлено: 19 окт 2010, 23:30
BioLogIn
по просьбам трудящихся вернул из небытия картинки из первого поста темы.