# Кодирование с MEncoder

## Создание высококачественного MPEG-4 ("DivX") рипа из DVD фильма

Одним часто задаваемым вопросом является "Как мне сделать рип самого высокого качества для заданного размера?". Другой вопрос "Как мне создать DVD рип с самым высоким возможным качеством? Я не беспокоюсь о размере файла, мне нужно лишь наилучшее качество.".

Последний вопрос, похоже, отчасти неверно сформулирован. В конце концов, если Вы не беспокоитесь о размере файла, почему бы просто не скопировать весь MPEG-2 видео поток с DVD? Конечно, Ваш AVI файл будет занимать около 5GB, но если Вы желаете наилучшее качество и не волнуетесь о размере, то это, несомненно, лучшее решение.

В действительности, причиной, по которой Вы хотите перекодировать DVD в MPEG-4, является именно Ваше беспокойство о размере файла.

Сложно дать универсальный рецепт о создании DVD рипа очень высокого качества. Необходимо рассмотреть несколько факторов, и Вы должны понимать эти детали, иначе Вы, скорее всего, разочаруетесь своими результатами. Ниже мы исследуем некоторые из этих вопросов, а затем рассмотрим пример. Мы предполагаем, что Вы используете libavcodec для кодирования видео, хотя теория также применима и к другим кодекам.

Если это кажется для Вас слишком сложным, то Вам, пожалуй, следует использовать один из многочисленных неплохих фронтендов, указанных в разделе MEncoder нашей страницы родственных проектов. Так Вы должны получить высококачественные рипы без особых размышлений, поскольку большинство этих утилит разработаны для принятия умных решений за Вас.

### Подготовка к кодированию: Идентификация исходного материала и кадровой частоты

Прежде, чем даже задумываться о кодировании фильма, Вам необходимо выполнить некоторые предварительные действия.

Первым и наиболее важным шагом перед кодированием должно быть определение типа содержимого, с которым Вы работаете. Если источником Ваших исходных материалов является DVD или широковещательное/кабельное/спутниковое TV, оно будет содержаться в одном из двух форматов: NTSC для Северной Америки и Японии, PAL для Европы и т.д.. Однако, важно понимать, что это только форматирование для показа на телевидении, и оно часто не соответствует исходному формату фильма. Опыт показывает, что NTSC материал существенно более сложен для кодирования, т.к. в нём содержится больше элементов, которые нужно идентифицировать. Для проведения удачного кодирования, Вам необходимо знать исходный формат. Отказ от принятия этого во внимание приведёт к различным дефектам в Вашем кодировании, включая безобразные гребешки (артефакты чересстрочной развёртки) и повторяющиеся или даже потерянные кадры. Кроме ухудшения картинки, артефакты так же уменьшают эффективность кодирования: Вы получите худшее качество на единицу битпотока.

#### Определение кадровой частоты источника

Вот список, содержащий общие типы исходных материалов, где они, преимущественно, встречаются и их свойства:

- Стандартный фильм: Производятся для театральных показов на 24 fps [кадр/сек].

- PAL видео: Записывается с помощью PAL видеокамеры при 50 полях в секунду. Поле состоит только из чётных или нечётных линий кадра. Телевидение было разработано для обновления этих полей попеременно, что используется как вид дешёвого аналогового сжатия. Человеческий глаз, предположительно, компенсирует это, но однажды поняв чересстрочную развёртку, Вы научитесь видеть её и на TV и Вам больше никогда не понравится телевидение. Два поля не составляют целый кадр, поскольку они снимаются с задержкой в 1/50 секунды и, следовательно, не формируют одно изображение, за исключением случая полного отсутствия движения.

- NTSC видео: Записывается с помощью NTSC видеокамеры при 60000/1001 полях в секунду, или 60 полях в секунду в эпоху чёрно-белого TV. В других отношениях аналогично PAL.

- Анимация: Обычно рисуется на 24 fps, но также существуют разновидности со смешанной кадровой частотой.

- Компьютерная графика (CG): Может быть с любой частотой кадров, но некоторые встречаются чаще остальных; 24 и 30 кадров в секунду типичны для NTSC, и 25 fps типично для PAL.

- Старый фильм: Различные низкие кадровые частоты.

#### Идентификация исходного материала

Фильмы, состоящие из кадров, называются фильмами с построчной (или прогрессивной) развёрткой, а состоящие из независимых полей — фильмами с чересстрочной развёрткой или просто видео; однако, последний термин двусмысленный.

Из-за дальнейших усложнений, некоторые фильмы будут смесью нескольких, указанных выше.

Наиболее важным различием между всеми этими форматами является то, что одни из них основаны на кадрах, а другие — на полях. Любой фильм, подготовленный для просмотра на телевидении (включая DVD), преобразуется в формат, основанный на полях. Различные методы, с помощью которых это может быть сделано, совокупно называются "телесин" (англ. telecine), одним из вариантов которого является отвратительный NTSC "3:2 пулдаун" (англ. pulldown). За исключением случаев, когда формат исходного материала был также основан на полях (и с такой же частотой полей), Вы получите фильм в формате отличном от исходного.

Существует несколько общих типов пулдауна:

- PAL 2:2 пулдаун: Наилучший из всех. Каждый кадр показывается за время длительности двух полей путем извлечения чётных и нечётных строк и их попеременного показа. Если в исходном материале 24 fps, то это ускоряет воспроизведение фильма на 4%.

- PAL 2:2:2:2:2:2:2:2:2:2:2:3 пулдаун: Каждый 12-й кадр показывается за время длительности трёх полей, вместо двух. Это помогает избежать проблемы 4%-го ускорения, но делает обращение процесса существенно более сложным. Такие вещи обычно наблюдаются в музыкальных произведениях, где изменение скорости на 4% существенно повредит музыкальную партитуру.

- NTSC 3:2 телесин: Кадры показываются попеременно за время длительности 3-х полей или 2-х полей. Это даёт частоту полей в 2.5 раза больше исходной частоты кадров. Результат также очень незначительно замедляется от 60 до 60000/1001 полей в секунду для поддержания частоты полей NTSC.

- NTSC 2:2 пулдаун: Используется для отображения материала с 30 fps на NTSC. Так же мил, как и 2:2 PAL пулдаун.

Так же существуют методы для преобразования между NTSC и PAL видео, но подобные темы выходят за рамки данного руководства. Если Вам попался такой фильм, и Вы хотите кодировать его, лучшим решением будет найти копию в исходном формате. Преобразование между этими двумя форматами вносит большие потери и не может быть точно обращено, так что Ваше кодирование существенно пострадает, если оно делается из преобразованного источника.

Когда видео находится на DVD, последовательные пары полей группируются как кадр, даже если они не предназначены для одновременного отображения. Стандарт MPEG-2, используемый на DVD и цифровом TV предоставляет возможность одновременно кодировать исходные кадры с построчной развёрткой и сохранять число полей, в течении которых кадр должен быть показан, в его заголовке. Если был использован такой метод, фильм часто будет называться как "мягкий телесин", т.к. процесс только указывает DVD-плееру о необходимости применения пулдауна к фильму, не изменяя при этом сам фильм. Этот случай существенно предпочтителен, т.к. он может быть легко обращён (в действительности, проигнорирован) кодером и т.к. он сохраняет максимальное качество. Однако, многие широковещательные и DVD студии не используют надлежащую технологию кодирования и вместо этого производят фильмы с "жёстким телесином", где поля в действительности повторяются в кодированном MPEG-2.

Порядок действия в таких случаях будет описан позже в данном руководстве. Сейчас мы дадим Вам несколько советов по идентификации типа материала, с которым Вы работаете:

Регионы NTSC:

- Если при просмотре Вашего фильма MPlayer выводит, что частота кадров была изменена до 24000/1001 и она никогда не меняется обратно, то это почти наверняка содержимое с построчной развёрткой, которое было подвергнуто "мягкому телесину".

- Если MPlayer отображает попеременные переключения частоты кадров между 24000/1001 и 30000/1001, и Вы иногда видите "гребешки", есть несколько возможностей. Сегменты с 24000/1001 fps почти наверняка являются "мягко телесиненным" содержимым с построчной развёрткой, но части с 30000/1001 fps могут быть как "жёстко телесиненым" содержимым с 24000/1001 fps, так и NTSC видео с 60000/1001 полями в секунду. Используйте два нижеследующих руководства для определения того, с каким случаем Вы имеете дело.

- Если MPlayer никогда не показывает изменения кадровой частоты и каждый отдельный кадр, где есть движение, оказывается гребёнкой, Ваш фильм есть NTSC видео с 60000/1001 полями в секунду.

- Если MPlayer никогда не показывает изменения кадровой частоты и два кадра из каждых пяти оказываются гребёнкой, Ваш фильм представляет собой "жёстко телесиненное" содержимое с 24000/1001 fps.

Регионы PAL:

- Если Вы не видите никакой гребёнки, Ваш фильм есть 2:2 пулдаун.

- Если Вы видите попеременную гребёнку каждые полсекунды, Ваш фильм представляет собой 2:2:2:2:2:2:2:2:2:2:2:3 пулдаун.

- Если Вы всегда видите гребёнки во время движения, значит Ваш фильм является PAL видео с 50 полями в секунду.

Подсказка:

MPlayer может замедлить воспроизведение фильма с опцией -speed или воспроизводить его покадрово. Попробуйте использовать опцию `-speed 0.2` для очень медленного просмотра фильма или нажимайте клавишу "." для воспроизведения одного кадра за раз и идетнифицируйте образец, если не можете его увидеть на полной скорости.

### Постоянный квантователь в сравнении с многопроходностью

Возможно кодировать Ваш фильм, широко варьируя качество. С современными видеокодерами и небольшим сжатием перед кодированием (уменьшением размера и шумов) возможно достичь очень хорошего качества при размере 700 МБ для 90-110-минутного широкоэкранного фильма. Более того, всё, кроме самых длинных фильмов, может быть кодировано с почти безупречным качеством на 1400 МБ.

Есть три подхода при кодировании видео: постоянный битпоток (CBR), постоянный квантователь и многопроходность (ABR или усреднённый битпоток).

Сложность кадров фильма и, таким образом, число битов, нужных для их сжатия может существенно отличаться от одной сцены к другой. Современные видеокодеры могут подстраиваться под это в процессе работы и варьировать битпоток. Однако, в таких простых режимах как CBR кодеры не знают загруженность битпотока в последующих сценах и т.о. не могут превысить затребованный битпоток для больших промежутков времени. Более совершенные режимы, такие как многопроходный режим, могут учитывать статистику предыдущих проходов; это решает проблему, упомянутую выше.

Замечание:

Большинство кодеков, поддерживающих ABR кодирование, поддерживают только двупроходный режим, в то время как некоторые другие, такие как x264, Xvid и libavcodec поддерживают многопроходность, несколько улучшающую качество на каждом проходе, однако, это улучшение не измеримо и не заметно после 4-го прохода или около того. Поэтому, в данном разделе дву- и многопроходность будут использоваться взаимозаменяемо.

В каждом из этих режимов видеокодек (такой как libavcodec) разбивает видеокадр на макроблоки размером 16х16 пикселей и потом применяет квантователь к каждому макроблоку. Чем меньше квантоваль, тем лучше качество и выше битпоток. Метод, используемый видео кодером для определения того, какой квантователь использовать для данного макроблока, варьируется и подлежит тонкой настройке. (Это крайнее упрощение реального процесса, но основная концепция полезна для понимания.)

Когда Вы указываете постоянный битпоток, видеокодек будет кодировать видео, отбрасывая детали столько, сколько необходимо и настолько мало, насколько это возможно с целью оставаться ниже заданного битпотока. Если Вас действительно не волнует размер файла, Вы можете также использовать CBR и указать бесконечный битпоток. (На практике это означает значение, достаточно большое для обозначения отсутствия предела, например, 10000 Кбит.) В результате, без реального ограничения битпотока, кодек использует наименьший возможный квантователь для каждого макроблока (как указано опцией `vqmin` для libavcodec, равной 2 по умолчанию). Как только Вы укажите настолько низкий битпоток, что кодек будет вынужден использовать более высокий квантователь, Вы почти наверняка испортите качество Вашего видео. Чтобы избежать этого, Вам, вероятно, придётся уменьшить размеры Вашего видео, согласно методу, описанному далее в этом руководстве. В общем, Вам следует избегать CBR совсем, если Вы заботитесь о качестве.

С постоянным квантователем кодек использует для всех макроблоков один и тот же квантователь, указанный в опции `vqscale` (для libavcodec). Если Вы хотите рип наивысшего возможного качества, снова не взирая на битпоток, Вы можете использовать `vqscale=2`. Это приведёт к тому же битпотоку и PSNR (пику отношения сигнала к шуму), что и CBR с `vbitrate`=бесконечности и значением по умолчанию `vqmin`, равным 2.

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

При двупроходном кодировании первый проход создаст рип фильма так, как будто это был CBR, но сохранит лог свойств для каждого кадра. Эта информация затем будет использована во время второго прохода для принятия интеллектуальных решений о том, какой квантователь следует использовать. Во время быстрого движения или сцен с высокой детализацией с большой вероятностью будут использованы большие квантователи, а во время медленного движения или сцен с низкой детализацией — меньшие. Обычно количество движения играет существенно более важную роль, чем количество деталей.

Если Вы используете `vqscale=2`, то Вы теряете биты. Если Вы используете `vqscale=3`, то Вы не получаете рип наивысшего качества. Предположим, Вы делаете рип DVD, используя `vqscale=3`, результат получается 1800 Кбит. Если Вы сделаете двупроходное кодирование с `vbitrate=1800`, получившееся видео будет обладать лучшим качеством для того же битпотока.

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

Если размер не важен, хорошей отправной точкой для рипа очень высокого качества будет 2000 Кбит +/- 200 Кбит. Для видеоматериала с быстрым движением или высокой детализацией или просто если у Вас очень разборчивый глаз, Вы можете использовать 2400 или 2600. Для некоторых DVD Вы не заметите разницы на 1400 Кбит. Хорошей идеей является экспериментирование со сценами на разных битпотоках, чтобы почувствовать разницу.

Если Вашей целью является определённый размер, Вам нужно как-нибудь вычислить битпоток. Но перед этим, Вам нужно знать, сколько места нужно зарезервировать по аудио дорожку(и), так что Вам необходимо сперва извлечь их. Вы можете рассчитать битпоток с помощью следующей формулы: битпоток = (конечный_размер_в_МБайт - размер_звука_в_МБайт) * 1024 * 1024 / длительность_в_секундах * 8 / 1000. Например, для сжатия двухчасового фильма в 702 МБ CD, с 60 МБ аудио дорожкой, битпоток видео должен составлять: (702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 = 740 кбит/сек.

### Ограничения для эффективного кодирования

Из-за особенностей MPEG-подобного сжатия, существуют различные ограничения, которым Вы должны следовать для достижения максимального качества. MPEG разбивает видео на квадраты 16х16, называемые макроблоками. Каждый макроблок состоит из 4 блоков 8х8 с информацией о люме (интенсивности) и двух блоков 8х8 с информацией о хроме (цвете) половинного разрешения (один для красно-бирюзовой оси и другой для жёлто-голубой оси). Даже если ширина и высота Вашего фильма не кратны 16, кодер всё равно использует нужное количество макроблоков 16х16 для покрытия всей области картинки, дополнительная область будет впустую потрачена. Так что в интересах максимизации качества при фиксированном размере файла, не стоит использовать размеры, не кратные 16.

У большинства DVD также есть определённое подобие чёрных полос на краях. Если Вы их оставите, это может сильно повредить качество несколькими путями.

1. MPEG-подобное сжатие очень чувствительно к преобразованиям частотных интервалов, в частности, к дискретному косинусному преобразованию (DCT), которое аналогично преобразованию Фурье. Этот вид сжатия эффективен для представления образов и сглаженных переходов, но у него возникают проблемы с острыми краями. Для кодирования последних Вам нужно гораздо больше битов, а иначе у Вас появится артефакт, известный как ореолы.

   Частотные преобразования (DCT) выполняются независимо для каждого макроблока (на самом деле, для каждого блока), так что эта проблема возникает только в случае попадания острого края внутрь блока. Если Ваши чёрные поля возникают точно на границах, кратных 16 пикселям, это не проблема. Однако, чёрные полосы на DVD редко хорошо расположены, так что на практике Вам всегда придётся усекать стороны для избежания этих проблем.

В дополнение к преобразованиям частотных интервалов, MPEG-подобное сжатие использует векторы движения для отображения изменений от одного кадра к другому. Векторы движения, естественно, работают существенно менее эффективно для новых объектов, идущих от краёв картинки, поскольку они отсутствуют в предыдущих кадрах. Пока картинка простирается вплоть до края кодируемой области, у векторов движения не возникает проблем с движением объектов за пределы картинки. Однако, при наличии черных полей могут возникнуть проблемы:

1. Для каждого макроблока MPEG-подобное сжатие сохраняет вектор, определяющий какая часть предыдущего кадра должна быть скопирована в этот макроблок как основа для предсказания следующего кадра. Кодированию подлежит только оставшаяся разность. Если макроблок простирается до края картинки и содержит часть чёрной полосы, то векторы движения других частей картинки перепишут чёрную полосу. Это означает, что много битов нужно потратить либо на повторное чернение переписанной полосы, либо (что более вероятно) вектор движения не будет использован вовсе и все изменения для этого макроблока будут явно кодированы. Так или иначе, эффективность кодирования существенно уменьшается.

   Ещё раз, эта проблема возникает только в случае, если чёрные полосы не укладываются в границы, кратные 16.

2. Наконец, предположим, что у нас есть находящийся внутри картинки макроблок и объект движется в этот блок от края изображения. MPEG-подобное кодирование не может сказать "скопируй ту часть, что внутри картинки, но не чёрную полосу". Так что чёрная полоса также будет скопирована внутрь, в результате чего масса битов будет потрачена на кодирование части изображения, которое должно быть на месте полосы.

   Для случаев, когда всё изображение движется к краю кодируемой области, у MPEG есть специальные оптимизации для повторяющегося копирования пикселей к краю картинки, когда вектор движения идёт извне области кодирования. Эта возможность становится бесполезной, если у фильма есть чёрные полосы. В отличии от случаев 1 и 2, выравнивание границ до кратности 16 здесь не поможет.

3. Несмотря на то, что границы полностью чёрные и никогда не изменяются, существуют, как минимум, определённые накладные расходы, связанные с наличием большего числа макроблоков.

Благодаря всем этим причинам, рекомендуется полностью урезать чёрные полосы. Более того, если есть области шумов/искажений на краях картинки, то их урезание также поспособствует улучшению качества кодирования. Видеофилы, желающие сохранить оригинал как можно более точно, могут возражать против такого усечения; но если Вы не планируете кодировать при постоянном квантователе, качество, полученное при усечении, существенно превысит потери информации на краях.

### Усечение и масштабирование

Вспомните из предыдущего раздела, что конечный размер картинки, подлежащей кодированию, должен быть кратен 16 (как высота, так и ширина). Это может быть достигнуто усечением, масштабированием или комбинацией того и другого.

Есть несколько рекомендаций для усечения, которым необходимо следовать для избежания повреждения фильма. Обычный формат YUV, 4:2:0, сохраняет цветность (информацию о цвете) половинной дискретизации, т.е. цветность сохраняется в два раза реже в каждом направлении, чем яркостность (информация об интенсивности). Рассмотрите следующую диаграмму, где L обозначает точки дискретизации яркостности и C — цветности.

L | L | L | L | L | L | L | L
C | C | C | C
L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L
C | C | C | C
L | L | L | L | L | L | L | L

Как Вы видите, строки и столбцы изображения естественным образом идут в парах. Поэтому смещения и размеры усечения должны быть чётными числами. Иначе цветность перестанет правильно соответствовать яркостности. Теоретически возможно усечение с нечётными смещениями, но оно потребует переквантования цветности, что потенциально является операцией с потерей качества и не поддерживается фильтром усечения сторон crop.

Более того, видео с чересстрочной развёрткой дискретизируется следующим образом:

Верхнее поле | Нижнее поле
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
C | C | C | C |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | C | C | C | C
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
C | C | C | C |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | C | C | C | C
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L

Как Вы видите, структура повторяется только после 4 строк. Так что для чересстрочного видео Ваше y-смещение и высота усечения должны быть кратны 4.

Естественные разрешения DVD составляют 720x480 для NTSC и 720x576 для PAL, но существует флаг соотношения сторон, который указывает является ли видео полноэкранным (4:3) или широкоэкранным (16:9). Многие (если не большинство) широкоэкранных DVD не точно соответствуют формату 16:9 и могут быть как 1.85:1, так и 2.35:1 (кинематографический формат). Это означает, что в видео будут чёрные полосы, которые нужно усечь.

MPlayer предоставляет фильтр обнаружения усечения, который определяет прямоугольник, до которго нужно усечь (`-vf cropdetect`). Запустите MPlayer с `-vf cropdetect` и он выдаст настройки усечения для удаления полей. С целью получения точных параметров усечения, Вы должны проигрывать фильм достаточно долго для того, чтоб была использована вся область изображения.

Затем проверьте значения, полученные с помощью MPlayer, используя командную строку, выведенную `cropdetect`, и подстройте прямоугольник при необходимости. Фильтр `rectangle` может быть полезен, позволив Вам интерактивно менять прямоугольник усечения для Вашего фильма. Не забывайте следовать указанным выше руководствам по делимости, чтобы не испортить выравнивание цветности.

В ряде случаев масштабирование может быть нежелательным. Масштабирование по вертикальному направлению затруднено для чересстрочного видео, и если Вы хотите сохранить чересстрочность, Вам, как правило, будет необходимо воздерживаться от масштабирования. Если Вы не будете масштабировать, но всё ещё желаете размеры, кратные 16, то Вам придётся проводить излишнее усечение. Не проводите неполное усечение, поскольку чёрные полосы очень плохи для кодирования!

Поскольку MPEG-4 использует макроблоки 16х16, Вы должны убедиться, что каждое измерение кодируемого видео кратно 16; иначе Вы ухудшите качество, особенно на малых битпотоках. Вы можете сделать это, округлив ширину и высоту прямоугольника усечения до ближайшего меньшего целого, кратного 16. Как указано выше, при усечении Вам необходимо увеличить смещение по Y на половину разности старой и новой высоты, так что полученное видео будет браться из центра кадра. И из-за способа дискретизации DVD видео, убедитесь, что смещение есть чётное число. (Фактически, возьмите за правило никогда не использовать нечётные величины для любых параметров усечения или масштабирования видео.) Если Вы беспокоитесь из-за нескольких излишне отброшенных битов, возможно, Вы предпочтёте взамен масштабировать видео. Мы рассмотрим это ниже в нашем примере. В действительности, Вы можете доверить фильтру `cropdetect` сделать для Вас всё вышеупомянутое, т.к. у него есть необязательный параметр округления `round`, равный 16 по умолчанию.

Также будьте осторожны с "полутёмными" пикселями на краях. Убедитесь, что они тоже отрезаются, иначе Вы будете тратить биты, которым есть лучшее применение.

После всего выше сказанного и сделанного, Вы, вероятно, получите видео не точно формата 1:85.1 или 2.35:1, а с чем-то близким к этому. Вы можете вычислить новый коэффициент соотношения сторон вручную, но MEncoder предоставляет опцию для libavcodec, называемую `autoaspect`, которая сделает это для Вас. Ни в коем случае не увеличивайте размер этого видео с целью квадратизации пикселей, если Вы не желаете впустую потратить место на жёстком диске. Масштабирование должно выполняться при воспроизведении, и плеер использует коэффициент соотношения сторон, сохранённый в AVI, для определения правильного разрешения. К сожалению, не все плееры используют эту информацию автомасштабирования, поэтому Вам всё ещё может быть необходимо перемасштабирование.

### Выбор разрешения и битпотока

Если Вы не собираетесь кодировать в режиме постоянного квантователя, Вам нужно выбрать битпоток. Понятие битпотока очень просто: это среднее число битов, которые будут использованы для сохранения Вашего фильма, в секунду. Обычно битпоток измеряется в килобитах (1000 бит) в секунду. Размер Вашего фильма на диске есть битпоток, умноженный на длительность фильма, плюс небольшие накладные расходы (см. раздел контейнер AVI для примера). Остальные параметры, такие как масштабирование, усечение и т.п. не изменят размер файла, пока Вы также не измените битпоток!

Битпоток изменяется не пропорционально разрешению. То есть файл разрешением 320х240 с 200 кбит/сек не будет того же качества, что этот же фильм разрешением 640х480 и 800 кбит/сек! Для этого есть две причины:

1. Восприятие: Вы сильнее замечаете MPEG артефакты, если они больше! Артефакты возникают на масштабе блоков (8х8). Ваш глаз не увидит ошибки в 4800 маленьких блоков так же легко, как и в 1200 больших блоков (предполагая масштабирование обоих фильмов на полный экран).

2. Теоретическая: Когда Вы уменьшаете размер изображения, но продолжаете использовать блоки того же размера (8х8) для пространственных частотных преобразований, Вы перемещаете больше данных в высокочастотные полосы. Грубо говоря, каждый пиксель содержит больше деталей, чем раньше. Так что несмотря на то, что Ваша картинка с уменьшенным масштабом содержит 1/4 информации в пространственных направлениях, она всё ещё может содержать большУю часть информации в частотных интервалах (предполагая, что высокие частоты были не использованы в оригинальном 640х480 изображении).

Последние руководства рекомендовали выбор битпотока и разрешения, основываясь на приближении "бит на пиксель", но это обычно не верно из-за упомянутых выше причин. Похоже, лучшей оценкой является рост битпотока пропорционально квадратному корню разрешения, так что 320х240 и 400 кбит/сек должно быть сравнимо с 640х480 и 800 кбит/сек. Однако, это не было строго проверено теоретически или эмпирически. Кроме того, из-за существенного отличия фильмов по уровню шума, деталей, количества движения и т.п., тщетно давать общие рекомендации для "битов на длину диагонали" (аналог битов на пиксель, используя квадратный корень).

Таким образом, мы обсудили сложность выбора битпотока и разрешения.

#### Расчёт разрешения

Следующие шаги помогут Вам рассчитать разрешение для Вашего кодирования без слишком сильного искажения видео, учитывая несколько видов информации об исходном видео. Прежде всего, Вам необходимо рассчитать коэффициент соотношения сторон для кодированного видео: ARc = (Wc x (ARa / PRdvd )) / Hc

где:

- Wc и Hc — ширина и высота усечённого видео,

- ARa — коэффициент соотношения сторон изображения, обычно 4/3 или 16/9,

- PRdvd — отношение пикселей DVD, что равно 1.25=(720/576) для PAL DVD и 1.5=(720/480) для NTSC DVD.

Затем Вы можете рассчитать разрешение по X и Y, согласно определённому фактору качества сжатия (CQ): ResY = INT(SQRT( 1000*Битпоток/25/ARc/CQ )/16) * 16 и ResX = INT( ResY * ARc / 16) * 16.

Хорошо, но что такое CQ? CQ соответствует числу битов на пиксель и на кадр для кодирования. Грубо говоря, чем больше CQ, тем меньше вероятность увидеть артефакты кодирования. Однако, если у Вас есть заданный размер для Вашего фильма (например, 1 или 2 CD), есть ограниченное общее число битов, которые Вы можете потратить; поэтому важно найти хороший компромисс между сжимаемостью и качеством.

CQ зависит от битпотока, эффективности видеокодека и разрешения фильма. Обычно, в целях увеличения CQ, Вам нужно будет уменьшить размер фильма, при условии, что битпоток, вычисленный как функция конечного размера, и длина фильма постоянны. С MPEG-4 ASP кодеками, такими как Xvid и libavcodec, CQ меньше 0.18 обычно приводит к изображению с большим числом сегментов "квадратиками", из-за недостаточного числа битов для кодирования информации в каждом макроблоке. (MPEG4, как и многие другие кодеки, группирует пиксели в блоки по несколько пикселей для сжатия изображения; если битов не хватает, границы этих блоков заметны.) Следовательно, благоразумно выбрать CQ в диапазоне от 0.20 до 0.22 для рипа на 1 CD и 0.26-0.28 для рипа на 2 CD при использовании стандартных опций кодирования. Более продвинутые опции кодирования, такие как указанные для libavcodec и Xvid должны сделать возможным получение того же качества с CQ в диапазоне от 0.18 до 0.20 для рипа на 1 CD и 0.24-0.26 для рипа на 2 CD. Используя MPEG-4 AVC кодеки, такие как x264, Вы можете использовать CQ в диапазоне от 0.14 до 0.16 со стандартными опциями кодирования и должны суметь достичь таких низких значений, как 0.10 — 0.12 с помощью продвинутых опций кодирования x264.

Пожалуйста, обратите внимание, что CQ — лишь показательная величина, т.к. она зависит от кодируемого содержимого; CQ 0.18 может хорошо смотреться для Бергмана (Bergman), в отличии от такого фильма как Матрица (The Matrix), содержащего много сцен с быстрым движением. С другой стороны, бесполезно увеличивать CQ выше 0.30, т.к. Вы будете тратить биты без заметного увеличения качества. Так же обратите внимание, что, как было указано выше в данном руководстве, фильмам с низким разрешением (например, по сравнению с DVD) необходим более высокий CQ для того, чтоб они выглядели хорошо.

### Фильтрация

Изучение использования видео фильтров MEncoder важно для получения хороших результатов кодирования. Вся обработка видео выполняется посредством фильтров: усечение, масштабирование, подстройка цвета, удаление шума, увеличение чёткости, деинтерлейс (преобразование видео из чересстрочной развёртки в построчную), телесин, обратный телесин и удаление блочной сегментации — и это лишь некоторые из них. Вместе с огромным количеством поддерживаемых входных форматов, разнообразие фильтров, доступных в MEncoder, является одним из его основных достоинств над другими аналогичными программами.

Фильтры загружаются в цепочку с помощью опции -vf:

    -vf фильтр1=опции,фильтр2=опции,...

Большинство фильтров используют численные значения опций, разделённые двоеточиями, но синтаксис этих параметров различается у разных фильтров, так что читайте мануал для детальной информации о фильтрах, которые Вы желаете использовать.

Фильтры действуют на видео в порядке их загрузки. Например, следующая цепочка:

    -vf crop=688:464:12:4,scale=640:464

сперва усечёт область изображения до 688х464 с верхним левым углом (12,4), а затем масштабирует результат до 640х464.

Некоторые фильтры нужно загружать в начале цепочки фильтров (или рядом с ним) с целью получения преимущества от использования информации после видеодекодера, которая будет потеряна или искажена другими фильтрами. Важнейшими примерами являются: `pp` (постобработка, только при выполнении операций удаления блочной сегментации (deblocking) или увеличения чёткости краёв (deringing)), `spp` (другой фильтр постобработки, служащий для удаления артефактов MPEG), `pullup` (обратный телесин), и `softpulldown` (для преобразования мягкого телесина в жёсткий).

В общем случае, Вам следует делать настолько мало фильтрации, насколько это возможно, для того чтоб остаться близко к оригинальному DVD источнику. Усечение часто необходимо (как описано выше), но избегайте масштабирования видео. Несмотря на то, что уменьшение размера иногда предпочтительно использованию бОльших квантователей, нужно избегать и того, и другого: помните, что мы с самого начала решили обменять биты на качество.

Также не корректируйте гамму, контрастность, яркость и т.п.. То, что хорошо выглядит на Вашем мониторе, может плохо выглядеть на других. Эти коррекции должны выполняться только при воспроизведении.

Однако, есть одна вещь, которую Вы, быть может, захотите сделать — это пропустить видео через очень слабый фильтр удаления шумов, такой как `-vf hqdn3d=2:1:2`. Ещё раз, причиной этому является то, что этим битам можно найти лучшее применение: зачем тратить их, кодируя шум, если Вы просто можете вернуть этот шум в процессе воспроизведения? Увеличение параметров для `hqdn3d` дополнительно улучшит сжимаемость, но увеличив значения слишком сильно, Вы рискуете ухудшить различимость изображения. Рекомендованные выше значения (`2:1:2`) слегка консервативны; не бойтесь экспериментировать с более высокими значениями и самостоятельно оценивать результаты.

### Чересстрочная развёртка и телесин

Почти все фильмы снимаются при 24 fps [кадр/сек]. Поскольку в NTSC используется 30000/1001 fps, нужно выполнить некоторую обработку для такого 24 fps видео, чтобы оно корректно воспроизводилось при кадровой частоте NTSC. Этот процесс называется 3:2 пулдаун, обычно называемый телесин (поскольку пулдаун часто применяется в процессе показа телевизионного фильма, англ. telecine); и в упрощенном описании это работает путём замедления фильма до 24000/1001 fps и повтора каждого четвёртого кадра.

Однако, никакой специальной обработки не выполняется для видео на PAL DVD, которое воспроизводится при 25 fps. (Технически PAL может быть подверженным телесину, называемому 2:2 пулдаун, но на практике это не применяется). 24 fps фильм просто проигрывается на 25 fps. В результате фильм воспроизводится слегка быстрее, но если Вы не пришелец, то, вероятно, не заметите разницы. У большинства PAL DVD аудио скорректировано по высоте звука так, что, воспроизводясь при 25 fps, оно звучит нормально, несмотря на то, что аудиодорожка (и, следовательно, весь фильм) проигрываются на 4% быстрее, чем NTSC DVD.

Поскольку видео на PAL DVD не переделывается, Вам не стоит беспокоится о частоте кадров. У источника 25 fps и у Вашего рипа будет 25 fps. Однако, если Вы делаете рип NTSC DVD фильма, Вам, быть может, придётся выполнить обратный телесин.

Для фильмов, снятых на 24 fps, видео на NTSC DVD идёт либо с телесином 30000/1001, либо с построчной развёрткой 24000/1001 fps и предназначается для телесина на лету с помощью DVD плеера. С другой стороны, TV сериалы идут обычно только с чересстрочной развёрткой, но без телесина. Это не строгое правило: есть сериалы с чересстрочной развёрткой (например, Баффи, Убийца Вампиров [Buffy the Vampire Slayer]), в то время как другие представляют собой смесь построчной и чересстрочной развёртки (такие как Ангел [Angel] или 24).

Настоятельно рекомендуется прочитать раздел о работе с телесином и чересстрочной развёрткой в NTSC DVD для изучения способов обработки в разных ситуациях.

Однако, если Вы преимущественно делаете рипы фильмов, Вы, скорее всего, имеете дело с 24 fps видео либо с построчной развёрткой, либо с подвергнутым телесину; в последнем случае Вы можете использовать `pullup` фильтр: `-vf pullup,softskip`.

### Кодирование чересстрочного видео

Если Вы желаете кодировать фильм с чересстрочной развёрткой (NTSC или PAL видео), Вам нужно решить, будете ли Вы его преобразовывать в построчную развёртку или нет. Хотя такое преобразование (деинтерлейс) сделает Ваш фильм пригодным для дисплеев с построчной развёрткой, таких как компьютерные мониторы и проекторы, это будет иметь свою цену: частота полей уменьшится вдвое от 50 или 60000/1001 до 25 или 30000/1001 поля в секунду, и примерно половина информации в Вашем фильме будет потеряна в сценах со значительным движением.

Поэтому, если Вы кодируете для высококачественных архивных целей, не рекомендуется делать деинтерлейс. Вы всегда можете преобразовать развёртку фильма в процессе воспроизведения (при воспроизведении на устройствах с построчной развёрткой). Мощность современных компьютеров вынуждает плееры использовать фильтр деинтерлейса, что слегка ухудшает качество изображения. Но плееры будущего будут способны имитировать дисплей TV с чересстрочной развёрткой, выполняя деинтерлейс на полной частоте полей и интерполируя 50 или 60000/1001 кадров в секунду для чересстрочного видео.

С чересстрочным видео нужно работать особым образом:

1. Высота усечения и смещение по оси y должны быть кратны 4.

2. Любое вертикальное масштабирование должно выполняться в режиме чересстрочной развёртки.

3. Фильтры постобработки и удаления шума могут не работать как ожидается, только если Вы особо не позаботитесь об их применении к одному полю за раз, иначе они могут повредить видео при неверном использовании.

Учитывая вышесказанное, вот наш первый пример:

    mencoder захват.avi -mc 0 -oac lavc -ovc lavc -lavcopts \
    vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224

Обратите внимание на опции `ilme` и `ildct`.

### Замечания об аудио/видео синхронизации

Алгоритмы аудио/видео (A/V) синхронизации MEncoder были разработаны с целью восстановления файлов с повреждённой синхронизацией. Однако, в ряде случаев они могут привести к ненужному пропуску или повторению кадров и, возможно, к лёгкой A/V рассинхронизации корректных входных данных (конечно, проблемы A/V синхронизации возникают только при обработке или копировании аудиотрека при кодировании видео, что настоятельно рекомендуется). Поэтому Вы можете переключиться на базовую A/V синхронизацию с помощью опции `-mc 0` или разместить это в конфигурационном файле ~/.mplayer/mencoder, если Вы работаете только с хорошими источниками (DVD, TV-захват, высококачественные MPEG-4 рипы и т.п.), а не с повреждёнными файлами ASF/RM/MOV.

Если Вы хотите дополнительно защититься от странных пропусков и повторений кадров, Вы можете одновременно использовать опции `-mc 0` и `-noskip`. Это предотвратит любую A/V коррекцию, и будет копировать кадры один в один, так что Вы не сможете это использовать, если будете применять какие-либо фильтры, которые непредсказуемо добавляют или отбрасывают кадры, либо если у Вашего входного файла переменный битопоток! Поэтому использование `-noskip` в общем случае не рекомендуется.

Сообщалось о том, что так называемое трёхпроходное аудиокодирование, поддерживаемое MEncoder, вызывало A/V рассинхронизацию. Это наверняка произойдёт при использовании совместно с некоторыми фильтрами, поэтому сейчас не рекомендуется использовать трёхпроходный аудио режим. Эта возможность оставлена только для совместимости и для опытных пользователей, понимающих когда это безопасно, а когда нет. Если Вы ранее никогда не слышали о трёхпроходном режиме, забудьте даже о том, что мы его упоминали!

Также были сообщения об A/V рассинхронизации при кодировании со стандартного ввода (stdin) с помощью MEncoder. Не делайте этого! Всегда взамен используйте файл или CD/DVD и т.п. устройство.

### Выбор видеокодека

То, какой видеокодек лучше выбрать, зависит от нескольких факторов, таких как размер, качество, устойчивость к ошибкам, практичность и распространённость, многие из которых сильно зависят от личных предпочтений и технических ограничений.

- Эффективность сжатия: Достаточно очевидно, что большинство кодеков нового поколения разработаны для увеличения качества и степени сжатия. Поэтому, авторы данного руководства и многие другие люди полагают, что Вы не можете ошибиться

  Несмотря на это, будьте осторожны: для декодирования MPEG-4 AVC видео с DVD разрешением необходима быстрая машина (например, Pentium 4 свыше 1.5 ГГц или Pentium M свыше 1 ГГц).

  , выбирая MPEG-4 AVC кодеки (например, x264) вместо таких MPEG-4 ASP кодеков, как libavcodec MPEG-4 или Xvid. (Опытные разработчики кодеков могут быть заинтересованы в ознакомлении с точкой зрения Михаэля Нидермайера (Michael Niedermayer) "почему MPEG4-ASP отстой".) Аналогично, Вы должны получить лучшее качество с MPEG-4 ASP, по сравнению с MPEG-2 кодеками.

  Однако, новые кодеки, находящиеся в интенсивной разработке, могут страдать от ещё не замеченных ошибок, которые могут испортить кодирование. Просто это плата за использование передовых технологий.

  Более существенно то, что для начала использования нового кодека необходимо потратить время на изучение его опций так, чтобы Вы знали, что нужно подстраивать для достижения заданного качества изображения.

- Аппаратная совместимость: Обычно необходимо длительное время для включения поддержки последних видеокодеков в автономные видеоплееры. В итоге, большинство поддерживает только MPEG-1 (наподобие VCD, XVCD и KVCD), MPEG-2 (например, DVD, SVCD и KVCD) и MPEG-4 ASP (например, DivX, libavcodec LMP4 и Xvid) (Осторожно: обычно поддерживаются не все возможности MPEG-4 ASP). Пожалуйста, обратитесь к технической спецификации Вашего плеера (если она доступна) или к гугл (google) для детальной информации.

- Лучшее соотношение качества и времени кодирования: Кодеки, уже использующиеся определённое время (например, libavcodec MPEG-4 и Xvid) обычно сильно оптимизированы всевозможными остроумными алгоритмами и ассемблерным SIMD кодом. Поэтому они обладают тенденцией достижения лучшего соотношения качества к времени кодирования. Однако, у них могут быть некоторые очень продвинутые опции, которые, будучи включенными, сделают кодирование очень медленным ради несущественного выигрыша.

  Если Вам нужна высокая скорость, примерно придерживайтесь настроек видеокодека по умолчанию (хотя Вам стоит попробовать другие опции, упоминаемые в иных разделах данного руководства).

  Вы так же можете рассмотреть вариант использования многопоточного кодека, хотя это полезно только для пользователей машин с несколькими процессорами. libavcodec MPEG-4 позволяет это, но выигрыш в скорости ограничен и есть небольшой отрицательный эффект для качества картинки. Многопоточное кодирование Xvid, включаемое опцией `threads`, может использоваться для ускорения кодирования (на примерно 40-60% в типичных случаях) с небольшим ухудшением картинки или вообще без него. x264 также позволяет многопоточное кодирование, что обычно ускоряет процесс на 94% для каждого CPU ядра с уменьшением PSNR от 0.005 дБ до 0.01 дБ при типичных настройках.

- Личные предпочтения: Здесь всё становится почти неразумным: из-за тех же причин, по которым одни придерживаются DivX 3 в течении лет, в то время как новые кодеки уже творят чудеса, другие люди предпочитают Xvid или libavcodec MPEG-4 использованию x264.

  Вам нужно принимать решение самостоятельно; не слушайте советов людей, признающих только один кодек. Сделайте несколько образцов клипов из искомых источников и сравните разные опции кодирования и кодеки, с целью выбора того, что Вам наиболее подходит. Лучший кодек — это тот, которым Вы сами овладели, и который выглядит лучше всего для Ваших глаз на Вашем дисплее

  Один и тот же результат кодирования может не выглядеть таким же на чьём-либо другом мониторе или при воспроизведении с помощью другого декодера, так что проверяйте Ваши результаты кодирования на жизнеспособность, воспроизводя их в разных начальных условиях.

  !

Пожалуйста, обратитесь к разделу выбор кодеков и форматов контейнера для получения списка поддерживаемых кодеков.

### Аудио

Аудио — это гораздо более простая проблема: если Вы беспокоитесь о качестве, просто оставьте всё как есть. Даже потоки AC-3 5.1 не более чем 448 Кбит/с и они стоят каждого бита. Вы можете соблазниться перекодированием аудио в высококачественный Vorbis (он же ogg формат), но лишь то, что у Вас сегодня нет A/V приёмника для пропускания AC-3, не означает, что у Вас не будет его завтра. Для жизнеспособности Ваших DVD рипов в будущем, сохраняйте поток AC-3. Вы можете сохранить поток AC-3, копируя его непосредственно в видеопоток в процессе кодирования. Вы также можете извлечь AC-3 поток с целью мультиплексирования его в контейнеры наподобие NUT или Matroska (Матрёшка).

    mplayer файл_источника.vob -aid 129 -dumpaudio -dumpfile звук.ac3

сохранит в файл звук.ac3 аудиодорожку с номером 129 из файла файл_источника.vob (Обратите внимание: DVD VOB файлы обычно используют нумерацию аудио, отличную от стандартной, что означает, что аудиодорожка VOB 129 — это вторая аудиодорожка файла).

Но иногда у Вас действительно нет иного выбора, чем далее сжимать звук для того, чтоб больше битов могло быть потрачено на видео. Большинство людей предпочитают сжимать звук с помощью MP3 или Vorbis аудиокодеков. Последний является очень эффективным, но MP3 лучше поддерживается аппаратными плеерами, хотя эта тенденция меняется.

Не используйте `-nosound` при кодировании файла с аудио, даже если позже Вы будете отдельно кодировать и мультеплексировать аудио. Хотя это может работать в идеальных случаях, использование `-nosound` обычно скрывает ряд проблем в Ваших настройках кодирования в командной строке. Другими словами, наличие звуковой дорожки в процессе кодирования гарантирует Вам, что в случае отсутствия сообщений, подобных Слишком много аудиопакетов в буфере, у Вас будет получена правильная синхронизация.

Вам необходимо обработать звук с помощью MEncoder. Например, Вы можете копировать исходную звуковую дорожку в процессе кодирования с помощью `-oac copy` или преобразовать её в "лёгкий" 4 кГц моно WAV PCM с помощью `-oac pcm -channels 1 -srate 4000`. Иначе, в ряде случаев, будет создаваться видео файл, рассинхронизированный с аудио. Такие случаи происходят, когда число кадров видео исходного файла не совпадает с полной длиной кадров аудио, или когда были разрывы/сшивания потока, где появились пропущенные или излишние аудиокадры. Правильным решением подобных проблем является вставка тишины или усечение аудио в таких точках. Однако, MPlayer не может это сделать и если Вы демультиплексируете AC-3 аудио и кодируете его отдельным приложением (или создаёте дамп в PCM с помощью MPlayer), сшивания останутся нескорректированными и единственный испособ их исправить — пропускать/дублировать видеокадры в местах сшивки. Пока MEncoder видит аудио при кодировании видео, он может выполнять этот пропуск/дублирование (что обычно не вызывыет проблем, т.к. происходит при полностью чёрных кадрах или при смене сцен), но если MEncoder не доступно аудио, он просто будет обрабатывать все кадры "как есть" и они не будут совпадать с окончательным аудиопотоком, когда Вы, например, объедините аудио и видео дорожки в Matroska файл.

Прежде всего, Вам необходимо преобразовать DVD звук в WAV файл, который может использоваться аудиокодеком в качестве входных данных. Например:

    mplayer исходный_файл.vob -ao pcm:file=звук.wav
        -vc dummy -aid 1 -vo null

сохранит вторую аудиодорожку из файла исходный_файл.vob в файл звук.wav. Возможно, Вы захотите нормализовать звук перед кодированием, поскольку аудиодорожки DVD обычно записываются с маленькой громкостью. Вы можете использовать, например, утилиту normalize, доступную в большинстве дистрибутивов. Если Вы пользуетесь Window$, утилита BeSweet делает то же самое. Вы можете сжать в Vorbis или MP3. Например:

    oggenc -q1 звук.wav

кодирует звук.wav с качеством 1, что примерно эквивалентно 80 Кб/с и является минимальным качеством, при котором Вам нужно кодировать, если Вы заботитесь о качестве. Пожалуйста, обратите внимание, что MEncoder на данный момент не поддерживает мультиплексирование аудиопотоков Vorbis в выходной файл, поскольку он поддерживает только AVI и MPEG контейнеры для выходных файлов, использование каждого из которых может привести к проблемам A/V синхронизации с некоторыми плеерами, в случае когда AVI файл содержит VBR аудиопотоки наподобие Vorbis. Не беспокойтесь, в данном документе будет рассказано как Вы можете это сделать с помощью сторонних программ.

### Мультиплексирование

Теперь, после того как Вы кодировали видео, скорее всего, Вы захотите мультиплексировать его с одним или несколькими аудиопотоками в такие видео контейнеры как AVI, MPEG, Matroska или NUT. На данный момент встроенная поддержка вывода аудио и видео в MEncoder есть только для форматов контейнеров MPEG и AVI. Например:

    mencoder -oac copy -ovc copy -o выходной_фильм.avi \
        -audiofile исходный_звук.mp2 исходное_видео.avi

Это объединит видеофайл исходное_видео.avi и аудиофайл исходный_звук.mp2 в AVI файл выходной_фильм.avi. Эта команда работает с MPEG-1 слой I, II и III (более известный как MP3) аудио, WAV, а также с некоторыми иными форматами аудио.

MEncoder обладает экспериментальной поддержкой libavformat — библиотеки из проекта FFmpeg, поддерживающей мультиплексирование и демультиплексирование множества контейнеров. Например:

    mencoder -oac copy -ovc copy -o выходной_фильм.asf \
        -audiofile исходный_звук.mp2 исходное_видео.avi \
        -of lavf -lavfopts format=asf

Это сделает то же самое, что и предыдущий пример, но выходным контейнером будет ASF. Пожалуйста, обратите внимание, что эта поддержка весьма экспериментальна (но становится лучше c каждым днём), и будет работать только в случае компиляции MPlayer с включенной поддержкой libavformat (что означает, что в большинстве случаев бинарная версия из пакетов не будет работать).

#### Улучшение мультиплексирования и надёжности A/V синхронизации

Вы можете столкнуться с некоторыми серьёзными проблемами A/V синхронизации при попытке мультиплексирования Вашего видео с некоторыми аудиодорожками, где, как бы Вы не подбирали задержку аудио, никогда не получается правильная синхронизация. Это может происходить при использовании некоторых видеофильтров, пропускающих или дублирующих некоторые кадры, например фильтров обратного телесина. Настоятельно рекомендуется добавлять видеофильтр `harddup` в конце цепочки фильтров для избежания подобных проблем.

Без опции `harddup`, в случае когда MEncoder хочет дублировать кадр, он полагается на то, что мультиплексор расположит отметку в контейнере таким образом, что последний кадр будет повторен для достижения синхронизации без реальной записи кадра. С опцией `harddup`, MEncoder вместо этого просто ещё раз поместит последний кадр в цепочку фильтров. Это означает, что кодер получит точно такой же кадр дважды и сожмёт его. Это приведёт у несколько большему файлу, но избавит от проблем при демультиплексировании или ремультиплексировании с другими форматами контейнеров.

Также у Вас может не быть иного выбора, как использовать `harddup` с форматами контейнеров, которые не слишком плотно связаны с MEncoder, например, с форматами, поддерживаемыми с помощью libavformat, которые могут не поддерживать дублирование кадров на уровне контейнера.

#### Ограничения контейнера AVI

Хотя это самый широко распространённый формат контейнера после MPEG-1, он также обладает некоторыми существенными недостатками. Пожалуй, они наиболее очевидны в его избыточности. Для каждой цепочки AVI файла теряется 24 байта на заголовки и индекс. Это приводит к чуть более 5 МБ/час или 1.0-2.5% избыточности для 700 МБ фильма. Это не кажется большим, но может означать разницу между возможностью использования 700 кбит/сек или 714 кбит/сек в случаях, когда каждый бит на счету.

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

1. Может быть сохранено только содержимое с фиксированной частотой кадров. В частности, это особенно ограничивает, когда Ваш исходный материал смешанного содержимого: например, является смесью NTSC видео и киноматериала. В действительности, есть хаки, позволяющие сохранять содержимое с переменным fps в AVI, но они увеличивают (и без того большую) избыточность впятеро или более того и поэтому непрактичны.

2. Аудио в AVI файлах должно быть или с постоянным битпотоком (CBR) или с постоянным размером кадра (т.е. все кадры декодируются в одно и то же число выборок). К сожалению, самый эффективный кодек, Vorbis, не удовлетворяет ни одному из данных требований. Поэтому, если Вы планируете сохранять Ваш фильм в AVI, Вы должны использовать менее эффективный кодек, такой как MP3 или AC-3.

Сказав всё это, отметим, что MEncoder на данный момент не поддерживает вывод с переменным fps или Vorbis кодирование. Поэтому Вы можете не рассматривать всё это как ограничения, если MEncoder — это единственный инструмент, который Вы используете для кодирования. Однако, возможно использовать MEncoder только для кодирования видео и затем использовать внешние утилиты для кодирования аудио и мультиплексирования его в контейнер другого формата.

#### Мультиплексирование в контейнер Matroska (Матрёшка)

Matroska — это свободный, открытый стандарт формата контейнера, нацеленный на предоставление большого количества продвинутых возможностей, которые старые контейнеры (наподобие AVI) не поддерживают. Например, Matroska поддерживает аудиосодержимое с переменным битпотоком (VBR), переменные частоты кадров (VFR), разделы, файловые вложения, код обнаружения ошибок (EDC) и современные A/V кодеки, такие как "Продвинутое Аудио Кодирование" ("Advanced Audio Coding", AAC), "Vorbis" или "MPEG-4 AVC" (H.264), также не поддерживаемые AVI.

Утилиты, необходимые для создания Matroska файлов, сообща называются mkvtoolnix, и доступны для большинства Unix платформ, так же как и для Window$. Поскольку Matroska — открытый формат, Вы можете найти иные утилиты, которые лучше Вам подходят, но поскольку mkvtoolnix — наиболее общие и поддерживаются самой командой разработчиков Matroska, мы будем обсуждать только их использование.

Возможно, самым простым способом начать использовать Matroska является использование MMG, графической оболочки, поставляемой с mkvtoolnix. Следуйте руководству к mkvmerge GUI (mmg).

Также Вы можете мультиплексировать аудио и видео файлы используя командную строку:

    mkvmerge -o выходной_файл.mkv входное_видео.avi входное_аудио1.mp3 входное_аудио2.ac3

Это объединит видеофайл входное_видео.avi и два аудиофайла входное_аудио1.mp3 и входное_аудио2.ac3 в Matroska файл выходной_файл.mkv. Как было отмечено ранее, Matroska способна реализовать гораздо большее, например, множественные аудиодорожки (включая тонкую настройку аудио/видео синхронизации), разделы, субтитры, разбиение и т.д.. Пожалуйста, обратитесь к документации на эти приложения для деталей.

## Как работать с телесином и чересстрочной развёрткой на NTSC DVD

### Введение

Что такое телесин?

Если Вы не понимаете многое из того, что здесь написано, прочтите статью Википедии о телесине. Это понятное и разумно обширное описание того, что такое телесин.

Замечание о числах.

Многие документы, включая указанную выше статью, ссылаются на количество полей в секунду 59.94 для NTSC видео и соответствующие кадровые частоты 29.97 (для подверженного телесину и чересстрочного видео) и 23.976 (для построчного). Для простоты в ряде статей эти числа даже округляются до 60, 30 и 24 соответственно.

Строго говоря, все эти числа являются аппроксимациями. Чёрно-белое NTSC видео было точно с 60 полями в секунду, но позже была выбрана частота 60000/1001 для адаптации цветовой информации с одновременным сохранением совместимости с чёрно-белым телевидением. Цифровое NTSC видео (такое как на DVD) также с 60000/1001 полями в секунду. Отсюда возникла кадровая частота 30000/1001 кадр/сек для чересстрочного и телесиненного видео; построчное видео идёт с 24000/1001 кадр/сек.

Старые версии документации MEncoder и много архивных сообщений из списков рассылки ссылаются на 59.94, 29.97 и 23.976. Вся документация MEncoder была обновлена для использования дробных значений, и Вам так же следует их использовать.

`-ofps 23.976` — неправильно. Взамен нужно использовать `-ofps 24000/1001`.

Как используется телесин.

Всё видео, предназначенное для просмотра на NTSC телевидении должно быть с 60000/1001 полями в секунду. Фильмы, сделанные для показа на TV часто снимаются непосредственно при 60000/1001 полей в секунду, но большинство кино снимается на 24 или 24000/1001 кадрах в секунду. В процессе создания DVD с кинофильмом, видео преобразуется для телевидения с помощью процесса, называемого телесин.

В действительности, видео никогда не хранится на DVD с 60000/1001 полями в секунду. Для видео, оригинально являющегося 60000/1001, каждая пара полей объединяется для формирования кадра, приводя к 30000/1001 кадрам в секунду. Затем аппаратные DVD плееры читают флаг, включенный в видеопоток, для определения того какие, чётные или нечётные строки должны формировать первый кадр.

Обычно, содержимое с частотой кадров 24000/1001 остаётся неизменным при кодировании на DVD и DVD плеер должен выполнить телесин на лету. Однако, иногда видео подвергается телесину до записи на DVD; и хотя оно изначально было с 24000/1001 кадр/сек, видео становится с 60000/1001 полями в секунду. Когда оно сохраняется на DVD, пары полей объединяются для формирования 30000/1001 кадров в секунду.

При рассмотрении отдельных кадров, полученных из 60000/1001 полей в секунду, телесиненных или наоборот, чересстрочная развёртка чётко видна в случае, если есть какое-либо движение, поскольку одно поле (скажем, с чётными номерами строк) отображает момент времени на 1/(60000/1001) секунды позже, чем другое поле. Воспроизведение чересстрочного видео на компьютере выглядит скверно по двум причинам: монитор обладает более высоким разрешением и видео показывается покадрово, вместо отображения по полям.

Замечания:

- Этот раздел применим только к NTSC DVD, а не к PAL.

- Примеры командных строк MEncoder в данном разделе не предназначены для реального использования. Они просто являются минимально необходимым требованием для кодирования соответствующей категории видео. То, как сделать хорошие DVD рипы или тонко настроить libavcodec для достижения максимального качества, не входит в рамки данного раздела; обратитесь к другим разделам Руководства по кодированию с MEncoder.

- Есть несколько сносок, специфичных для данного руководства, обозначенных следующим образом: [1]

### Как распознать тип Вашего видео

#### Построчная развёртка

Видео с построчной развёрткой изначально записывается на 24000/1001 fps и сохраняется на DVD без чередования.

При воспроизведении DVD с построчной развёрткой в MPlayer, MPlayer выведет следующую строку при начале воспроизведения фильма:

    demux_mpg: обнаружено 24000/1001 кадра/сек NTSC содержимое с построчной развёрткой,
    переключаю частоту кадров.

Начиная с этого момента, demux_mpg никогда не должен сообщать о том, что найдено "30000/1001 кадров/сек NTSC содержимое".

При просмотре видео с построчной развёрткой Вы не должны никогда наблюдать чересстрочность. Однако, будьте осторожны, поскольку иногда есть небольшая примесь телесина там, где Вы этого не ожидаете. Мной наблюдались DVD с TV-шоу, у которых была одна секунда телесина при каждой смене сцен или в случайных на вид местах. Однажды я видел DVD, у которого одна половина была с построчной развёрткой, а вторая — телесиненной. Если Вы желаете быть действительно уверенными, Вы можете просканировать весь фильм:

    mplayer dvd://1 -nosound -vo null -benchmark

Использование `-benchmark` позволяет MPlayer воспроизводить фильм столь быстро, сколь это возможно; тем не менее, в зависимости от Вашего железа, это может занять некоторое время. Всякий раз, когда demux_mpg будет сообщать об изменении частоты кадров, строка прямо над сообщением покажет Вам время, при котором произошло изменение.

Иногда видео на DVD с построчной развёрткой называют "мягким телесином", поскольку предполагается, что телесин будет выполнен DVD плеером.

#### Телесин

Телесиненное видео изначально снимается на 24000/1001 кадр/сек, но подвергается телесину до записи на DVD.

MPlayer не (всегда) сообщает об изменении частоты кадров при воспроизведении телесиненного видео.

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

1.     mplayer dvd://1

2. Переместитесь в часть фильма с движением.

3. Используйте клавишу . для покадровой перемотки вперёд.

4. Наблюдайте за последовательностью кадров с чересстрочной и построчной развёрткой. Если Вы видите следующую структуру: ЧЧЧПП,ЧЧЧПП,ЧЧЧПП,... (где Ч — чересстрочные, а П — построчные кадры), значит видео телесиненное. Если Вы наблюдаете иную структуру, видео может быть телесиненным, используя какой-либо нестандартный метод; MEncoder не может преобразовать без потерь нестандартный телесин в построчную развёртку. Если Вы не видите вообще никакой структуры, значит наиболее вероятно, что видео с чересстрочной развёрткой.

Иногда подверженное телесину видео на DVD называют "жестким телесином". Поскольку жесткий телесин уже имеет 60000/1001 полей в секунду, DVD проигрыватель, воспроизводя его, не делает никаких преобразований.

Другой способ выяснить, был Ваш источник подвержен телесину или нет, заключается в воспроизведении исходного материала с опциями командной строки `-vf pullup` и `-v`, чтобы увидеть, как `pullup` сопоставляет кадры. Если источник был телесиненным, Вы должны увидеть в консоли 3:2 структуру с чередующимися 0+.1.+2 и 0++1. Преимущество этой техники состоит в том, что не требуется просматривать исходный материал для его идентификации, это может быть полезно для автоматизации процедуры кодирования или выполнения вышеуказанной процедуры удаленно через медленное соединение.

#### Чересстрочная развертка

Чересстрочное видео изначально снималось на 60000/1001 полями в секунду, и сохранялось на DVD с 30000/1001 кадрами в секунду. Эффект чересстрочности (часто называемый "гребёнкой") — результат объединения пары полей в кадры. Поля сдвинуты друг относительно друга на 1/(60000/1001) секунды, и, когда отображаются одновременно, разница заметна.

Как и с подверженным телесину видео, MPlayer не должен сообщать о каких-либо изменениях частоты кадров при воспроизведении чересстрочного содержимого.

Внимательно, кадр за кадром (при помощи клавиши .) рассматривая чересстрочное видео, Вы увидите, что каждый отдельный кадр — чересстрочный.

#### Смешанные построчная развертка и телесин

Все видео со "смешанными построчной разверткой и телесином" изначально было с 24000/1001 кадрами в секунду, но некоторые его части оказались подвержены телесину.

Когда MPlayer воспроизводит эту категорию, он будет (как правило, периодически) переключаться между "30000/1001 кадров/сек NTSC содержимым" и "24000/1001 кадра/сек NTSC содержимым с построчной развёрткой". Смотрите конец вывода MPlayer, чтобы увидеть эти сообщения.

Вам следует проверить разделы с "30000/1001 кадров/сек NTSC содержимым", чтобы убедиться, что видео действительно телесиненное, а не просто чересстрочное.

#### Смешанные построчная и чересстрочная развертки

В содержимом со "смешанными построчной и чересстрочной развертками", построчное и чересстрочное видео переплетаются друг с другом.

Эта категория выглядит также, как и "смешанные построчная развертка и телесин", до тех пор, пока не проверите разделы 30000/1001 кадр/сек и не увидите, что структура телесина отсутствует.

### Как кодировать каждую категорию

Как уже было сказано выше, последующие примеры командных строк MEncoder не означают, что надо использовать именно их; они всего лишь примеры минимального набора параметров для правильного кодирования каждой категории.

#### Построчная развертка

Видео с построчной разверткой не требует специальной обработки для кодирования. Единственный нужный Вам для уверенности параметр — это `-ofps 24000/1001`. В противном случае MEncoder будет пытаться кодировать с 30000/1001 кадрами в секунду и создаст дублирующиеся кадры.

    mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001

Частый случай, однако, когда видео, выглядящее построчным, на самом деле содержит очень короткие подверженные телесину части. Если Вы не уверены, безопаснее будет считать его как видео со смешанными построчной разверткой телесином. Потеря скорости невелика[3].

#### Телесин

Телесин может быть обращён для получения оригинального 24000/1001 содержимого при помощи процесса, называемого обратный телесин. MPlayer содержит несколько фильтров для выполнения этого; лучший из них, `pullup` описан в разделе смешанные построчная развертка и телесин.

#### Чересстрочная развертка

На практике в большинстве случаев невозможно получить полностью построчное видео из чересстрочного содержимого. Единственный способ сделать это без потери половины вертикального разрешения - это удвоить частоту кадров и попытаться "угадать", что должно составить соответствующие линии каждого поля (этот способ имеет недостатки, смотрите метод 3).

1. Кодируйте видео в чересстрочной форме. Обычно это наносит вред способности кодировщика хорошо сжимать, но libavcodec имеет два параметра специально для чуть лучшего сохранения чересстрочного видео: `ildct` и `ilme`. К тому же, настоятельно рекомендуется использовать `mbd=2`[2], потому что при этом макроблоки в местах без движения будут кодированы как нечересстрочные. Имейте в виду, что `-ofps` здесь НЕ нужна.

       mencoder dvd://1 -oac copy -ovc lavc -lavcopts ildct:ilme:mbd=2

2. Используйте фильтр деинтерлейсинга перед кодированием. Существует несколько таких фильтров на выбор, каждый имеет свои преимущества и недостатки. Обратитесь к `mplayer -pphelp` и `mplayer -vf help` для определения доступных (grep по "deint"), прочтите Сравнение фильтров деинтерлейсинга Майкла Нидермайера (Michael Niedermayer), и поищите в списках рассылки MPlayer, чтобы найти множество обсуждений различных фильтров. И опять, частота кадров не меняется, поэтому никаких `-ofps`. к тому же деинтерлейсинг следует производить после обрезания [1] и до масштабирования.

       mencoder dvd://1 -oac copy -vf yadif -ovc lavc

3. К сожалению, эта опция сбоит с MEncoder; она должна хорошо работать с MEncoder G2, но его пока нет. Вы можете столкнуться с крахами. Как бы то ни было, назначение опции `-vf tfields` — создать полный кадр из каждого поля, что делает частоту кадров равной 60000/1001. Преимущество этого подхода в том, что никакие данные не теряются; однако, т.к. каждый кадр получается только из одного поля, недостающие строки должны как-то интерполироваться. Не существует очень хороших методов генерации недостающих данных, поэтому результат будет выглядеть несколько похожим на применение некоторых фильтров деинтерлейсинга. Генерация недостающих строк также создает другие проблемы, просто потому что количество данных удваивается. Таким образом, для сохранения качества требуются более высокие значения битпотока, и больше ресурсов процессора используется как для кодирования, так и для декодирования. `tfields` имеет несколько различных опций, определяющих способ создания недостающих строк каждого кадра. Если выбрали этот способ, обратитесь к руководству и выберите ту опцию, которая лучше подходит для Вашего материала. Имейте в виду, что при использовании `tfields` Вы должны указать как `-fps`, так и `-ofps`, установив им значение, равное удвоенной частоте исходного материала.

       mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \
           -fps 60000/1001 -ofps 60000/1001

4. Если планируете сильно уменьшать размер изображения, можно извлекать и декодировать только одно поле из двух. Конечно, Вы потеряете половину вертикального разрешения, но если планируется уменьшать размер как минимум вдвое, потеря будет не сильно заметна. В результате получится построчной развёртки файл с 30000/1001 кадрами в секунду. Процедура следующая: `-vf field`, затем обрезание [1] и масштабирование соответствующим образом. Помните, что потребуется скорректировать масштабирование для компенсации уменьшенного вдвое вертикального разрешения.

       mencoder dvd://1 -oac copy -vf field=0 -ovc lavc

#### Смешанные построчная развертка и телесин

Для преобразования видео со смешанными построчной разверткой и телесином в полностью построчное необходимо к подверженным телесину частям применить обратный телесин. Есть три описанных ниже способа добиться этого. Заметьте, что следует всегда применять обратный телесин до какого-либо масштабирования; за исключением случая, когда Вы точно знаете, что делаете, выполняйте обратный телесин также до обрезания [1]. `-ofps 24000/1001` здесь необходима, поскольку видео на выходе будет с 24000/1001 кадрами в секунду.

- `-vf pullup` разработана для обратного телесина материала, телесину подверженного, оставляя построчные данные как есть. Для правильной работы после `pullup` должен следовать фильтр `softskip`, иначе произойдет крах MEncoder. `pullup` является, однако, самым чистым и точным методом, доступным для кодирования и телесина, и "смешанного построчного с телесином".

      mencoder dvd://1 -oac copy -vf pullup,softskip \
          -ovc lavc -ofps 24000/1001

- `-vf filmdint` похожа на `-vf pullup`: оба фильтра пытаются сопоставить пару полей для формирования полного кадра. Однако `filmdint` будет производить деинтерлейсинг одиночных полей, которым не может найти пару, в то время как `pullup` попросту их отбросит. Вдобавок фильтры имеют различные алгоритмы анализа, и filmdint имеет тенденцию к более частому нахождению соответствий. Какой фильтр будет лучше работать зависит от исходного видео и личного вкуса; не бойтесь экспериментировать с тонкой настройкой опций фильтров, если у Вас возникли проблемы с любым из них (подробности смотрите на странице руководства man). Для большинства качественного исходного видео, однако, оба фильтра работают достаточно хорошо, так что начинать работать можно с любым из них.

      mencoder dvd://1 -oac copy -vf filmdint -ovc lavc -ofps 24000/1001

- Более старый метод заключается не в применении обратного телесина к телесиненным частям, а, наоборот, в телесине не подверженных телесину частей и последующем применении обратного телесина ко всему видео. Звучит запутанно? softpulldown — это фильтр, проходящий по видео и делающий телесиненным весь файл. Если следом за softpulldown указать либо `detc`, либо `ivtc`, финальный результат будет полностью построчным. `-ofps 24000/1001` необходима.

      mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001

#### Смешанные построчная и чересстрочная развертки

Существует две опции для этой категории, каждая из которых — это компромисс. Вы должны выбрать, исходя из продолжительности/положения каждого типа.

- Рассматривайте видео как построчное. Чересстрочные части будут выглядеть чересстрочными, и потребуется удаление некоторых из чересстрочных полей, что даст в результате некоторое скачкообразное дрожание. Вы можете использовать фильтр постобработки, если хотите, но это может несколько ухудшить построчные части.

  Эта опция определенно не должна использоваться, если Вы хотите со временем отображать видео на чересстрочном устройстве (с помощью TV карты, например). Если у Вас есть чересстрочные кадры в видео с 24000/1001 кадрами в секунду, к ним, как и к прогрессивным, будет применен телесин. Половина их чересстрочных "кадров" будут отображаться с длительностью трех полей (3/(60000/1001) секунд), давая в результате неприятно выглядящий эффект "прыжка назад во времени". Даже если Вы пробуете это, Вы должны использовать фильтр деинтерлейсинга, такой как `lb` или `l5`.

  Для отображения на построчном дисплее это тоже может быть плохой идеей. Будут отбрасываться пары последовательных чересстрочных полей, приводя к разрывам, которые могут быть заметнее, чем при использовании второго метода, отображающего некоторые построчные кадры дважды. Чересстрочное видео с 30000/1001 кадрами в секунду уже несколько прерывисто, потому что в реальности оно должно отображаться с 60000/1001 полями в секунду, так что дублирующиеся кадры не так сильно выделяются.

  Так или иначе, лучше всего проанализировать Ваше содержимое и как Вы его собираетесь показывать. Если видео на 90% построчное и Вы никогда не будете показывать его на TV, Вам следует отдать предпочтение построчному варианту. Если оно только наполовину построчное, Вы, возможно, захотите кодировать его, как если бы оно было чересстрочным.

- Считайте его чересстрочным. Некоторые кадры построчной части потребуют дублирования, что даст в результате некоторое скачкообразное дрожание. И снова, фильтры деинтерлейсинга могут несколько ухудшить построчные части.

### Примечания

1. Об усечении сторон:

   Видеоданные на DVD хранятся в формате, называемом YUV 4:2:0. В YUV видео, люма ("яркость") и хрома ("цвет") хранятся отдельно. Поскольку человеческий глаз отчасти менее чувствителен к цвету, чем к яркости, в YUV 4:2:0 изображении присутствует только один цветностный пиксел на четыре яркостных. В изображении с построчной развёрткой каждый квадрат из четырёх яркостных пикселов (два на два) имеют один общий цветностный пиксел. Вы должны обрезать построчный YUV 4:2:0 до чётных размеров и использовать чётные смещения. Например, `crop=716:380:2:26` — правильно, а `crop=716:380:3:26` — нет.

   Когда имеете дело с чересстрочным YUV 4:2:0, ситуация чуть более сложная. Вместо разделения одного цветностного пиксела четырьмя яркостными пикселами в кадре, каждые четыре яркостных пиксела каждого поля разделяют цветностный пиксел. Когда поля объединены в кадр, каждая строка имеет высоту в один пиксел. Теперь, вместо квадрата из четырех яркостных пикселов мы имеем два соседних пиксела, а два других расположены на две строки ниже. Два яркостных пиксела следующей строки принадлежат другому полю, и, поэтому, разделяют другой пиксел цветности с двумя пикселами на две строки дальше. Вся эта неразбериха требует, чтобы вертикальные размеры и смещения обрезания были кратны четырем. Горизонтальные могут оставаться четными.

   Для телесиненного видео я рекомендую производить обрезание после обратного телесина. Так как видео построчное, достаточно обрезать только по четным размерам. Если же действительно хотите получить небольшую прибавку к скорости, которую может дать обрезка, Вам придется производить усечение с вертикальными размерностями, кратными четырем. В противном случае фильтр обратного телесина не будет иметь правильных данных.

   Для чересстрочного (не подверженного телесину) видео, Вы всегда должны производить усечение с вертикальными размерностями, кратными четырем, если только не используете `-vf field` перед усечением.

2. О параметрах кодирования и качестве:

   Если я здесь рекомендую `mbd=2`, это еще не значит, что эту опцию не следует использовать где-либо еще. Совместно с `trell`, `mbd=2` является одной из двух опций libavcodec, которые значительно увеличивают качество. Вам всегда следует использовать как минимум эти две, за исключением случая, когда потеря скорости кодирования недопустима (например, кодирование в реальном времени). Есть множество других libavcodec опций, улучшающих качество (и замедляющих кодирование), но их описание выходит за рамки этого документа.

3. О производительности pullup:

   Использование `pullup` (совместно с `softskip`) для видео с построчной развёрткой вполне безопасно и обычно является хорошей идеей, если только про источник не известно достоверно, что он полностью построчный. Потеря скорости мала в большинстве случаев. В минимальном варианте кодирования `pullup` замедляет MEncoder на 50%. Добавление обработки звука и продвинутых `lavcopts` опций затмевает эту разницу, уменьшая падение производительности от использования `pullup` до 2%.

## Кодирование семейством кодеков libavcodec

libavcodec предоставляет возможность простого кодирования в множество интересных видео и аудио форматов. Вы можете кодировать следующими кодеками (более или менее свежий список):

### Видео кодеки libavcodec

Название видео кодека | Описание
--- | ---
mjpeg | Motion JPEG
ljpeg | JPEG без потери качества
jpegls | JPEG LS
targa | Targa рисунок
gif | GIF рисунок
bmp | BMP рисунок
png | PNG рисунок
h261 | H.261
h263 | H.263
h263p | H.263+
mpeg4 | ISO стандарт MPEG-4 (DivX, Xvid совместимый)
msmpeg4 | вариант пре-стандарта MPEG-4 от MS, v3 (он же DivX3)
msmpeg4v2 | вариант пре-стандарта MPEG-4 от MS, v2 (используемый в старых ASF файлах)
wmv1 | Windows Media Video, версия 1 (он же WMV7)
wmv2 | Windows Media Video, версия 2 (он же WMV8)
rv10 | RealVideo 1.0
rv20 | RealVideo 2.0
mpeg1video | MPEG-1 видео
mpeg2video | MPEG-2 видео
huffyuv | сжатие без потерь
ffvhuff | huffyuv без потерь, модифицированный FFmpeg
asv1 | ASUS Видео v1
asv2 | ASUS Видео v2
ffv1 | видео кодек без потерь из FFmpeg
svq1 | Sorenson видео 1
flv | Sorenson H.263 используемый в Flash Видео
flashsv | Flash Screen Video
dvvideo | Sony Digital Video
snow | экспериментальный кодек FFmpeg, основанный на вейвлетах
zmbv | Zip Motion Blocks Video
dnxhd | AVID DNxHD

Первый столбец содержит названия кодеков, которые следует указывать после `vcodec` опции, например: `-lavcopts vcodec=msmpeg4`

Пример с MJPEG сжатием:

    mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

### Аудио кодеки libavcodec

Название аудио кодека | Описание
--- | ---
ac3 | Dolby Digital (AC-3)
adpcm_* | Форматы Adaptive PCM, смотрите дополнительную таблицу
flac | Free Lossless Audio Codec (FLAC)
g726 | G.726 ADPCM
libamr_nb | 3GPP Adaptive Multi-Rate (AMR) узкополосный
libamr_wb | 3GPP Adaptive Multi-Rate (AMR) широкополосный
libfaac | Advanced Audio Coding (AAC) - используя FAAC
libgsm | ETSI GSM 06.10 full rate
libgsm_ms | Microsoft GSM
libmp3lame | MPEG-1 audio layer 3 (MP3) - используя LAME
mp2 | MPEG-1 audio layer 2 (MP2)
pcm_* | PCM форматы, смотрите дополнительную таблицу
roq_dpcm | Id Software RoQ DPCM
sonic | экспериментальный кодек от FFmpeg с потерями (lossy)
sonicls | экспериментальный кодек от FFmpeg без потерь (lossless)
vorbis | Vorbis
wmav1 | Windows Media Audio v1
wmav2 | Windows Media Audio v2

Первый столбец содержит названия кодеков, которые следует указывать после `acodec` опции, например: `-lavcopts acodec=ac3`

Пример с AC-3 сжатием:

    mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy

В отличие от видео кодеков libavcodec, ее аудио кодеки не очень разумно используют отданные им биты, в силу неудачной реализации некоторой минимальной психоакустической модели (если она вообще есть), которая является характерной чертой большинства остальных реализаций кодеков. Однако заметьте, что все эти аудио кодеки очень быстры и работают прямо из коробки везде, где MEncoder скомпилирован с libavcodec (а почти всегда так оно и есть), и не зависят от внешних библиотек.

#### Дополнительная таблица PCM/ADPCM форматов

Название PCM/ADPCM кодека | Описание
--- | ---
pcm_s32le | signed 32-bit little-endian
pcm_s32be | signed 32-bit big-endian
pcm_u32le | unsigned 32-bit little-endian
pcm_u32be | unsigned 32-bit big-endian
pcm_s24le | signed 24-bit little-endian
pcm_s24be | signed 24-bit big-endian
pcm_u24le | unsigned 24-bit little-endian
pcm_u24be | unsigned 24-bit big-endian
pcm_s16le | signed 16-bit little-endian
pcm_s16be | signed 16-bit big-endian
pcm_u16le | unsigned 16-bit little-endian
pcm_u16be | unsigned 16-bit big-endian
pcm_s8 | signed 8-bit
pcm_u8 | unsigned 8-bit
pcm_alaw | G.711 A-LAW
pcm_mulaw | G.711 μ-LAW
pcm_s24daud | signed 24-bit D-Cinema Audio формат
pcm_zork | Activision Zork Nemesis
adpcm_ima_qt | Apple QuickTime
adpcm_ima_wav | Microsoft/IBM WAVE
adpcm_ima_dk3 | Duck DK3
adpcm_ima_dk4 | Duck DK4
adpcm_ima_ws | Westwood Studios
adpcm_ima_smjpeg | SDL Motion JPEG
adpcm_ms | Microsoft
adpcm_4xm | 4X Technologies
adpcm_xa | Phillips Yellow Book CD-ROM eXtended Architecture
adpcm_ea | Electronic Arts
adpcm_ct | Creative 16->4-bit
adpcm_swf | Adobe Shockwave Flash
adpcm_yamaha | Yamaha
adpcm_sbpro_4 | Creative VOC SoundBlaster Pro 8->4-bit
adpcm_sbpro_3 | Creative VOC SoundBlaster Pro 8->2.6-bit
adpcm_sbpro_2 | Creative VOC SoundBlaster Pro 8->2-bit
adpcm_thp | Nintendo GameCube FMV THP
adpcm_adx | Sega/CRI ADX

### Опции кодирования libavcodec

В идеале, Вы, наверное, хотели бы иметь возможность просто сказать кодировщику переключиться на "высокое качество" и начать кодирование. Это было бы замечательно, но, к сожалению, трудно реализуемо, поскольку различные опции кодирования, в зависимости от исходного материала, дают в результате различное качество. Так происходит потому, что сжатие зависит от визуальных свойств видео. Например, аниме и живая съемка имеют сильно отличающиеся свойства и, поэтому, требуют разные опции для получения оптимального результата. Хорошая новость состоит в том, что некоторые опции, такие как `mbd=2`, `trell` и `v4mv`, никогда не следует опускать. Детальное описание основных опций кодирования смотрите ниже.

Опции для настройки:

- vmax_b_frames: хороши 1 или 2, в зависимости от фильма. Заметьте, если хотите, чтобы Ваш фильм декодировался DivX5, Вы должны активировать поддержку закрытых GOP, используя опцию `cgop` libavcodec, но также должны деактивировать определение сцен, что не является хорошей идеей, поскольку несколько вредит эффективности.

- vb_strategy=1: помогает в высокодинамичных сценах. Для некоторых видео файлов vmax_b_frames может повредить качеству, но vmax_b_frames=2 вместе с vb_strategy=1 поможет в этом случае.

- dia: диапазон поиска движения. Большие значения лучше и медленнее. Отрицательные значения — это совершенно другая шкала. Хорошими значениями являются -1 для быстрого кодирования или 2-4 — для медленного.

- predia: предпроход поиска движения. Не так важен, как dia. Хорошими являются значения от 1 (по умолчанию) до 4. Требует preme=2, чтобы быть действительно полезным.

- cmp, subcmp, precmp: Функция сравнения для поиска движения. Поэкспериментируйте со значениями 0 (по умолчанию), 2 (hadamard), 3 (dct), и 6 (соотношение сигнал-шум). 0 — самый быстрый и достаточен для precmp. В случае cmp и subcmp, 2 является хорошим для аниме, а 3 для живой съемки. 6 может оказаться лучше, а может и нет, но он медленнее.

- last_pred: Количество предсказателей движения, берущихся из предыдущего кадра. 1-3 или около того помогут Вам ценой небольшой потери в скорости. Большие значения медленны и не дают дополнительного улучшения.

- cbp, mv0: Контролирует выбор макроблоков. Незначительное снижение скорости с небольшим приростом в качестве.

- qprd: адаптивное квантование, основанное на сложности макроблока. Может сделать лучше или хуже в зависимости от видео и других опций. Она также может привести к появлению артефактов, если Вы не установите vqmax в некоторое разумно малое значение (хорошо — 6, может быть даже 4); vqmin=1 также может помочь.

- qns: очень медленно, особенно в комбинации с qprd. Эта опция укажет кодировщику минимизировать шум от артефактов сжатия вместо создания закодированного видео, полностью соответствующего исходному. Не используйте ее, если только не перепробовали настроить все, что было возможно, а результат все таки недостаточно хорош.

- vqcomp: Настраивает управление битпотоком. Какие значения являются хорошими, зависит от фильма. Если хотите, можете без опаски оставить значение по умолчанию. Уменьшение vqcomp отдает больше бит в сцены с низкой сложностью, увеличение его передает биты в очень сложные сцены (по умолчанию: 0.5, диапазон: 0-1. рекомендуемый диапазон: 0.5-0.7).

- vlelim, vcelim: Устанавливает порог отбрасывания одиночного коэффициента для яркостной и цветностной плоскостей. Они кодируются независимо во всех MPEG-похожих алгоритмах. Идея этих опций заключается в использованию некоторой хорошей эвристики для определения момента, когда изменения в блоке ниже указанного Вами порога, и что его стоит кодировать как "блок без изменений". Это сохраняет биты и, возможно, ускоряет кодирование. vlelim=-4 и vcelim=9 выглядят неплохими для живой съемки, но, скорее всего, не помогут для аниме; при кодировании анимации Вам, возможно, следует оставить эту опцию неизменной.

- qpel: Четверьтпиксельная оценка движения. По-умолчанию, MPEG-4 использует полупиксельную точность для поиска движения, следовательно, эта опция вносит дополнительные накладные расходы, поскольку сохраняет больше информации в закодированном файле. Улучшение/ухудшение степени сжатия зависит от фильма, но обычно эта опция не очень эффективна для аниме. qpel всегда вносит значительный вклад в CPU время декодирования (+25% на практике).

- psnr: не влияет на сам процесс кодирования, но выводит в файл тип/размер/качество каждого кадра, а также итоговый PSNR (Peak Signal to Noise Ratio, пиковое отношения сигнала к шуму) в конце процесса.

Опции, с которыми играть не стоит:

- vme: Значение по умолчанию является лучшим.

- lumi_mask, dark_mask: Психовизуальное адаптивное квантование. Не стоит играть с этими опциями, если заботитесь о качестве. Разумные значения могут быть эффективными в Вашем случае, но имейте в виду, что это весьма субъективно.

- scplx_mask: Пытается предотвратить появление квадратиков, но лучше выполнить постобработку.

### Примеры настроек кодирования

Следующие настройки — это примеры различных комбинаций опций кодирования, которые влияют на соотношение скорость-качество при той же величине целевого биптотока.

Все настройки кодирования проверялись на тестовом видео 720x448 @30000/1001 fps с целевым битпотоком 900кбит/сек, на машине AMD-64 3400+ с 2400 МГц и 64 битном режиме. Для каждой настройки кодирования указаны измеренная скорость кодирования (в кадрах в секунду) и потеря PSNR (в дБ) по сравнению с настройкой "очень высокое качество". Поймите, пожалуйста, что в зависимости от Вашего материала, типа машины, прогресса разработки Вы можете получить сильно отличающиеся результаты.

Описание | Опции кодирования | скорость (в fps) | Относительная потеря PSNR (в дБ)
--- | --- | --- | ---
Очень высокое качество | `vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2` | 6fps | 0дБ
Высокое качество | `vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo` | 15fps | -0.5дБ
Быстрое | `vcodec=mpeg4:mbd=2:trell:v4mv:turbo` | 42fps | -0.74дБ
Реального времени | `vcodec=mpeg4:mbd=2:turbo` | 54fps | -1.21дБ

### Нестандартные inter/intra матрицы

С этой возможностью libavcodec, Вы можете установить нестандартные inter (I-кадры/ключевые) и intra (P-кадры/предсказанные) матрицы. Это поддерживается многими кодеками: В mpeg1video и mpeg2video также заявлена поддержка.

Обычное использовании этой опции — установить матрицы, предпочитаемые спецификациями KVCD.

KVCD Матрица Квантования "Notch":

Intra:

     8  9 12 22 26 27 29 34
     9 10 14 26 27 29 34 37
    12 14 18 27 29 34 37 38
    22 26 27 31 36 37 38 40
    26 27 29 36 39 38 40 48
    27 29 34 37 38 40 48 58
    29 34 37 38 40 48 58 69
    34 37 38 40 48 58 69 79

Inter:

    16 18 20 22 24 26 28 30
    18 20 22 24 26 28 30 32
    20 22 24 26 28 30 32 34
    22 24 26 30 32 32 34 36
    24 26 28 32 34 34 36 38
    26 28 30 32 34 36 38 40
    28 30 32 34 36 38 42 42
    30 32 34 36 38 40 42 44

Использование:

    mencoder input.avi -o output.avi -oac copy -ovc lavc \
        -lavcopts inter_matrix=...:intra_matrix=...

    mencoder input.avi -ovc lavc -lavcopts \
    vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,\
    12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,\
    29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79\
    :inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,\
    28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,\
    36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg

### Пример

Итак, Вы только что купили новенькую, блестящую копию фильма "Гарри Поттер и Тайная Комната" (в широкоэкранном формате, конечно) и хотите сделать рип этого DVD так, чтобы добавить его к Домашнему кинотеатру на PC. Это DVD первого региона, поэтому NTSC. Пример ниже также применим и для PAL, за исключением того, что надо будет опустить `-ofps 24000/1001` (поскольку частота кадров на выходе такая же, как и на входе), и, конечно, границы обрезания будут другими.

После запуска `mplayer dvd://1` мы следуем процессу, детально описанному в разделе Как работать с телесином и чересстрочностью в NTSC DVD, и выясняем, что это 24000/1001 fps построчное видео, а значит, использовать фильтры обратного телесина, такие как `pullup` или `filmdint` не нужно.

Далее, мы хотим определить верные границы обрезания, поэтому используем фильтр cropdetect:

    mplayer dvd://1 -vf cropdetect

Убедитесь, что переместились к полностью заполненному кадру (например, к светлой сцене после пропущенных начальных титров и логотипов), Вы должны увидеть в консоли MPlayer:

    crop area: X: 0..719  Y: 57..419  (-vf crop=720:362:0:58)

Затем снова воспроизводим фильм с этим фильтром для проверки его корректности:

    mplayer dvd://1 -vf crop=720:362:0:58

И убеждаемся, что все выглядит прекрасно. Далее, проверяем, что ширина и высота делятся на 16. С шириной все в порядке, а с высотой — нет. Поскольку мы не заваливали математику в 7-ом классе, то знаем, что ближайшее целое, меньшее 362 и кратное 16, равно 352.

Мы могли бы просто использовать `crop=720:352:0:58`, но будет лучше отрезать понемногу от верха и низа, чтобы центр остался на месте. Мы уменьшили высоту на 10 пикселов, но не хотим увеличивать смещение по y на 5, поскольку это нечетное число и отрицательно скажется на качестве. Вместо этого, мы увеличим y на 4:

    mplayer dvd://1 -vf crop=720:352:0:62

Другая причина, по которой мы урезаем пикселы сверху и снизу, заключаемся в том, что мы хотим убедиться, что удалены все наполовину черные пикселы, если они есть. Если Ваше видео подвержено телесину, убедитесь, что фильтр `pullup` (или любой другой фильтр обратного телесина, который Вы решили использовать) находится в цепочке до фильтра crop. Если оно чересстрочное, то перед обрезкой проведите деинтерлейсинг. (Если решили сохранить чересстрочность видео, убедитесь, что вертикальный сдвиг обрезания кратен 4.)

Если Вас действительно заботит потеря этих 10 пикселов, Вы можете вместо этого отмасштабировать фильм, уменьшив размерности до ближайших кратных 16 значений. Цепочка фильтров будет выглядеть примерно так:

    -vf crop=720:362:0:58,scale=720:352

Подобное уменьшение изображения будет означать потерю небольшого количества деталей, хотя это, возможно, окажется незаметным. Масштабирование изображения в сторону увеличения даст худшее качество (если Вы не увеличиваете битпоток). Обрезка же полностью выбросит те пикселы. Это компромисс, идти на который или нет, придется решать в каждом частном случае. Например, если DVD видео было создано для телевидения, Вы можете захотеть избежать вертикального масштабирования, поскольку дискретизация строк соответствует тому, как содержимое изначально записывалось.

При проверке видим, что наш фильм имеет немного движения и большое количество деталей, так что выбираем для битпотока значение 2400Кбит/сек.

Теперь мы готовы произвести двухпроходное кодирование. Проход первый:

    mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi -ovc lavc \
        -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \
        -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2

И второй проход с теми же параметрами, за исключением `vpass=2`:

    mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi -ovc lavc \
        -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \
        -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2

Опции `v4mv:mbd=2:trell` значительно улучшат качество ценой времени кодирования. Нет никаких оснований отключать эти опции, когда главным критерием является качество. Опции `cmp=3:subcmp=3` выбирают функцию сравнения, дающую лучшее качество, чем стандартная. Вы можете поэкспериментировать с этим параметром (возможные значения смотрите на man странице), поскольку разные функции могут давать разный прирост в качестве в зависимости от исходного материала. Например, если Вы замечаете, что libavcodec производит слишком много блочных артефактов (квадратиков), то можете попытаться выбрать экспериментальный NSSE в качестве функции сравнения при помощи опции `*cmp=10`.

Для этого фильма полученный AVI будет 138 минут длинной и размером около 3Гб. И, поскольку Вы сказали, что размер файла значения не имеет, это вполне приемлемый результат. Однако, если все-таки хотите получить меньший размер файла, можете попробовать уменьшить битпоток. Увеличение битпотока имеет снижающийся эффект, поэтому, хотя мы можем ясно видеть улучшение от 1800Кбит/сек до 2000Кбит/сек, оно может быть не столь заметно выше 2000Кбит/сек.

Так как мы пропустили исходное видео через фильтр удаления шума, то, возможно, захочется вернуть какую-то его часть во время воспроизведения. Это, совместно с фильтром постобработки `spp`, существенно улучшит воспринимаемое качество и поможет избежать блочных артефактов в видео. Опцией `autoq` MPlayer'а Вы можете изменять величину производимой фильтром spp постобработки в зависимости от доступных ресурсов CPU. Вдобавок, на этом этапе Вы можете захотеть применить коррекцию гаммы и/или цвета для лучшего соответствия Вашему монитору. Например:

    mplayer Harry_Potter_2.avi -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3

## Кодирование кодеком Xvid

Xvid — это свободная библиотека для кодирования MPEG-4 ASP видео потоков. Перед тем, как начать кодирование, Вам потребуется настроить MEncoder для его поддержки.

Это руководство в основном нацелено на особенности применения тех же методов, что описаны в руководстве по кодированию с помощью x264. Поэтому, сначала прочтите, пожалуйста, первую часть того руководства.

### Какие опции следует использовать для получения лучших результатов?

Пожалуйста, начните с просмотра раздела Xvid man страницы MPlayer. Этот раздел предполагается как дополнение к man странице.

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

### Опции кодирования Xvid

- vhq Эта опция влияет на алгоритм принятия решений о макроблоке, чем выше значение, тем мудрее будут решения. Значение по умолчанию можно без опаски использовать для любого кодирования, в то время, как более высокие значения всегда улучшат PSNR, но будут работать значительно медленнее. Заметьте, пожалуйста, что лучший PSNR не обязательно означает лучше выглядящую картинку, но говорит, что она ближе к оригиналу. Отключение этой опции заметно ускоряет кодирование; это может быть достойным компромиссом, если скорость Вам критична.

- bvhq То же, что и vhq, но для B-кадров. Имеет незначительное влияние на скорость и слегка улучшает качество (около +0.1дБ).

- max_bframes Большее число допустимых последовательных B-кадров обычно улучшает сжимаемость, хотя оно может также привести к большему количеству блочных артефактов (квадратиков). Значение по умолчанию — хороший выбор между сжимаемостью и качеством, но Вы можете увеличить его до 3, если стеснены величиной битпотока. Вы также можете уменьшить это значение до 1 или 0, если печетесь об отличном качестве, впрочем в этом случае Вы должны убедиться, что целевой битпоток достаточно высок, дабы кодировщик не увеличивал значение квантователя, сохраняя нужную величину битпотока.

- bf_threshold Управляет чувствительностью кодировщика к B-кадрам, где большие значения приводят к использованию большего количества B-кадров (и наоборот). Опция должна использоваться совместно с `max_bframes`; если Вы стеснены величиной битпотока, то должны увеличить и `max_bframes`, и `bf_threshold`, в том время как увеличение `max_bframes` и уменьшение `bf_threshold` позволят кодировщику использовать больше B-кадров в местах, где это действительно необходимо. Низкое количество `max_bframes` и высокое значение `bf_threshold` — это, возможно, не самое мудрое решение, поскольку оно принудит кодировщик размещать B-кадры в местах, которые никак не выиграют от этого, тем самым ухудшая визуальное качество. Однако, если Вам требуется совместимость с аппаратными проигрывателями, поддерживающими только старые DivX профили (которые поддерживают только 1 последовательный B-кадр), это единственный способ увеличить сжимаемость при помощи B-кадров.

- trellis Оптимизирует процесс квантования для получения оптимального соотношения между PSNR и битпотоком, что позволяет существенно экономить биты. Эти биты впоследствии будут потрачены на другие части видео, что приведет к увеличению общего качества. Следует всегда оставлять эту опцию включенной, поскольку ее влияние на качество огромно. Даже если Вы заботитесь о скорости, не отключайте ее до тех пор, пока не выставили `vhq` и остальные более CPU-прожорливые опции на минимум.

- hq_ac Активирует более точный метод оценки стоимости коэффициентов, что уменьшает размер файла примерно на 0.15 - 0.19% (соответствует увеличению PSNR меньше, чем на 0.01дБ), имея несущественное влияние на скорость. Поэтому, рекомендуется всегда держать эту опцию включенной.

- cartoon Разработана для лучшего кодирования мультфильмов и не влияет на скорость, поскольку всего-лишь настраивает эвристики принятия решений о режимах для этого типа содержимого.

- me_quality Это опция для настройки точности оценки движения. Чем выше `me_quality`, тем точнее будет оценка оригинального движения и тем лучше получающийся отрывок будет фиксировать оригинальное движение.

  Настройка по умолчанию лучше во всех случаях, поэтому не рекомендуется ее выключать, если только Вы действительно не гонитесь за скоростью, поскольку биты, сэкономленные хорошей оценкой движения, могут быть использованы где-нибудь еще, увеличивая общее качество. Таким образом, не используйте значения ниже 5, да и его — только в крайнем случае.

- chroma_me Улучшает оценку движения, дополнительно принимая во внимание информацию о цвете, тогда как одна `me_quality` использует только яркость. Это замедляет кодирование на 5-10%, но несколько улучшает визуальное качество, уменьшая эффект блочности и сокращая размер файла примерно на 1.3%. Если Вас интересует скорость, следует попробовать отключить эту опцию, прежде чем решите уменьшать значение `me_quality`.

- chroma_opt Эта опция служит для увеличения качества цветного изображения вокруг чисто черных/белых границ вместо улучшения сжатия. Она также может помочь против эффекта "красных ступенек".

- lumi_mask Пытается отдать меньший битпоток областям изображения, которые человеческий глаз не в состоянии увидеть достаточно хорошо, что позволит кодировщику потратить сэкономленные биты на более важные части картинки. Качество закодированного материала, привнесенное этой опцией, сильно зависит от личных предпочтений и от типа и настроек монитора, использовавшегося для просмотра (обычно результат выглядит не очень хорошо, если он яркий, или является TFT монитором).

- qpel Увеличивает количество предполагаемых векторов движения, путём повышения точности оценки движения с полупиксельной до четвертьпиксельной. Идея состоит в том, чтобы найти лучшие векторы движения, которые взамен уменьшат битпоток (тем самым увеличивая качество). Однако, векторы движения с четверьтпиксельной точностью требуют большего количества дополнительных бит для кодирования, а векторы-кандидаты не всегда дают (значительно) лучшие результаты. Достаточно часто кодек тратит дополнительные биты на повышенную точность впустую, а взамен получает или вообще ничего, или небольшое увеличение качества. К сожалению, нет способа предсказать возможные улучшения от `qpel`, так что Вам придется сделать кодирование с ней и без нее, чтобы знать наверняка.

  `qpel` может почти удвоить время кодирования и требует, как минимум, на 25% большей мощности при декодировании. Она поддерживается не всеми аппаратными проигрывателями.

- gmc Пытается сэкономить биты в панорамных сценах, используя один вектор движения для всего кадра. Это почти всегда увеличивает PSNR, но заметно замедляет кодирование (так же как и декодирование). Поэтому Вас следует использовать ее, только когда Вы включили `vhq` на максимум. GMC Xvid'а является более сложным, чем у DivX'а, но поддерживается только некоторыми аппаратными проигрывателями.

### Профили кодирования

Xvid поддерживает профили кодирования через опцию `profile`, которая используется для накладывания ограничений на значения видео потока Xvid таким образом, что он будет воспроизводиться на всем, что поддерживает выбранный профиль. Ограничения относятся к разрешению, битпотоку и некоторым возможностям MPEG-4. Следующая таблица показывает, что поддерживает тот или иной профиль.

| Простой | Расширенный простой | DivX
Название профиля | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | Карманный | Портативный NTSC | Портативный PAL | Домашний кинотеатр NTSC | Домашний кинотеатр PAL | HDTV
Ширина [пикселов] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280
Высота [пикселов] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720
Частота кадров [fps] | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30
Максимальный средний битпоток [кбит/сек] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4
Пиковое значение средней величины битпотока за 3 секунды [кбит/сек] |  |  |  |  |  |  |  |  |  |  | 800 | 8000 | 8000 | 8000 | 8000 | 16000
Макс. B-кадров | 0 | 0 | 0 | 0 |  |  |  |  |  |  | 0 | 1 | 1 | 1 | 1 | 2
MPEG квантование |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Адаптивное квантование |  |  |  |  | X | X | X | X | X | X | X | X | X | X | X | X
Чересстрочное кодирование |  |  |  |  | X | X | X | X | X | X |  |  |  | X | X | X
Четвертьпиксельная точность |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Глобальная компенсация движения |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |

### Примеры настроек кодирования

Последующие настройки — это примеры различных комбинаций опций кодирования, которые влияют на соотношения скорость-качество при той же величине целевого битпотока.

Все настройки кодирования проверялись на тестовом видео 720x448 @30000/1001 fps с целевым битпотоком 900кбит/сек, на машине AMD-64 3400+ с 2400 МГц и 64 битном режиме. Для каждой настройки кодирования указаны измеренная скорость кодирования (в кадрах в секунду) и потеря PSNR (в дБ) по сравнению с настройкой "очень высокое качество". Поймите, пожалуйста, что в зависимости от Вашего материала, типа машины, прогресса разработки, Вы можете получить сильно отличающиеся результаты.

Описание | Опции кодирования | скорость (в fps) | Относительная потеря PSNR (в дБ)
--- | --- | --- | ---
Очень высокое качество | `chroma_opt:vhq=4:bvhq=1:quant_type=mpeg` | 16fps | 0дБ
Высокое качество | `vhq=2:bvhq=1:chroma_opt:quant_type=mpeg` | 18fps | -0.1дБ
Быстрое | `turbo:vhq=0` | 28fps | -0.69дБ
Реального времени | `turbo:nochroma_me:notrellis:max_bframes=0:vhq=0` | 38fps | -1.48дБ

## Кодирование кодеком x264

x264 — это свободная библиотека для кодирования H.264/AVC видео потоков. Перед началом кодирования Вы должны настроить MEncoder для его поддержки.

### Опции кодирования x264

Начните, пожалуйста с просмотра раздела x264 man страницы MPlayer'а. Этот раздел предполагается быть дополнением к странице man. Здесь Вы найдете быстрые подсказки о том, какие опции чаще всего интересуют большинство людей. Страница man более лаконична, но также более полна и порой намного лучше преподносит технические детали.

#### Введение

Это руководство рассматривает две главные категории опций кодирования:

1. Опции, в основном влияющие на соотношение скорость-качество.

2. Опции, которые могут быть полезны для удовлетворения различных пользовательский предпочтений и специальных требований.

В конце концов, только Вы можете решать какие опции являются лучшими для Ваших целей. Решение для первого класса опций очень простое: надо только определить, считаете ли Вы, что разница в качестве оправдывает разницу в скорости. Для второго класса опций предпочтения могут быть значительно более субъективными и зависеть от большего числа факторов. Имейте в виду, что некоторые из опций категории "пользовательских предпочтений и специальных требований" могут все же иметь большое влияние на скорость или качество, но это не основное их предназначение. Часть опций из "пользовательских предпочтений" могут даже привести к изменениям, которые выглядят лучше для одних людей и хуже — для других.

Перед тем как продолжить, Вам придется понять, что это руководство использует только одну метрику качества: глобальный PSNR. Краткое описание того, что такое PSNR, смотрите в статье Википедии о PSNR. Глобальный PSNR — это последнее значение PSNR, выводимое на консоль, когда в `x264encopts` включена опция `psnr`. Каждый раз, когда Вы читаете утверждения о PSNR, за ними скрывается предположение, что используются одинаковые значения битпотока.

Почти все комментарии этого руководства предполагают, что Вы используете два прохода. Есть две основные причины использовать двухпроходное кодирование при сравнении опций. Во-первых, использование двух проходов увеличивает PSNR примерно на 1дБ, что является очень хорошим значением. Во-вторых, тестирование опций прямым сравнением качества при однопроходном кодировании вводит основной сбивающий фактор: зачастую битпоток значительно меняется при каждом кодировании. Не всегда можно с легкостью сказать, изменилось ли качество в основном за счет изменения опций, или оно по большей части отражает случайные изменения в полученном битпотоке.

#### Опции, затрагивающие, в основном, скорость и качество

- subq: Из всех опций, позволяющих выбирать между скоростью и качеством, `subq` и `frameref` (смотрите ниже), пожалуй, самые важные. Если Вы заинтересованы в тонкой настройке либо скорости, либо качества, эти две — первое, с чего Вам стоит начать. С точки зрения скорости, опции `frameref` и `subq` очень жестко взаимодействуют друг с другом. Опыт показывает, что с одним ссылочным кадром `subq=5` (настройка по умолчанию) расходует на 35% больше времени, чем `subq=1`. С 6 ссылочными кадрами эта величина достигает 60%. Эффект `subq` на PSNR выглядит довольно постоянным, в отличие от количества ссылочных кадров. Как правило, `subq=5` достигает значения глобального PSNR на 0.2-0.5 дБ большего, чем при `subq=1`. Обычно этого достаточно, чтобы заметить.

  `subq=6` — медленнее и дает лучшее качество при разумной цене. Если сравнивать с `subq=5`, он обычно дает на 0.1-0.4 дБ больший глобальный PSNR ценой потери 25%-100% скорости. В отличие от остальных уровней `subq`, поведение `subq=6` не так сильно зависит от `frameref` и `me`. Вместо этого, эффективность `subq=6` по большей части зависит от количества используемых B-кадров. При обычном использовании это означает, что `subq=6` в сложных, высокодинамичных сценах имеет большое влияние как на скорость, так и на качество, но в сценах с малым количествах движения она не имеет такого эффекта. Имейте в виду, что по-прежнему рекомендуется всегда устанавливать `bframes` в значение, отличное от нуля (смотрите далее).

  `subq=7` — самый медленный режим с наилучшим качеством. По сравнению с `subq=6` он, обычно, улучшает общий PSNR на 0.01-0.05 дБ ценой потери 15%-30% скорости. Поскольку соотношение качества и времени кодирования очень невелико, Вам следует использовать этот режим, только если боретесь за каждый бит, и время кодирования Вас не волнует.

- frameref: `frameref` по умолчанию установлена в 1, но это не значит, что ее стоит устанавливать в 1. Только увеличение `frameref` до 2 дает прирост PSNR примерно на 0.15дБ за счет уменьшения скорости на 5-10%; похоже, что это неплохая цена. `frameref=3` дает примерно 0.25дБ PSNR сверх `frameref=1`, что должно быть видимой разницей. `frameref=3` медленнее примерно на 15%, чем `frameref=1`. К сожалению, улучшение очень быстро сходит на нет. От `frameref=6` можно ожидать прироста PSNR лишь на 0.05-0.1 дБ по сравнению с `frameref=3` с дополнительной потерей 15% скорости. Выше `frameref=6` качество обычно увеличивается очень незначительно (хотя на всем протяжении этой дискуссии Вам следует иметь в виду, оно может значительно изменяться в зависимости от исходного материала). В довольно типичном случае `frameref=12` улучшит глобальный PSNR всего на 0.02дБ по сравнению с `frameref=6`, ценой 15%-20% скорости. При таких высоких значениях `frameref`, единственная действительно хорошая вешь, о которой может быть сказано, состоит в том, что дальнейшее ее увеличение почти никогда не будет вредить PSNR, но увеличение качества будет трудно даже измерить, не говоря уже о его заметности.

  Замечание:

  Увеличение `frameref` до чрезмерно высоких значений может и обычно наносит вред эффективности кодирования, если CABAC отключен. С задействованным CABAC (настройка по умолчанию), возможность установки `frameref` "слишком высоким" на данный момент выглядит слишком далекой, чтобы об этом беспокоиться, а в будущем оптимизации могут вообще убрать такую возможность.

  Если Вас заботит скорость, разумным компромиссом будет использовать низкие значения `subq` и `frameref` в первом проходе, а затем увеличить их во втором. Обычно, это обладает ничтожным отрицательным эффектом на конечное качество: Вы, возможно, потеряете вплоть до 0.1дБ PSNR, что должно быть слишком малой разницей, чтобы её заметить. Однако, различные значения `frameref` могут иногда повлиять на решение о выборе типа кадра. Скорее всего, это довольно редкие крайние случаи, но если Вы хотите быть точно уверенными, посмотрите, содержит ли Ваше видео полноэкранные периодически вспыхивающие изображения или очень большие паузы, которые могут стать причиной принудительной вставки I-кадра. Настройте `frameref` в первом проходе так, чтобы она была достаточно большой для содержания длительности цикла вспыхивания (или паузы). Например, если сцены вспыхивают и гаснут между двумя изображениями в течении трёх кадров, установите `frameref` равным 3 или выше. Эта проблема, возможно, очень редко появляется для живой съемки, но она иногда возникает при записи видео игр.

- me: Эта опция используется для выбора метода оценки движения. Изменение этой опции оказывает прямое влияние на соотношение скорость-качество. `me=dia` лишь на несколько процентов быстрее, чем поиск по умолчанию, ценой не больше 0.1дБ глобального PSNR. Значение по умолчанию (`me=hex`) — разумный выбор между скоростью и качеством. `me=umh` немного, вплоть до 0.1дБ, улучшает глобальный PSNR, соответствующее падение скорости меняется в зависимости от `frameref`. С высокими значениями `frameref` (например, 12 или около того), `me=umh` примерно на 40% медленнее, чем настройка по умолчанию `me=hex`. С `frameref=3`, падение скорости уменьшается до 25%-30%.

  `me=esa` использует исчерпывающий поиск, который работает слишком медленно для практического применения.

- partitions=all: Эта опция задействует использование сегментов 8x4, 4x8 и 4x4 в предсказанных макроблоках (в дополнение к стандартным). Ее включение приведет к довольно постоянной 10%-15% потере в скорости. Эта опция практически бесполезна для исходного материала, содержащего только небольшое движение, тем не менее, для некоторого высокодинамичного материала, особенно с большим количеством мелких движущихся объектов, следует ожидать прироста около 0.1дБ.

- bframes: Если Вы занимались кодированием с другими кодеками, то могли заметить, что B-кадры не всегда полезны. В H.264 это изменилось: есть новые техники и типы блоков, возможные в B-кадрах. Обычно, даже примитивный алгоритм выбора B-кадров может дать значимую выгоду для PSNR. Интересно заметить, что использование B-кадров обычно отчасти ускоряет второй проход, а также может ускорить однопроходное кодирование, если отключено адаптивное принятие решения о B-кадрах.

  С отключенным адаптивным принятием решения о B-кадрах (`nob_adapt` в `x264encopts`), оптимальное значение этой опции обычно не превышает `bframes=1`, иначе могут пострадать высокодинамичные сцены. С включенным адаптивным принятием решения о B-кадрах (поведение по умолчанию), можно безопасно использовать более высокие значения; кодировщик уменьшит количество B-кадров в сценах, где они повредят сжатию. Кодировщик редко решает использовать больше, чем 3 или 4 B-кадра; установка этой опции в любое более высокое значение не будет иметь большого эффекта.

- b_adapt: Заметьте: она включена по умолчанию.

  Когда эта опция включена, кодировщик будет использовать разумно быстрый процесс принятия решения для уменьшения количества B-кадров, используемых в сценах, которые от этого не сильно выиграют. Вы можете использовать `b_bias` для тонкой настройки того, насколько "счастлив" будет кодировщик использованию B-кадров. Потеря в скорости при использовании адаптивных B-кадров на данный момент весьма невелика, но таково же и потенциальное улучшение качества. Тем не менее, хуже от этого обычно не становится. Заметьте, что эта опция влияет на скорость и решение о типе кадра только в первом проходе. `b_adapt` и `b_bias` не имеют эффекта в последующих проходах.

- b_pyramid: С тем же успехом Вы можете включить эту опцию, если используете >=2 B-кадров; Вы получите небольшое улучшение качества без потери в скорости, как и говорит man руководство. Имейте в виду, что такое видео не может быть прочитано основанными на libavcodec декодерами, созданными ранее, чем примерно 5 Марта 2005.

- weight_b: В обычных случаях эта опция не дает большого улучшения. Однако, в проявляющихся или затухающих сценах взвешенное предсказание дает довольно большую экономию битпотока. В MPEG-4 ASP затухание обычно лучше кодируется последовательностью дорогих I-кадров; использование взвешенного предсказания в B-кадрах делает возможным преобразовать хотя бы часть из них в значительно более меньшие B-кадры. Потери в скорости кодирования минимальны, поскольку не требуется делать дополнительные принятия решений. Вдобавок, вопреки расхожему мнению, взвешенное предсказание не сильно влияет на требования декодера к CPU при прочих равных условиях.

  К сожалению, текущий алгоритм адаптивного принятия решений о B-кадрах имеет твердую склонность к избеганию использования B-кадров при затуханиях. До тех пор, пока это не изменится, хорошей идеей, возможно, будет добавить `nob_adapt` к x264encopts, если предполагаете, что затухания будут давать существенный вклад в Вашем конкретном видеоклипе.

- threads Эта опция позволяет породить потоки для параллельного кодирования на нескольких CPU. Вы можете вручную выбрать количество создаваемых потоков или, что лучше, установить `threads=auto` и позволить x264 определить количество доступных CPU и выбрать соответствующее количество потоков. Если у Вас многопроцессорная машина, Вам следует всерьез задуматься об использовании этой опции, так как она может увеличить скорость кодирования линейно в зависимости от числа CPU ядер (около 94% на ядро), незначительно уменьшая PSNR (примерно 0.005 дБ для двухпроцессорной, 0.01 дБ — для четырехпроцессорной машины).

#### Опции, относящиеся к различным предпочтениям

- Двухпроходное кодирование: Выше советовалось всегда использовать кодирование в два прохода, но все же существуют причины этого не делать. Например, если Вы захватываете TV трансляцию и кодируете в реальном времени, придется использовать однопроходный режим. К тому же один проход очевидно быстрее, чем два; если Вы используете точно такой же набор опций в обоих случаях, двухпроходной режим медленнее почти вдвое.

  Все же существует очень хорошие причины использовать кодирование в два прохода. Во-первых, управление битпотоком однопроходного режима не является телепатом и часто делает необоснованный выбор, потому что не может видеть общую картину. Например, предположим, что Вы имеете двухминутное видео, состоящее из двух независимых частей. Первая половина — очень динамичная сцена, продолжающаяся 60 секунд и требующая сама по себе битпоток примерно 2500 кбит/сек, чтобы прилично выглядеть. Сразу за ней следует гораздо менее требовательная 60-секундная сцена, которая хорошо выглядит при 300 кбит/сек. Предположим, Вы запросили битпоток 1400 кбит/сек; в теории этого достаточно для удовлетворения потребностей обеих сцен. В этом случае управление битпотоком в однопроходном режиме сделает пару "ошибок". Во-первых, оно установит битпоток в 1400 кбит/сек для обеих частей. Первая часть может оказаться чрезмерно квантованной, что приведет к недопустимо выглядящему и неоправданно блочному изображению. Вторая часть будет существенно недостаточно квантованной; она может выглядеть отлично, но цена битпотока для этого качества будет полностью неоправданной. Чего намного труднее избежать, так это проблемы перехода между двумя сценами. В первых секундах малодинамичной части квантователь будет чрезвычайно превышен, потому что управление битпотоком все еще ожидает встретить такие же требования к битпотоку как и в первой части. Этот "ошибочный период" с чрезвычайно превышенным квантованием будет выглядеть раздражающе неприятно и использовать на самом деле меньше, чем 300 кбит/сек, требуемых ему для того, чтобы прилично выглядеть. Существуют способы смягчить эффект от подобных подводных камней однопроходного режима, но они могут иметь склонность к усилению неверного предсказания битпотока.

  Многопроходное кодирование может предложить огромные преимущества по сравнению с однопроходным. Используя статистику, собранную при первом проходе, кодировщик может оценить, с разумной точностью, "стоимость" (в битах) кодирования любого заданного кадра при любом заданном квантователе. Это делает возможным намного более рациональное, лучше спланированное распределение битов между дорогими (высокодинамичными) и дешевыми (малодинамичными) сценами. Смотрите `qcomp` ниже, чтобы узнать некоторые идеи о том, как можно это распределение настроить по Вашему вкусу.

  Более того, два прохода занимают не двойное время по сравнению с одним. Вы можете настроить опции первого прохода на более быструю скорость и низкое качество. Если хорошо выберете опции, Вы получите очень быстрый первый проход. Полученное качество во втором проходе будет несколько ниже, потому что предсказание размера менее точно, но разница в качестве обычно слишком мала, чтобы быть заметной. Попробуйте, например, добавить `subq=1:frameref=1` в `x264encopts` первого прохода. Затем, при втором проходе, используйте более медленные, с лучшим качеством опции: `subq=6:frameref=15:partitions=all:me=umh`

- Кодирование в три прохода? x264 предоставляет возможность делать желаемое количество последовательных проходов. Если Вы указали `pass=1` при первом проходе, используйте затем `pass=3` в последующем проходе, этот проход будет одновременно читать статистику предыдущего прохода и записывать свою собственную. Дополнительный проход, следующий за этим, будет иметь очень хорошую основу для осуществления очень точных предсказаний размеров кадров при выбранном квантователе. На практике, общее улучшение качества от использования этого режима близко к нулю и, вполне возможно, третий проход приведет к немного худшему глобальному PSNR, чем у предыдущего прохода. При обычном использовании три прохода помогают, если Вы при двух проходах получаете либо плохое предсказание битпотока, либо плохо выглядящие переходы между сценами. Это отчасти то, что наверняка будет происходить на очень коротких клипах. Существуют также особые случаи, когда три (или более) проходом удобны для продвинутых пользователей, но, для краткости, это руководство не включает в себя описание этих особых случаев.

- qcomp: `qcomp` управляет соотношением количества бит, отданных "дорогим" высокодинамичным и "дешевым" малодинамичным кадрам. Один крайний случай: `qcomp=0`, предназначен для истинно постоянного битпотока. Обычно это сделает высокодинамичные сцены выглядящими просто ужасно, в то время как малодинамичные сцены будут, возможно, выглядеть абсолютно великолепно, но при этом будут использовать во много раз больший битпоток, чем им необходимо, чтобы выглядеть лишь превосходно. Другая крайность: `qcomp=1`, добивается примерно одинакового параметра квантования (QP). Постоянный QP не выглядит плохо, но большинство людей думают, что более разумно частично снизить битпоток в сильно дорогих сценах (где потеря качества не очень заметна) и перераспределить их в сцены, которые легче закодировать с отличным качеством. `qcomp` по умолчанию установлена в 0.6, что по мнению многих людей может быть несколько мало (также часто используется 0.7-0.8).

- keyint: `keyint` — единственная возможность выбора между удобством перемещения по файлу и эффективностью кодирования. По-умолчанию `keyint` установлена в 250. В материале с 25fps это гарантирует возможность перемещения с точностью до 10 секунд. Если Вы считаете, что более важным и полезным будет перемещение с точностью до 5 секунд, установите `keyint=125`; это немного ухудшит качество/битпоток. Если Вы заботитесь только о качестве, но не о перемещаемости, Вы можете установить значение этой опции в более высокое значение (понимая, что улучшение будет убывающим, вплоть до исчезающе малого или даже нулевого). Видео поток по-прежнему будет иметь точки перемещения, пока в нем есть какие-то изменения сцен.

- deblock: Этот раздел может быть несколько спорным.

  H.264 определяет простую процедуру удаления блочности в I-блоках, которая использует предустановленные степени обработки и пороговые значения в зависимости от QP рассматриваемого блока. По-умолчанию, блоки с высоким QP обрабатываются сильнее, а в блоках с низким QP удаление блочности вообще не производится. Предустановленые степени обработки, определенные стандартом, тщательно подобраны и имеют хорошие шансы быть PSNR-оптимальными для любого видео, которое Вы пытаетесь кодировать. Опция `deblock` позволяет указать смещения предустановленных пороговых значений деблокинга.

  Похоже, многие думают, что хорошей идеей является значительное уменьшение силы воздействия фильтра деблокинга (читай, -3). Это, однако, почти никогда не является хорошей идеей, и, люди, это делающие, в большинстве случаев не совсем хорошо понимают, как работает удаление блочности по умолчанию.

  Первая и самая важная вещь, которую нужно знать о in-loop фильтре удаления блочности состоит в том, что пороговые значения по умолчанию практически всегда PSNR-оптимальны. В редких случаях, где они неоптимальны, идеальное смещение будет плюс минус 1. Изменение параметров деблокинга на большие значения фактически гарантирует ухудшение PSNR. Усиление фильтра размажет больше деталей; ослабление — оставит больше квадратиков.

  По определению плохая идея уменьшать пороги деблокинга, если Ваш исходный материал в основном имеет небольшую пространственную сложность (т.е. не имеет множества деталей или шума). In-loop фильтр делает весьма неплохую работу по сокрытию появляющихся артефактов. Однако, если исходный материал имеет высокую пространственную сложность, артефакты будут практически незаметны. Это происходит потому, что ореолы имеют склонность выглядеть как детали или шум. Зрительное восприятие легко замечает отсутствие деталей, но ему не так легко обратить внимание на неверно изображенный шум. Когда речь идет о субъективном качестве, шум и детали в некоторой степени взаимозаменяемы. Уменьшая силу фильтра удаления блочности, Вы, скорее всего, увеличиваете ошибку, добавляя ореолы, но глаз этого не замечает, поскольку он путает артефакты с деталями.

  Однако, это по-прежнему не оправдывает уменьшение силы фильтра. Вы в большинстве случаев можете получить более качественный шум при помощи постобработки. Если результат кодирования при помощи H.264 выглядит слишком смазанным или размытым, попробуйте поиграть с `-vf noise`, при воспроизведении закодированного фильма. `-vf noise=8a:4a` должна скрыть большинство мелких артефактов. Ее результат почти наверняка будет выглядеть лучше, чем полученный при помощи махинаций с фильтром удаления блочности.

### Примеры настроек кодирования

Последующие настройки — это примеры различных комбинаций опций кодирования, которые влияют на соотношения скорость-качество при той же величине целевого битпотока.

Все настройки кодирования проверялись на тестовом видео 720x448 @30000/1001 fps с целевым битпотоком 900кбит/сек, на машине AMD-64 3400+ с 2400 МГц и 64-х битном режиме. Для каждой настройки кодирования указаны измеренная скорость кодирования (в кадрах в секунду) и потеря PSNR (в дБ) по сравнению с настройкой "очень высокое качество". Поймите, пожалуйста, что в зависимости от Вашего материала, типа машины, прогресса разработки Вы можете получить сильно отличающиеся результаты.

Описание | Опции кодирования | скорость (в fps) | Относительная потеря PSNR (в дБ)
--- | --- | --- | ---
Очень высокое качество | `subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b` | 6fps | 0дБ
Высокое качество | `subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b` | 13fps | -0.89дБ
Быстро | `subq=4:bframes=2:b_pyramid=normal:weight_b` | 17fps | -1.48дБ

## Кодирование семейством кодеков Video For Windows

Video for Windows предоставляет простое кодирование при помощи бинарных видео кодеков. Вы можете кодировать следующими кодеками (если у Вас есть другие, сообщите нам!)

Имейте в виду, что поддержка этой возможности очень экспериментальная и некоторые кодеки могут не работать корректно. Некоторые кодеки могут работать только в определенных пространствах цветов, попробуйте `-vf format=bgr24` и `-vf format=yuy2`, если кодек выдает ошибку или кодирует неверно.

### Поддерживаемые кодеки Video for Windows

Имя файла с видео кодеком | Описание (FourCC) | md5sum | Комментарий
--- | --- | --- | ---
aslcodec_vfw.dll | Alparysoft vfw кодек без потерь (ASLC) | 608af234a6ea4d90cdc7246af5f3f29a |
avimszh.dll | AVImszh (MSZH) | 253118fe1eedea04a95ed6e5f4c28878 | необходим `-vf format`
avizlib.dll | AVIzlib (ZLIB) | 2f1cc76bbcf6d77d40d0e23392fa8eda |
divx.dll | DivX4Windows-VFW | acf35b2fc004a89c829531555d73f1e6 |
huffyuv.dll | HuffYUV (без потерь) (HFYU) | b74695b50230be4a6ef2c4293a58ac3b |
iccvid.dll | Cinepak Video (cvid) | cb3b7ee47ba7dbb3d23d34e274895133 |
icmw_32.dll | Motion Wavelets (MWV1) | c9618a8fc73ce219ba918e3e09e227f2 |
jp2avi.dll | ImagePower MJPEG2000 (IPJ2) | d860a11766da0d0ea064672c6833768b | `-vf flip`
m3jp2k32.dll | Morgan MJPEG2000 (MJ2C) | f3c174edcbaef7cb947d6357cdfde7ff |
m3jpeg32.dll | Morgan Motion JPEG Codec (MJPG) | 1cd13fff5960aa2aae43790242c323b1 |
mpg4c32.dll | Microsoft MPEG-4 v1/v2 | b5791ea23f33010d37ab8314681f1256 |
tsccvid.dll | TechSmith Camtasia Screen Codec (TSCC) | 8230d8560c41d444f249802a2700d1d5 | ошибка shareware в windows
vp31vfw.dll | On2 Open Source VP3 Codec (VP31) | 845f3590ea489e2e45e876ab107ee7d2 |
vp4vfw.dll | On2 VP4 Personal Codec (VP40) | fc5480a482ccc594c2898dcc4188b58f |
vp6vfw.dll | On2 VP6 Personal Codec (VP60) | 04d635a364243013898fd09484f913fb |
vp7vfw.dll | On2 VP7 Personal Codec (VP70) | cb4cc3d4ea7c94a35f1d81c3d750bc8d | `-ffourcc VP70`
ViVD2.dll | SoftMedia ViVD V2 VfW кодек (GXVE) | a7b4bf5cac630bb9262c3f80d8a773a1 |
msulvc06.DLL | MSU кодек без потерь (MSUD) | 294bf9288f2f127bb86f00bfcc9ccdda | Может декодироваться Window Media Player, но не MPlayer (пока).
camcodec.dll | CamStudio lossless video codec (CSCD) | 0efe97ce08bb0e40162ab15ef3b45615 | sf.net/projects/camstudio

Первый столбец содержит имена кодеков, которые должны указываться после параметра `codec`, например: `-xvfwopts codec=divx.dll` FourCC код, используемый каждым кодеком, указан в скобках.

Пример конвертации ISO DVD ролика в VP6 flash видео файл с использованием compdata настроек битпотока:

    mencoder -dvd-device zeiram.iso dvd://7 -o trailer.flv \
    -ovc vfw -xvfwopts codec=vp6vfw.dll:compdata=onepass.mcf -oac mp3lame \
    -lameopts cbr:br=64 -af lavcresample=22050 -vf yadif,scale=320:240,flip \
    -of lavf

### Использование vfw2menc для создания файла настроек кодека.

Для кодирования кодеками Video for Windows, Вам потребуется установить величину битпотока и другие опции. Известно, что это работает на x86 и для *NIX, и для Windows.

Во-первых, Вы должны собрать программу vfw2menc. Она находится в подкаталоге `TOOLS` дерева исходников MPlayer. Для сборки под Linux, это можно сделать, воспользовавшись Wine:

    winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32

Для сборки под Windows в MinGW или Cygwin используйте:

    gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32

Для сборки в MSVC Вам потребуется getopt. Getopt можно найти в исходном архиве vfw2menc, доступном в: Проект MPlayer на win32.

Далее следует пример использования с VP6 кодеком.

    vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf

Это откроет диалоговое окно кодека VP6. Повторите этот шаг для второго прохода, указав `-s secondpass.mcf`.

Пользователи Windows могут использовать `-xvfwopts codec=vp6vfw.dll:compdata=dialog`, для показа окна настроек кодека перед началом кодирования.

## Использование MEncoder для создания совместимых с QuickTime файлов

### Зачем необходимо создавать совместимые с QuickTime файлы?

Есть несколько причин, по которым создание QuickTime-совместимых файлов может быть желательно.

- Вы хотите, чтобы любой компьютерно неграмотный человек мог смотреть результат Вашего кодирования на большинстве платформ (Windows, Mac OS X, Unices …).

- QuickTime позволяет воспользоваться преимуществами большего числа возможностей аппаратного и программного ускорения на Mac OS X, чем платформо-независимые плееры наподобие MPlayer или VLC. Это означает, что Ваше кодирование имеет шансы плавно воспроизводиться на старых машинах, оснащённых G4.

- QuickTime 7 поддерживает кодек нового поколения H.264, который даёт существенно лучшее качество изображения, чем предыдущие поколения кодеков (MPEG-2, MPEG-4 …).

### Ограничения QuickTime 7

QuickTime 7 поддерживает H.264 видео и AAC аудио, но не поддерживает их мультиплексирование в формат контейнера AVI. Однако, Вы можете использовать MEncoder для кодирования видео и аудио, а потом использовать внешнюю программу, такую как mp4creator (часть пакета MPEG4I) для ремультиплексирования видео и аудио дорожек в контейнер MP4.

Поддержка H.264 в QuickTime ограничена, так что Вам придётся отказаться от нескольких продвинутых возможностей. Если Вы кодируете видео с возможностями, не поддерживаемыми QuickTime 7, плееры, основанные на QuickTime, покажут Вам милый белый экран вместо ожидаемого Вами видео.

- B-кадры: QuickTime 7 поддерживает максимум 1 B-кадр, т.е. `-x264encopts bframes=1`. Это означает, что `b_pyramid` и `weight_b` не дадут эффекта, поскольку им необходимо, чтобы `bframes` было больше 1.

- Макроблоки: QuickTime 7 не поддерживает 8x8 DCT макроблоки. Эта опция (`8x8dct`) выключена по умолчанию, так что просто удостоверьтесь, что явно её не задали. Это также означает, что опция `i8x8` будет бесполезна, т.к. ей необходима `8x8dct`.

- Коэффициент соотношения сторон: QuickTime 7 не поддерживает информацию SAR (коэффициент пропорций пиксела, sample aspect ratio) в MPEG-4 файлах; он предполагает SAR=1. Прочтите раздел о масштабировании для обхода проблемы.

### Обрезание

Предположим, что Вы хотите сделать рип свежекупленной копии "Хроник Нарнии" и Ваш регион DVD 1, что означает, что это NTSC. Пример ниже будет также применим к PAL, за исключением того, что Вам нужно будет опустить `-ofps 24000/1001` и использовать слегка отличающиеся размеры для `crop` и `scale`.

После запуска `mplayer dvd://1`, Вы следуете процессу, описанному в разделе Как работать с телесином и чересстрочной развёрткой на NTSC DVD и обнаруживаете, что это 24000/1001 fps видео с построчной развёрткой. Это несколько упрощает обработку, поскольку Вам не нужно использовать фильтр обратного телесина, такой как `pullup`, или фильтр деинтерлейса, такой как `yadif`.

Затем Вам необходимо усечь чёрные полосы сверху и снизу видео, как описано в этом разделе.

### Масштабирование

Следующий шаг действительно душераздирающий. QuickTime 7 не поддерживает MPEG-4 видео с коэффициентом соотношения сторон пиксела, отличным от 1. Так что Вам придётся масштабировать видео либо в сторону увеличения (что впустую потратит много места на диске), либо в строну уменьшения (что приведёт к потере некоторых деталей источника) для квадратизации пикселов. Какой бы способ Вы не выбрали, это будет крайне неэффективным, но не может быть опущено, если Вы хотите, чтоб Ваше видео воспроизводилось с помощью QuickTime 7. MEncoder может применить необходимое увеличивающее или уменьшающее масштабирование, если ему указать `-vf scale=-10:-1` или `-vf scale=-1:-10` соответственно. Это отмасштабирует Ваше видео до корректной ширины для усечённой высоты, округлённой до ближайшего множителя 16 для оптимального сжатия. Помните, что если производите обрезание, то нужно сперва обрезать, а лишь затем масштабировать:

    -vf crop=720:352:0:62,scale=-10:-1

### A/V синхронизация

Поскольку Вы будете мультиплексировать в другой контейнер, Вы должны всегда использовать опцию `harddup`, чтобы убедиться, что дублирующиеся кадры будут действительно дублироваться в полученном видео. Без этой опции MEncoder будет просто располагать маркер в видеопотоке о том, что кадр был повторен, и будет полагаться на то, что клиентское программное обеспечение покажет кадр дважды. К сожалению, это "мягкое дублирование" не переживает ремультиплексирование, в результате чего аудио будет постепенно терять синхронизацию с видео.

В итоге, цепочка фильтров выглядит следующим образом:

    -vf crop=720:352:0:62,scale=-10:-1,harddup

### Битпоток

Как обычно, выбор битпотока зависит от технических свойств исходного материала, как объясняется здесь, как, впрочем, и от личного вкуса. Этот фильм обладает небольшим количеством движения и большим количеством деталей, но H.264 видео хорошо выглядит на существенно меньших битпотоках, чем XviD или другие MPEG-4 кодеки. После длительного экспериментирования, автор данного руководства решил кодировать фильм на 900 кбит/сек, и считает, что он выглядит очень хорошо. Вы можете уменьшить битпоток, если Вам нужно сохранить больше места, или увеличить, если Вам нужно улучшить качество.

### Пример кодирования

Теперь Вы готовы к кодированию видео. Поскольку Вы заботитесь о качестве, Вы , разумеется, будете делать двупроходное кодирование. Для некоторого сокращения времени кодирования, Вы можете указать опцию `turbo` при первом проходе; это уменьшит `subq` и `frameref` до 1. Чтобы сохранить немного места на диске, Вы можете использовать параметр `ss` для отрезания первых нескольких секунд видео. (Я обнаружил, что, в частности, у данного фильма есть 32 секунды титров и логотипов.) `bframes` может быть 0 или 1. остальные опции описаны в разделе Кодирование кодеком x264 и на man странице.

    mencoder dvd://1 -o /dev/null -ss 32 -ovc x264 \
    -x264encopts pass=1:turbo:bitrate=900:bframes=1:\
    me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
    -vf crop=720:352:0:62,scale=-10:-1,harddup \
    -oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \
    -ofps 24000/1001

Если у Вас многопроцессорная машина, не упустите шанс значительно ускорить кодирование задействованием многопоточного режима x264, добавив `threads=auto` в `x264encopts` в командной строке.

Второй проход выполняется аналогично, за исключением того, что Вам нужно указать выходной файл и установить `pass=2`.

    mencoder dvd://1 -o нарния.avi -ss 32 -ovc x264 \
    -x264encopts pass=2:turbo:bitrate=900:frameref=5:bframes=1:\
    me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
    -vf crop=720:352:0:62,scale=-10:-1,harddup \
    -oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \
    -ofps 24000/1001

Получившееся AVI должно хорошо воспроизводиться в MPlayer, но, конечно же, QuickTime не сможет его воспроизвести, т.к. не поддерживает H.264, мультиплексированный в AVI. Так что следующий шаг — ремультиплексирование видео в контейнер MP4.

### Ремультиплексирование в MP4

Существует несколько способов ремультиплексирования AVI файлов в MP4. Вы можете использовать mp4creator, являющийся частью пакета MPEG4IP.

Сперва демультиплексируйте AVI в отдельные аудио и видео потоки с помощью MPlayer.

    mplayer нарния.avi -dumpaudio -dumpfile нарния.aac
    mplayer нарния.avi -dumpvideo -dumpfile нарния.h264

Имена файлов важны; для mp4creator необходимо, чтобы AAC аудио потоки назывались .aac и H.264 видео потоки назывались .h264.

Теперь используйте mp4creator для создания нового MP4 файла из аудио и видео потоков.

    mp4creator -create=нарния.aac нарния.mp4
    mp4creator -create=нарния.h264 -rate=23.976 нарния.mp4

В отличии от этапа кодирования, Вам нужно указать частоту кадров как десятичную (например, 23.976), а не целую (например, 24000/1001) дробь.

Теперь файл нарния.mp4 должен проигрываться с помощью любого QuickTime 7 приложения, например, QuickTime Player или iTunes. Если Вы планируете просмотр видео в вэб-браузере с помощью плагина QuickTime, Вам также необходимо модифицировать фильм таким образом, чтобы плагин QuickTime мог начать его воспроизведение ещё во время загрузки. mp4creator может создать эти вспомогательные дорожки (т.н. hint tracks):

    mp4creator -hint=1 нарния.mp4
    mp4creator -hint=2 нарния.mp4
    mp4creator -optimize нарния.mp4

Вы можете проверить полученный результат, чтобы убедиться, что вспомогательные дорожки были успешно созданы.

    mp4creator -list нарния.mp4

Вы должны увидеть список дорожек: 1 аудио, 1 видео и 2 вспомогательных.

    Track   Type    Info
    1       audio   MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz
    2       video   H264 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps
    3       hint    Payload mpeg4-generic for track 1
    4       hint    Payload H264 for track 2

### Добавление тегов метаданных

Если Вы хотите добавить в видео теги, которые отображаются в iTunes, Вы можете использовать AtomicParsley.

    AtomicParsley нарния.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite

Опция `--metaEnema` удаляет любые существующие метаданные (mp4creator вставляет своё название в тег "утилита кодирования") и `--freefree` высвобождает место, оставшееся от удалённых метаданных. Опция `--stik` устанавливает тип видео (например, Movie или TV Show), который используется iTunes для группировки родственных видеофайлов. Опция `--overWrite` перезаписывает исходный файл; без неё AtomicParsley создаст новый файл с автоматическим именем в том же каталоге и оставит исходный файл нетронутым.

## Использование MEncoder для создания VCD/SVCD/DVD-совместимых файлов.

### Ограничения формата

MEncoder способен создавать MPEG файлы VCD, SCVD и DVD формата, используя библиотеку libavcodec. Эти файлы затем могут быть использованы совместно с vcdimager или dvdauthor для создания дисков, которые будут воспроизводиться на стандартном видео проигрывателе.

DVD, SVCD, и VCD форматы обладают жесткими ограничениями. Доступен только небольшой выбор размеров и пропорций кодируемого изображения. Если Ваш фильм пока не удовлетворяет этим ограничениям, придется изображение масштабировать, обрезать или добавлять к нему черные полосы, чтобы добиться совместимости.

#### Ограничения форматов

Формат | Разрешение | Вид. Кодек | Вид. Битпоток | Дискретизация | Ауд. Кодек | Ауд. Битпоток | FPS | Пропорции
--- | --- | --- | --- | --- | --- | --- | --- | ---
NTSC DVD | 720x480, 704x480, 352x480, 352x240 | MPEG-2 | 9800 кбит/с | 48000 Гц | AC-3,PCM | 1536 кбит/с (макс.) | 30000/1001, 24000/1001 | 4:3, 16:9 (только для 720x480)
NTSC DVD | 352x240 Эти разрешения редко используются для DVD, поскольку имеют довольно низкое качество. | MPEG-1 | 1856 кбит/с | 48000 Гц | AC-3,PCM | 1536 кбит/с (макс.) | 30000/1001, 24000/1001 | 4:3, 16:9
NTSC SVCD | 480x480 | MPEG-2 | 2600 кбит/с | 44100 Гц | MP2 | 384 кбит/с (макс.) | 30000/1001 | 4:3
NTSC VCD | 352x240 | MPEG-1 | 1150 кбит/с | 44100 Гц | MP2 | 224 кбит/с | 24000/1001, 30000/1001 | 4:3
PAL DVD | 720x576, 704x576, 352x576, 352x288 | MPEG-2 | 9800 кбит/с | 48000 Гц | MP2,AC-3,PCM | 1536 кбит/с (макс.) | 25 | 4:3, 16:9 (только для 720x576)
PAL DVD | 352x288 | MPEG-1 | 1856 кбит/с | 48000 Гц | MP2,AC-3,PCM | 1536 кбит/с (макс.) | 25 | 4:3, 16:9
PAL SVCD | 480x576 | MPEG-2 | 2600 кбит/с | 44100 Гц | MP2 | 384 кбит/с (макс.) | 25 | 4:3
PAL VCD | 352x288 | MPEG-1 | 1152 кбит/с | 44100 Гц | MP2 | 224 кбит/с | 25 | 4:3

Если Ваш фильм имеет пропорции 2.35:1 (большинство современных фильмов с обилием движения), для создания DVD или VCD придется добавить черные полосы или обрезать фильм до 16:9. Добавляя черные полосы, пытайтесь выровнять их размеры на границу в 16 пикселов, чтобы минимизировать влияние на производительность кодирования. К счастью, DVD имеет достаточно избыточный битпоток, чтобы не сильно беспокоиться об эффективности кодирования, но SVCD и VCD весьма ограничены в битпотоке и требуют определенных усилий для достижения приемлемого качества.

#### Ограничения на размер GOP

DVD, VCD, и SVCD также ограничивают Вас относительно низкими размерами GOP (Group of Pictures, Группа Изображений). Для материала с 30 fps максимальный допустимый размер GOP равен 18. Для 25 или 24 fps, максимум равен 15. Размер GOP устанавливается опцией `keyint`.

#### Ограничения на битпоток

VCD видео должно быть CBR с 1152 кбит/с. Это сильное ограничение усугубляется, к тому же, чрезвычайно низким размером vbv буфера, равным 327 килобит. SVCD допускает различные значения видео битпотока вплоть до 2500 кбит/с и не так сильно стесняющий размер vbv буфера, равный 917 килобит. У DVD видео битпоток может свободно меняться вплоть до 9800 kbps (хотя обычный поток равен примерно половине этого значения), а размер vbv буфера равен 1835 килобит.

### Опции вывода

У MEncoder есть опции, управляющие выходным форматом. Используя их, можно дать указание создать файл корректного типа.

Для VCD и SVCD опции называются xvcd и xsvcd, потому что они являются расширенными форматами. Они не полностью совместимы, в основном, потому что не содержат смещений развёртки. Если нужно создать образ SVCD, следует передать выходной файл программе vcdimager.

VCD:

    -of mpeg -mpegopts format=xvcd

SVCD:

    -of mpeg -mpegopts format=xsvcd

DVD (с временными метками на каждом кадре, если возможно):

    -of mpeg -mpegopts format=dvd:tsaf

DVD с NTSC Pullup:

    -of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001

Это делает возможным кодирование 24000/1001 fps построчного содержимого с частотой 30000/1001 fps, с одновременным сохранением совместимости с DVD.

#### Пропорции

Аргумент aspect в `-lavcopts` используется для кодирования коэффициента пропорций файла. Коэффициент пропорций используется в процессе воспроизведения для восстановления правильного размера видео.

16:9 or "Широкоэкранный"

    -lavcopts aspect=16/9

4:3 or "Полноэкранный"

    -lavcopts aspect=4/3

2.35:1 or "Кинематографический" NTSC

    -vf scale=720:368,expand=720:480 -lavcopts aspect=16/9

Для вычисления правильного размера масштабирования используйте расширенную ширину NTSC 854/2.35 = 368

2.35:1 or "Кинематографический" PAL

    -vf scale=720:432,expand=720:576 -lavcopts aspect=16/9

Для вычисления правильного размера масштабирования используйте расширинную ширину PAL 1024/2.35 = 432

#### Сохранение A/V синхронизации

Для того, чтобы сохранять аудио/видео синхронизацию на протяжении всего кодирования, MEncoder должен выбрасывать или дублировать кадры. Это довольно неплохо работает при мультиплексировании в AVI файл, но с другими мультиплексорами, такими как MPEG, почти гарантировано приведет к нарушению A/V синхронизации. Для избежания подобных проблем, необходимо добавить видео фильтр `harddup` в конец цепочки фильтров. Дополнительную техническую информацию о `harddup` можно найти в разделе Улучшение мультиплексирования и надежности A/V синхронизации или в man руководстве.

#### Преобразование частоты дискретизации

Если частота дискретизации в оригинальном файле не совпадает с требуемой в целевом формате, необходимо преобразование. Его можно осуществить, совместно используя опцию `-srate` и аудио фильтр`-af lavcresample`.

DVD:

    -srate 48000 -af lavcresample=48000

VCD и SVCD:

    -srate 44100 -af lavcresample=44100

### Использование libavcodec для VCD/SVCD/DVD кодирования

#### Введение

Используя соответствующие опции, можно применять libavcodec для создания VCD/SVCD/DVD совместимого видео.

#### lavcopts

Это список полей в `-lavcopts`, которые может потребоваться изменить, чтобы создать совместимый фильм для VCD, SVCD или DVD:

- acodec: `mp2` для VCD, SVCD, или PAL DVD; `ac3` наиболее часто используется для DVD. Для DVD также может использоваться PCM, но это, по большей части, бесполезная трата свободного места. Имейте в виду, что MP3 аудио не совместимо ни с одним из этих форматов, но, как бы то ни было, часто проигрыватели не испытывают никаких проблем с его воспроизведением.

- abitrate: 224 для VCD; вплоть до 384 для SVCD; вплоть до 1536 для DVD, но распространенным является диапазон значений от 192 кбит/с для стерео до 384 кбит/с для 5.1 звука.

- vcodec: `mpeg1video` для VCD; `mpeg2video` для SVCD; `mpeg2video` обычно используется для DVD, но Вы также можете использовать `mpeg1video` для CIF разрешений.

- keyint: Используется для установки размера GOP. 18 для 30fps материала или 15 для 25/24 fps материала. Коммерческие изготовители, похоже, предпочитают значение интервала ключевых кадров, равное 12. Можно значительно увеличить это значение и все еще сохранять совместимость с большинством проигрывателей. `keyint` равное 25 не должно вызывать никаких проблем.

- vrc_buf_size: 327 для VCD, 917 для SVCD и 1835 ддя DVD.

- vrc_minrate: 1152 для VCD. Может не указываться для SVCD и DVD.

- vrc_maxrate: 1152 для VCD; 2500 для SVCD; 9800 для DVD. Для SVCD и DVD Вы, возможно, пожелаете использовать меньшие значения в зависимости от Ваших личных требований и предпочтений.

- vbitrate: 1152 для VCD; вплоть до 2500 для SVCD; вплоть до 9800 для DVD. Для двух последний форматов, vbitrate следует установить на основании личных предпочтений. Например, если Вы настаиваете на размещении 20 или около того часов видео на DVD, можете использовать vbitrate=400. Качество получившегося видео, возможно, будет довольно плохим. Если Вы пытаетесь выжать максимально возможное качество на DVD, используйте vbitrate=9800, но имейте в виду, что это ограничит Вас менее чем одним часом видео на однослойном DVD.

- vstrict: `vstrict`=0 следует использовать для создания DVD. Без этой опции MEncoder создает поток, который не может быть корректно декодирован некоторыми аппаратными DVD проигрывателями.

#### Примеры

Это обычный минимальный набор `-lavcopts` для кодирования видео:

VCD:

    -lavcopts vcodec=mpeg1video:vrc_buf_size=327:vrc_minrate=1152:\
    vrc_maxrate=1152:vbitrate=1152:keyint=15:acodec=mp2

SVCD:

    -lavcopts vcodec=mpeg2video:vrc_buf_size=917:vrc_maxrate=2500:vbitrate=1800:\
    keyint=15:acodec=mp2

DVD:

    -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=15:vstrict=0:acodec=ac3

#### Расширенные опции

Для достижения более высокого качества кодирования, Вы также можете добавить опции lavcopts, улучшающие качество, такие как `trell`, `mbd=2` и другие. Обратите внимание, что `qpel` и `v4mv`, часто полезные с MPEG-4, не применимы к MPEG-1 или MPEG-2. Также, если Вы хотите выполнить очень высококачественное кодирование DVD, может быть полезным добавление `dc=10` в lavcopts. Это может помочь подавить появление блоков в однородно окрашенных областях. Подводя итог, вот пример настроек lavcopts для высококачественного DVD:

    -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=8000:\
    keyint=15:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:\
    vqmin=1:lmin=1:dc=10:vstrict=0

### Кодирование звука

VCD и SVCD поддерживают звук MPEG-1 layer II, используя одну из toolame, twolame, или MP2 libavcodec кодировщик. libavcodec MP2 не так хорош, как остальные две библиотеки, однако, он должен быть всегда доступен для использования. VCD поддерживает только звук с постоянным битпотоком (CBR), в то время как SVCD также поддерживает и переменный (VBR). Будьте осторожны, используя VBR, поскольку некоторые плохие аппаратные проигрыватели могут не очень хорошо его поддерживать.

Для DVD звука используется AC-3 кодек из libavcodec.

#### toolame

Для VCD и SVCD:

    -oac toolame -toolameopts br=224

#### twolame

Для VCD и SVCD:

    -oac twolame -twolameopts br=224

#### libavcodec

Для 2 канального DVD звука:

    -oac lavc -lavcopts acodec=ac3:abitrate=192

Для DVD с 5.1 звуком:

    -channels 6 -oac lavc -lavcopts acodec=ac3:abitrate=384

Для VCD и SVCD:

    -oac lavc -lavcopts acodec=mp2:abitrate=224

### Собирая все вместе

Этот раздел демонстрирует некоторые полные команды для создания VCD/SVCD/DVD совместимого видео.

#### PAL DVD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
      -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \
      -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 \
      -o фильм.mpg фильм.avi

#### NTSC DVD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
      -vf scale=720:480,harddup -srate 48000 -af lavcresample=48000 \
      -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 30000/1001 \
      -o фильм.mpg фильм.avi

#### PAL AVI, содержащий AC-3 звук, в DVD

Если исходный материал уже содержит AC-3 звук, используйте -oac copy вместо перекодирования.

    mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
      -vf scale=720:576,harddup -ofps 25 \
      -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=15:vstrict=0:aspect=16/9 -o фильм.mpg фильм.avi

#### NTSC AVI, содержащий AC-3 звук, в DVD

Если исходный материал уже содержит AC-3 звук и является NTSC @ 24000/1001 fps:

    mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf:telecine \
      -vf scale=720:480,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:\
      vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:aspect=16/9 -ofps 24000/1001 \
      -o фильм.mpg фильм.avi

#### PAL SVCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \
        scale=480:576,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917:vrc_minrate=600:\
    vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \
        -o фильм.mpg фильм.avi

#### NTSC SVCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd  -vf \
        scale=480:480,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg2video:mbd=2:keyint=18:vrc_buf_size=917:vrc_minrate=600:\
    vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \
        -o фильм.mpg фильм.avi

#### PAL VCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \
        scale=352:288,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:\
    vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \
        -o фильм.mpg фильм.avi

#### NTSC VCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \
        scale=352:240,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg1video:keyint=18:vrc_buf_size=327:vrc_minrate=1152:\
    vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \
        -o фильм.mpg фильм.avi