1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-22 06:42:03 +00:00
mpv/DOCS/xml/ru/encoding-guide.xml
voroshil be8db49d45 r22547: fix up some longer than 80 char lines , and use suggestion from Diego.
r22570: dont start newline with a space and readd subdirectory
r22718: add new audio and video codecs to libavcodec list
r22748: add  png and gif encoders, how to use them with mencoder is another question
r22749: split sonic into sonic/sonicls and wma into wmav1/wmav2
r22750: add rest of lavc encoders to list (vcr1, cljr, jpegls, ffvhuff, msmpeg4v1)
r22751: gsm requires libgsm so remove it
r22752: aiff isnt there as well, TEST FIRST, THEN DOCUMENT COMPN!
r22753: ok so cljr , vcr1 and msmpegv1 dont actually work... removed
r22679: Some more details for the mga_vid section taken from drivers/README.
r22686: tdfx_vid compilation has been simplified.
r22695: Add a link to Attila's mga_vid port to Linux 2.6.x.
r22704: 'make install' now takes care of most manual installation steps for *_vid.o.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22790 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-03-24 03:28:32 +00:00

5498 lines
302 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- synced with r22753 -->
<chapter id="encoding-guide">
<title>Кодирование с <application>MEncoder</application></title>
<sect1 id="menc-feat-dvd-mpeg4">
<title>Создание высококачественного MPEG-4 ("DivX") рипа из DVD фильма</title>
<para>
Одним часто задаваемым вопросом является "Как мне сделать рип самого высокого
качества для заданного размера?". Другой вопрос "Как мне создать DVD рип с самым
высоким возможным качеством? Я не беспокоюсь о размере файла, мне нужно лишь
наилучшее качество.".
</para>
<para>
Последний вопрос, похоже, отчасти неверно сформулирован. В конце концов, если
Вы не беспокоитесь о размере файла, почему бы просто не скопировать весь MPEG-2
видео поток с DVD? Конечно, Ваш AVI файл будет занимать около 5GB,
но если Вы желаете наилучшее качество и не волнуетесь о размере, то это,
несомненно, лучшее решение.
</para>
<para>
В действительности, причиной, по которой Вы хотите перекодировать DVD в MPEG-4,
является именно Ваше <emphasis role="bold">беспокойство</emphasis>
о размере файла.
</para>
<para>
Сложно дать универсальный рецепт о создании DVD рипа очень высокого
качества. Необходимо рассмотреть несколько факторов, и Вы должны
понимать эти детали, иначе Вы, скорее всего, разочаруетесь своими
результатами. Ниже мы исследуем некоторые из этих вопросов, а затем
рассмотрим пример. Мы предполагаем, что Вы используете
<systemitem class="library">libavcodec</systemitem> для кодирования видео,
хотя теория также применима и к другим кодекам.
</para>
<para>
Если это кажется для Вас слишком сложным, то Вам, пожалуй, следует использовать
один из многочисленных неплохих фронтендов, указанных в
<ulink url="http://www.mplayerhq.hu/design7/projects.html#mencoder_frontends">разделе MEncoder</ulink>
нашей страницы родственных проектов.
Так Вы должны получить высококачественные рипы без особых размышлений,
поскольку большинство этих утилит разработаны для принятия умных решений за Вас.
</para>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-preparing-encode">
<title>Подготовка к кодированию: Идентификация исходного материала и кадровой
частоты</title>
<para>
Прежде, чем даже задумываться о кодировании фильма, Вам необходимо выполнить
некоторые предварительные действия.
</para>
<para>
Первым и наиболее важным шагом перед кодированием должно быть определение
типа содержимого, с которым Вы работаете.
Если источником Ваших исходных материалов является DVD или
широковещательное/кабельное/спутниковое TV, оно будет содержаться в одном из
двух форматов: NTSC для Северной Америки и Японии, PAL для Европы и т.д..
Однако, важно понимать, что это только форматирование для показа на
телевидении, и оно часто
<emphasis role="bold">не</emphasis> соответствует
исходному формату фильма.
Опыт показывает, что NTSC материал существенно более сложен для кодирования,
т.к. в нём содержится больше элементов, которые нужно идентифицировать.
Для проведения удачного кодирования, Вам необходимо знать исходный формат.
Отказ от принятия этого во внимание приведёт к различным дефектам в Вашем
кодировании, включая безобразные гребешки (артефакты чересстрочной развёртки)
и повторяющиеся или даже потерянные кадры.
Кроме ухудшения картинки, артефакты так же уменьшают эффективность кодирования:
Вы получите худшее качество на единицу битпотока.
</para>
<sect3 id="menc-feat-dvd-mpeg4-preparing-encode-fps">
<title>Определение кадровой частоты источника</title>
<para>
Вот список, содержащий общие типы исходных материалов, где они,
преимущественно, встречаются и их свойства:
</para>
<itemizedlist>
<listitem><para>
<emphasis role="bold">Стандартный фильм</emphasis>: Производятся
для театральных показов на 24 fps [кадр/сек].
</para></listitem>
<listitem><para>
<emphasis role="bold">PAL видео</emphasis>: Записывается с помощью
PAL видеокамеры при 50 полях в секунду.
Поле состоит только из чётных или нечётных линий кадра.
Телевидение было разработано для обновления этих полей попеременно,
что используется как вид дешёвого аналогового сжатия.
Человеческий глаз, предположительно, компенсирует это, но однажды
поняв чересстрочную развёртку, Вы научитесь видеть её и на TV и
Вам больше никогда не понравится телевидение.
Два поля <emphasis role="bold">не</emphasis> составляют
целый кадр, поскольку они снимаются с задержкой в 1/50 секунды
и, следовательно, не формируют одно изображение, за исключением случая
полного отсутствия движения.
</para></listitem>
<listitem><para>
<emphasis role="bold">NTSC видео</emphasis>: Записывается с помощью
NTSC видеокамеры при 60000/1001 полях в секунду, или 60 полях в секунду
в эпоху чёрно-белого TV.
В других отношениях аналогично PAL.
</para></listitem>
<listitem><para>
<emphasis role="bold">Анимация</emphasis>: Обычно рисуется на 24 fps,
но также существуют разновидности со смешанной кадровой частотой.
</para></listitem>
<listitem><para>
<emphasis role="bold">Компьютерная графика (CG)</emphasis>: Может
быть с любой частотой кадров, но некоторые встречаются чаще остальных;
24 и 30 кадров в секунду типичны для NTSC, и 25 fps типично для PAL.
</para></listitem>
<listitem><para>
<emphasis role="bold">Старый фильм</emphasis>: Различные низкие
кадровые частоты.
</para></listitem>
</itemizedlist>
</sect3>
<sect3 id="menc-feat-dvd-mpeg4-preparing-encode-material">
<title>Идентификация исходного материала</title>
<para>
Фильмы, состоящие из кадров, называются фильмами с построчной (или прогрессивной)
развёрткой, а состоящие из независимых полей &mdash; фильмами с чересстрочной
развёрткой или просто видео; однако, последний термин двусмысленный.
</para>
<para>
Из-за дальнейших усложнений, некоторые фильмы будут смесью
нескольких, указанных выше.
</para>
<para>
Наиболее важным различием между всеми этими форматами является
то, что одни из них основаны на кадрах, а другие &mdash; на полях.
<emphasis role="bold">Любой</emphasis> фильм, подготовленный для
просмотра на телевидении (включая DVD), преобразуется в формат,
основанный на полях.
<!-- FIXME: Существует ли лучший *краткий* (1-2 слова) перевод для
терминов pulldown и telecine? В литературе, которую я нашёл,
используют или указанные мной, по сути дела, транслитерации,
или так и оставляют английские названия.
А точный перевод можно выполнить только целым предложением
(т.е. определением), что совершенно неуместно в контексте
данного документа, где эти термины часто встречаются. -->
Различные методы, с помощью которых это может быть сделано, совокупно
называются "телесин" (англ. telecine), одним из вариантов которого
является отвратительный NTSC "3:2 пулдаун" (англ. pulldown).
За исключением случаев, когда формат исходного материала был
также основан на полях (и с такой же частотой полей), Вы получите
фильм в формате отличном от исходного.
</para>
<itemizedlist>
<title>Существует несколько общих типов пулдауна:</title>
<listitem><para>
<emphasis role="bold">PAL 2:2 пулдаун</emphasis>: Наилучший из всех.
Каждый кадр показывается за время длительности двух полей путем
извлечения чётных и нечётных строк и их попеременного показа.
Если в исходном материале 24 fps, то это ускоряет воспроизведение фильма
на 4%.
</para></listitem>
<listitem><para>
<emphasis role="bold">PAL 2:2:2:2:2:2:2:2:2:2:2:3 пулдаун</emphasis>:
Каждый 12-й кадр показывается за время длительности трёх полей,
вместо двух.
Это помогает избежать проблемы 4%-го ускорения, но делает обращение
процесса существенно более сложным.
Такие вещи обычно наблюдаются в музыкальных произведениях, где
изменение скорости на 4% существенно повредит музыкальную партитуру.
</para></listitem>
<listitem><para>
<emphasis role="bold">NTSC 3:2 телесин</emphasis>: Кадры показываются
попеременно за время длительности 3-х полей или 2-х полей.
Это даёт частоту полей в 2.5 раза больше исходной частоты кадров.
Результат также очень незначительно замедляется от 60 до 60000/1001
полей в секунду для поддержания частоты полей NTSC.
</para></listitem>
<listitem><para>
<emphasis role="bold">NTSC 2:2 пулдаун</emphasis>: Используется
для отображения материала с 30 fps на NTSC.
Так же мил, как и 2:2 PAL пулдаун.
</para></listitem>
</itemizedlist>
<para>
Так же существуют методы для преобразования между NTSC и PAL видео,
но подобные темы выходят за рамки данного руководства.
Если Вам попался такой фильм, и Вы хотите кодировать его,
лучшим решением будет найти копию в исходном формате.
Преобразование между этими двумя форматами вносит большие потери
и не может быть точно обращено, так что Ваше кодирование
существенно пострадает, если оно делается из преобразованного
источника.
</para>
<para>
Когда видео находится на DVD, последовательные пары полей
группируются как кадр, даже если они не предназначены для
одновременного отображения.
Стандарт MPEG-2, используемый на DVD и цифровом TV предоставляет
возможность одновременно кодировать исходные кадры с построчной
развёрткой и сохранять число полей, в течении которых кадр
должен быть показан, в его заголовке.
Если был использован такой метод, фильм часто будет называться
как "мягкий телесин", т.к. процесс только указывает DVD-плееру
о необходимости применения пулдауна к фильму, не изменяя при этом
сам фильм.
Этот случай существенно предпочтителен, т.к. он может быть легко обращён
(в действительности, проигнорирован) кодером и т.к. он сохраняет
максимальное качество.
Однако, многие широковещательные и DVD студии не используют
надлежащую технологию кодирования и вместо этого производят
фильмы с "жёстким телесином", где поля в действительности
повторяются в кодированном MPEG-2.
</para>
<para>
Порядок действия в таких случаях будет описан
<link linkend="menc-feat-telecine">позже в данном руководстве</link>.
Сейчас мы дадим Вам несколько советов по идентификации типа
материала, с которым Вы работаете:
</para>
<itemizedlist>
<title>Области NTSC:</title>
<listitem><para>
Если при просмотре Вашего фильма <application>MPlayer</application>
выводит, что частота кадров была изменена до 24000/1001 и она
никогда не меняется обратно, то это почти наверняка содержимое
с построчной развёрткой, которое было подвергнуто
"мягкому телесину".
</para></listitem>
<listitem><para>
Если <application>MPlayer</application> отображает попеременные
переключения частоты кадров между 24000/1001 и 30000/1001, и Вы
иногда видите "гребешки", есть несколько возможностей.
Сегменты с 24000/1001 fps почти наверняка являются "мягко
телесиненным" содержимым с построчной развёрткой, но части с
30000/1001 fps могут быть как "жёстко телесиненым" содержимым
с 24000/1001 fps, так и NTSC видео с 60000/1001 полями в секунду.
Используйте два нижеследующих руководства для определения того,
с каким случаем Вы имеете дело.
</para></listitem>
<listitem><para>
Если <application>MPlayer</application> никогда не показывает
изменения кадровой частоты и каждый отдельный кадр, где есть
движение, оказывается гребёнкой, Ваш фильм есть NTSC видео с
60000/1001 полями в секунду.
</para></listitem>
<listitem><para>
Если <application>MPlayer</application> никогда не показывает
изменения кадровой частоты и два кадра из каждых пяти оказываются
гребёнкой, Ваш фильм представляет собой "жёстко телесиненное"
содержимое с 24000/1001 fps.
</para></listitem>
</itemizedlist>
<itemizedlist>
<title>Области PAL:</title>
<listitem><para>
Если Вы не видите никакой гребёнки, Ваш фильм есть 2:2 пулдаун.
</para></listitem>
<listitem><para>
Если Вы видите попеременную гребёнку каждые полсекунды,
Ваш фильм представляет собой 2:2:2:2:2:2:2:2:2:2:2:3 пулдаун.
</para></listitem>
<listitem><para>
Если Вы всегда видите гребёнки во время движения, значит Ваш
фильм является PAL видео с 50 полями в секунду.
</para></listitem>
</itemizedlist>
<note><title>Подсказка:</title>
<para>
<application>MPlayer</application> может замедлить воспроизведение
фильма с опцией -speed или воспроизводить его покадрово.
Попробуйте использовать опцию <option>-speed 0.2</option> для
очень медленного просмотра фильма или несколько раз нажмите
клавишу "<keycap>.</keycap>" для воспроизведения одного кадра
за раз и идетнифицируйте образец, если не можете его увидеть на
полной скорости.
</para>
</note>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-2pass">
<title>Постоянный квантователь против многопроходности</title>
<para>
Возможно кодировать Ваш фильм, широко варьируя качество.
С современными видеокодерами и небольшим сжатием перед кодированием
(уменьшением размера и шумов) возможно достичь очень хорошего
качества при размере 700 МБ для 90-110-минутного широкоэкранного фильма.
Более того, всё, кроме самых длинных фильмов, может быть кодировано
с почти безупречным качеством на 1400 МБ.
</para>
<para>
Есть три подхода при кодировании видео: постоянный битпоток (CBR),
постоянный квантователь и многопроходность (ABR или усреднённый битпоток).
</para>
<para>
Сложность кадров фильма и, таким образом, число битов, нужных для их
сжатия может существенно отличаться от одной сцены к другой.
Современные видеокодеры могут подстраиваться под это в процессе
работы и варьировать битпоток.
Однако, в таких простых режимах как CBR кодеры не знают загруженность
битпотока в последующих сценах и т.о. не могут превысить затребованный
битпоток для больших промежутков времени.
Более продвинутые режимы, такие как многопроходный режим, могут
учитывать статистику предыдущих проходов; это решает проблему,
упомянутую выше.
</para>
<note><title>Замечание:</title>
<para>
Большинство кодеков, поддерживающих ABR кодирование, поддерживают
только двупроходный режим, в то время как некоторые другие, такие
как <systemitem class="library">x264</systemitem>,
<systemitem class="library">Xvid</systemitem>
и <systemitem class="library">libavcodec</systemitem> поддерживают
многопроходность, несколько улучшающую качество на каждом проходе,
однако, это улучшение не измеримо и не заметно после 4-го прохода
или около того.
Поэтому, в данном разделе дву- и многопроходность будут
использоваться взаимозаменяемо.
</para>
</note>
<para>
В каждом из этих режимов видеокодек (такой как
<systemitem class="library">libavcodec</systemitem>)
разбивает видеокадр на макроблоки размером 16х16 пикселей и потом
применяет квантователь к каждому макроблоку. Чем меньше квантоваль,
тем лучше качество и выше битпоток.
Метод, используемый видео кодером для определения того, какой
квантователь использовать для данного макроблока, варьируется и
подлежит тонкой настройке. (Это крайнее упрощение реального
процесса, но основная концепция полезна для понимания.)
</para>
<para>
Когда Вы указываете постоянный битпоток, видеокодек будет кодировать
видео, отбрасывая детали столько, сколько необходимо и настолько мало,
насколько это возможно с целью оставаться ниже заданного битпотока.
Если Вас действительно не волнует размер файла, Вы можете также
использовать CBR и указать бесконечный битпоток. (На практике это
означает значение, достаточно большое для обозначения отсутствия
предела, например, 10000 Кбит.) В результате, без реального ограничения
битпотока, кодек использует наименьший возможный квантователь для
каждого макроблока (как указано опцией
<option>vqmin</option> для
<systemitem class="library">libavcodec</systemitem>, равной 2 по умолчанию).
Как только Вы укажите настолько низкий битпоток, что кодек будет
вынужден использовать более высокий квантователь, Вы почти наверняка
испортите качество Вашего видео.
Чтобы избежать этого, Вам, вероятно, придётся уменьшить размеры
Вашего видео, согласно методу, описанному далее в этом руководстве.
В общих чертах, Вам следует избегать CBR совсем, если Вы заботитесь
о качестве.
</para>
<para>
С постоянным квантователем кодек использует для всех макроблоков
один и тот же квантователь, указанный в опции
<option>vqscale</option> (для
<systemitem class="library">libavcodec</systemitem>).
Если Вы хотите рип наивысшего возможного качества, снова не взирая
на битпоток, Вы можете использовать
<option>vqscale=2</option>.
Это приведёт к тому же битпотоку и PSNR (пику отношения сигнала к шуму),
что и CBR с
<option>vbitrate</option>=бесконечности и значением по умолчанию
<option>vqmin</option>, равным 2.
</para>
<para>
Проблема с постоянным квантованием заключается в том, что кодек использует
заданный квантователь вне зависимости от того, требуется это для
макроблока или нет. То есть возможно использование большего квантователя
для макроблока без ухудшения видимого качества. Зачем тратить биты на
излишне низкий квантователь? У Вашего процессора есть столько тактов,
сколько есть времени, но имеется лишь ограниченное число битов на
жёстком диске.
</para>
<para>
При двупроходном кодировании первый проход создаст рип фильма так,
как будто это был CBR, но сохранит лог свойств для каждого кадра.
Эта информация затем будет использована во время второго прохода
для принятия интеллектуальных решений о том, какой квантователь
следует использовать. Во время быстрого движения или сцен с
высокой детализацией с большой вероятностью будут использованы
бОльшие квантователи, а во время медленного движения или сцен
с низкой детализацией &mdash; меньшие.
Обычно количество движения играет существенно более важную роль,
чем количество деталей.
</para>
<para>
Если Вы используете <option>vqscale=2</option>, то Вы теряете биты.
Если Вы используете <option>vqscale=3</option>, то Вы не получаете
рип наивысшего качества. Предположим, Вы делаете рип DVD, используя
<option>vqscale=3</option>, результат получается 1800 Кбит.
Если Вы сделаете двупроходное кодирование с
<option>vbitrate=1800</option>, получившееся видео будет обладать
<emphasis role="bold">лучшим качеством</emphasis> для
<emphasis role="bold">того же битпотока</emphasis>.
</para>
<para>
После того, как Вы сейчас убедились, что два прохода &mdash; это путь
к действию, возникает вопрос о том, какой битпоток использовать?
Ответ таков, что нет единого ответа. В идеале, Вы хотите выбрать
битпоток, при котором достигается наилучший баланс между качеством
и размером файла. Здесь возможны вариации в зависимости от
исходного видеоматериала.
</para>
<para>
Если размер не важен, хорошей отправной точкой для рипа очень высокого
качества будет 2000 Кбит +/- 200 Кбит.
Для видеоматериала с быстрым движением или высокой детализацией
или просто если у Вас очень разборчивый глаз, Вы можете использовать
2400 или 2600.
Для некоторых DVD Вы не заметите разницы на 1400 Кбит. Хорошей идеей
является экспериментирование со сценами на разных битпотоках, чтобы
почувствовать разницу.
</para>
<para>
Если Вашей целью является определённый размер, Вам нужно как-нибудь
вычислить битпоток. Но перед этим, Вам нужно знать, сколько места
нужно зарезервировать по аудио дорожку(и), так что Вам необходимо
<link linkend="menc-feat-dvd-mpeg4-audio">извлечь их</link> сперва.
Вы можете рассчитать битпоток с помощью следующей формулы:
<systemitem>битпоток = (конечный_размер_в_МБайт - размер_звука_в_МБайт) *
1024 * 1024 / длительность_в_секундах * 8 / 1000</systemitem>.
Например, для сжатия двухчасового фильма в 702 МБ CD, с 60 МБ
аудио дорожкой, битпоток видео должен составлять:
<systemitem>(702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000
= 740 кбит/сек</systemitem>.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-constraints">
<title>Ограничения для эффективного кодирования</title>
<para>
Из-за особенностей MPEG-подобного сжатия, существуют различные
ограничения, которым Вы должны следовать для достижения
максимального качества.
MPEG разбивает видео на квадраты 16х16, называемые макроблоками.
Каждый макроблок состоит из 4 блоков 8х8 с информацией о люме
(интенсивности) и двух блоков 8х8 с информацией о хроме (цвете)
половинного разрешения (один для красно-бирюзовой оси и другой
для жёлто-голубой оси).
Даже если ширина и высота Вашего фильма не кратны 16, кодер
всё равно использует нужное количество макроблоков 16х16 для покрытия
всей области картинки, дополнительная область будет впустую потрачена.
Так что в интересах максимизации качества при фиксированном размере
файла, не стоит использовать размеры, не кратные 16.
</para>
<para>
У большинства DVD также есть определённое подобие чёрных полос на
краях. Если Вы их оставите, это может
<emphasis role="bold">сильно</emphasis> повредить качество
несколькими путями.
</para>
<orderedlist>
<listitem>
<para>
MPEG-подобное сжатие очень чувствительно к преобразованиям
частотных интервалов, в частности, к дискретному косинусному
преобразованию (DCT), которое аналогично преобразованию Фурье.
Этот вид сжатия эффективен для представления образов и сглаженных
переходов, но у него возникают проблемы с острыми краями.
Для кодирования последних Вам нужно гораздо больше битов, а иначе
у Вас появится артефакт, известный как ореолы.
</para>
<para>
Частотные преобразования (DCT) выполняются независимо для каждого
макроблока (на самом деле, для каждого блока), так что эта проблема
возникает только в случае попадания острого края внутрь блока.
Если Ваши чёрные поля возникают точно на границах, кратных 16
пикселям, это не проблема.
Однако, чёрные полосы на DVD редко хорошо расположены, так что
на практике Вам всегда придётся усекать стороны для избежания
этих проблем.
</para>
</listitem>
</orderedlist>
<para>
В дополнение к преобразованиям частотных интервалов, MPEG-подобное
сжатие использует векторы движения для отображения изменений от
одного кадра к другому. Векторы движения, естественно, работают
существенно менее эффективно для новых объектов, идущих от
краёв картинки, поскольку они отсутствуют в предыдущих кадрах.
Пока картинка простирается вплоть до края кодируемой области,
у векторов движения не возникает проблем с движением объектов
за пределы картинки. Однако, при наличии черных полей
могут возникнуть проблемы:
</para>
<orderedlist continuation="continues">
<listitem>
<para>
Для каждого макроблока MPEG-подобное сжатие сохраняет вектор,
определяющий какая часть предыдущего кадра должна быть скопирована
в этот макроблок как основа для предсказания следующего кадра.
Кодированию подлежит только оставшаяся разность. Если макроблок
простирается до края картинки и содержит часть чёрной полосы,
то векторы движения других частей картинки перепишут чёрную полосу.
Это означает, что много битов нужно потратить либо на повторное
чернение переписанной полосы, либо (что более вероятно) вектор
движения не будет использован вовсе и все изменения для этого
макроблока будут явно кодированы. Другими словами, эффективность
кодирования существенно уменьшается.
</para>
<para>
Ещё раз, эта проблема возникает только в случае, если чёрные полосы
не укладываются в границы, кратные 16.
</para>
</listitem>
<listitem>
<para>
Наконец, предположим, что у нас есть находящийся внутри картинки
макроблок и объект движется в этот блок от края изображения.
MPEG-подобное кодирование не может сказать "скопируй ту часть,
что внутри картинки, но не чёрную полосу". Так что чёрная полоса
также будет скопирована внутрь, в результате чего масса битов
будет потрачена на кодирование части изображения, которое должно
быть на месте полосы.
</para>
<para>
Для случаев, когда всё изображение движется к краю кодируемой
области, у MPEG есть специальные оптимизации для многократного
копирования пикселей на край картинки, когда вектор движения
идёт извне области кодирования. Эта возможность становится
бесполезной, если у фильма есть чёрные полосы. В отличии от
случаев 1 и 2, выравнивание границ до кратности 16 здесь
не поможет.
</para>
</listitem>
<listitem><para>
Несмотря на то, что границы полностью чёрные и никогда не изменяются,
существуют, как минимум, определённые накладные расходы, связанные
с наличием большего числа макроблоков.
</para></listitem>
</orderedlist>
<para>
Благодаря всем этим причинам, рекомендуется полностью урезать
чёрные полосы. Более того, если есть области шумов/искажений
на краях картинки, то их урезание также поспособствует улучшению
качества кодирования. Видеофилы, желающие сохранить оригинал как
можно более точно, могут возражать против такого усечения; но
если Вы не планируете кодировать при постоянном квантователе,
качество, полученное при усечении, существенно превысит потери
информации на краях.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-crop">
<title>Усечение и масштабирование</title>
<para>
Вспомните из предыдущего раздела, что конечный размер картинки,
подлежащей кодированию, должен быть кратен 16 (как высота, так
и ширина). Это может быть достигнуто усечением, масштабированием
или комбинацией того и другого.
</para>
<para>
Есть несколько рекомендаций для усечения, которым необходимо следовать
для избежания повреждения фильма.
Обычный формат YUV, 4:2:0, сохраняет хрому (информацию о цвете)
половинной дискретизации, т.е. хрома сохраняется в два раза реже
в каждом направлении, чем люма (информация об интенсивности).
Рассмотрите следующую диаграмму, где L обозначает точки дискретизации
люмы и C &mdash; хромы.
</para>
<informaltable>
<?dbhtml table-width="40%" ?>
<?dbfo table-width="40%" ?>
<tgroup cols="8" align="center">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<colspec colnum="3" colname="col3"/>
<colspec colnum="4" colname="col4"/>
<colspec colnum="5" colname="col5"/>
<colspec colnum="6" colname="col6"/>
<colspec colnum="7" colname="col7"/>
<colspec colnum="8" colname="col8"/>
<spanspec spanname="spa1-2" namest="col1" nameend="col2"/>
<spanspec spanname="spa3-4" namest="col3" nameend="col4"/>
<spanspec spanname="spa5-6" namest="col5" nameend="col6"/>
<spanspec spanname="spa7-8" namest="col7" nameend="col8"/>
<tbody>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
<row>
<entry spanname="spa1-2">C</entry>
<entry spanname="spa3-4">C</entry>
<entry spanname="spa5-6">C</entry>
<entry spanname="spa7-8">C</entry>
</row>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
<row>
<entry spanname="spa1-2">C</entry>
<entry spanname="spa3-4">C</entry>
<entry spanname="spa5-6">C</entry>
<entry spanname="spa7-8">C</entry>
</row>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Как Вы видите, строки и столбцы изображения естественным образом
идут в парах. Поэтому смещения и размеры усечения
<emphasis>должны</emphasis> быть чётными числами.
Иначе хрома перестанет правильно соответствовать люме.
Теоретически возможно усечение с нечётными смещениями, но оно
потребует преобразования хромы, что потенциально является
операцией с потерей качества и не поддерживается фильтром
усечения сторон crop.
</para>
<para>
Более того, видео с чересстрочной развёрткой дискретизируется
следующим образом:
</para>
<informaltable>
<?dbhtml table-width="80%" ?>
<?dbfo table-width="80%" ?>
<tgroup cols="16" align="center">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<colspec colnum="3" colname="col3"/>
<colspec colnum="4" colname="col4"/>
<colspec colnum="5" colname="col5"/>
<colspec colnum="6" colname="col6"/>
<colspec colnum="7" colname="col7"/>
<colspec colnum="8" colname="col8"/>
<colspec colnum="9" colname="col9"/>
<colspec colnum="10" colname="col10"/>
<colspec colnum="11" colname="col11"/>
<colspec colnum="12" colname="col12"/>
<colspec colnum="13" colname="col13"/>
<colspec colnum="14" colname="col14"/>
<colspec colnum="15" colname="col15"/>
<colspec colnum="16" colname="col16"/>
<spanspec spanname="spa1-2" namest="col1" nameend="col2"/>
<spanspec spanname="spa3-4" namest="col3" nameend="col4"/>
<spanspec spanname="spa5-6" namest="col5" nameend="col6"/>
<spanspec spanname="spa7-8" namest="col7" nameend="col8"/>
<spanspec spanname="spa9-10" namest="col9" nameend="col10"/>
<spanspec spanname="spa11-12" namest="col11" nameend="col12"/>
<spanspec spanname="spa13-14" namest="col13" nameend="col14"/>
<spanspec spanname="spa15-16" namest="col15" nameend="col16"/>
<tbody>
<row>
<entry namest="col1" nameend="col8">Верхнее поле</entry>
<entry namest="col9" nameend="col16">Нижнее поле</entry>
</row>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry spanname="spa1-2">C</entry>
<entry spanname="spa3-4">C</entry>
<entry spanname="spa5-6">C</entry>
<entry spanname="spa7-8">C</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry spanname="spa9-10">C</entry>
<entry spanname="spa11-12">C</entry>
<entry spanname="spa13-14">C</entry>
<entry spanname="spa15-16">C</entry>
</row>
<row>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry spanname="spa1-2">C</entry>
<entry spanname="spa3-4">C</entry>
<entry spanname="spa5-6">C</entry>
<entry spanname="spa7-8">C</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
<row>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry spanname="spa9-10">C</entry>
<entry spanname="spa11-12">C</entry>
<entry spanname="spa13-14">C</entry>
<entry spanname="spa15-16">C</entry>
</row>
<row>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
<entry>L</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Как Вы видите, структура повторяется только после 4 строк.
Так что для чересстрочного видео Ваше y-смещение и высота
усечения должны быть кратны 4.
</para>
<para>
Естественные разрешения DVD составляют 720x480 для NTSC и 720x576
для PAL, но существует флаг соотношения сторон, который указывает
является ли видео полноэкранным (4:3) или широкоэкранным (16:9).
Многие (если не большинство) широкоэкранных DVD не точно соответствуют
формату 16:9 и могут быть как 1.85:1, так и 2.35:1 (кинематографический формат).
Это означает, что в видео будут чёрные полосы, которые нужно усечь.
</para>
<para>
<application>MPlayer</application> предоставляет фильтр обнаружения
усечения, который определяет прямоугольник, до которго нужно усечь
(<option>-vf cropdetect</option>).
Запустите <application>MPlayer</application> с
<option>-vf cropdetect</option> и он выдаст настройки
усечения для удаления полей.
С целью получения точных параметров усечения, Вы должны проигрывать
фильм достаточно долго для того, чтоб была использована вся область
изображения.
</para>
<para>
Затем проверьте значения, полученные с помощью
<application>MPlayer</application>, используя командную строку,
выведенную <option>cropdetect</option>, и подстройте прямоугольник
при необходимости.
Фильтр <option>rectangle</option> может быть полезен, позволив
Вам интерактивно менять прямоугольник усечения для Вашего фильма.
Не забывайте следовать указанным выше руководствам по делимости,
чтобы не испортить выравнивание хромы.
</para>
<para>
В ряде случаев масштабирование может быть нежелательным.
Масштабирование по вертикальному направлению затруднено для
чересстрочного видео, и если Вы хотите сохранить чересстрочность,
Вам в большинстве случаев будет необходимо воздерживаться от
масштабирования.
Если Вы не будете масштабировать, но всё ещё желаете размеры,
кратные 16, то Вам придётся проводить излишнее усечение.
Не проводите неполное усечение, поскольку чёрные полосы очень
плохи для кодирования!
</para>
<para>
Поскольку MPEG-4 использует макроблоки 16х16, Вы должны убедиться,
что каждое измерение кодируемого видео кратно 16; иначе Вы ухудшите
качество, особенно на малых битпотоках. Вы можете сделать это,
округлив ширину и высоту прямоугольника усечения до ближайшего
меньшего целого, кратного 16.
Учитывая установленное ранее, при усечении Вы можете захотеть увеличить
смещение по Y на половину разности старой и новой высоты, так что
полученное видео будет браться из центра кадра.
И из-за способа дискретизации DVD видео, убедитесь, что смещение
есть чётное число. (Фактически, возьмите за правило никогда не
использовать нечётные величины для любых параметров усечения или
масштабирования видео.) Если Вы беспокоитесь из-за нескольких
излишне отброшенных битов, возможно, Вы предпочтёте взамен
масштабировать видео. Мы рассмотрим это ниже в нашем примере.
В действительности, Вы можете доверить фильтру
<option>cropdetect</option> сделать для Вас всё вышеупомянутое,
т.к. у него есть необязательный параметр округления
<option>round</option>, равный 16 по умолчанию.
</para>
<para>
Также будьте осторожны с "полутёмными" пикселями на краях. Убедитесь,
что они тоже отрезаются, иначе Вы будете тратить биты, которым есть
лучшее применение.
</para>
<para>
После всего выше сказанного и сделанного, Вы, вероятно, получите
видео не точно формата 1:85.1 или 2.35:1, а с чем-то близким
к этому. Вы можете вычислить новый коэффициент соотношения
сторон вручную, но <application>MEncoder</application>
предоставляет опцию для <systemitem class="library">libavcodec</systemitem>,
называемую <option>autoaspect</option>, которая сделает это для
Вас. Ни в коем случае не увеличивайте размер этого видео с целью
квадратизации пикселей, если Вы не желаете впустую потратить
место на жёстком диске.
Масштабирование должно выполняться при воспроизведении, и плеер
использует коэффициент соотношения сторон, сохранённый в AVI, для
определения правильного разрешения.
К сожалению, не все плееры используют эту информацию автомасштабирования,
поэтому Вам всё ещё может быть необходимо перемасштабирование.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-resolution-bitrate">
<title>Выбор разрешения и битпотока</title>
<para>
Если Вы не собираетесь кодировать в режиме постоянного квантователя,
Вам нужно выбрать битпоток.
Понятие битпотока очень просто: это среднее число битов, которые
будут использованы для сохранения Вашего фильма, в секунду.
Обычно битпоток измеряется в килобитах (1000 бит) в секунду.
Размер Вашего фильма на диске есть битпоток, умноженный на
длительность фильма, плюс небольшие накладные расходы
(см. раздел
<link linkend="menc-feat-dvd-mpeg4-muxing-avi-limitations">контейнер AVI</link>
для примера).
Остальные параметры, такие как масштабирование, усечение и т.п.
<emphasis role="bold">не</emphasis> изменят размер файла, пока
Вы также не измените битпоток!
</para>
<para>
Битпоток изменяется <emphasis role="bold">не</emphasis>
пропорционально разрешению.
То есть файл разрешением 320х240 с 200 кбит/сек не будет
того же качества, что этот же фильм разрешением 640х480
и 800 кбит/сек!
Для этого есть две причины:
<orderedlist>
<listitem><para>
<emphasis role="bold">Восприятие</emphasis>: Вы сильнее
замечаете MPEG артефакты, если они больше!
Артефакты возникают на масштабе блоков (8х8).
Ваш глаз не увидит ошибки в 4800 маленьких блоков так же
легко, как и в 1200 больших блоков (предполагая
масштабирование обоих фильмов на полный экран).
</para></listitem>
<listitem><para>
<emphasis role="bold">Теоретическая</emphasis>: Когда Вы
уменьшаете размер изображения, но продолжаете использовать
блоки того же размера (8х8) для пространственных частотных
преобразований, Вы перемещаете больше данных в высокочастотные
полосы. Грубо говоря, каждый пиксель содержит больше деталей,
чем раньше.
Так что несмотря на то, что Ваша картинка с уменьшенным
масштабом содержит 1/4 информации в пространственных направлениях,
она всё ещё может содержать большУю часть информации в
частотных интервалах (предполагая, что высокие частоты были
не использованы в оригинальном 640х480 изображении).
</para></listitem>
</orderedlist>
</para>
<para>
Последние руководства рекомендовали выбор битпотока и разрешения,
основываясь на приближении "бит на пиксель", но это обычно не
верно из-за упомянутых выше причин.
Похоже, лучшей оценкой является рост битпотока пропорционально
квадратному корню разрешения, так что 320х240 и 400 кбит/сек
должно быть сравнимо с 640х480 и 800 кбит/сек.
Однако, это не было строго проверено теоретически или эмпирически.
Кроме того, из-за существенного отличия фильмов по уровню шума,
деталей, количества движения и т.п., тщетно давать общие рекомендации
для "битов на длину диагонали" (аналог битов на пиксель, используя
квадратный корень).
</para>
<para>
Таким образом, мы обсудили сложность выбора битпотока и разрешения.
</para>
<sect3 id="menc-feat-dvd-mpeg4-resolution-bitrate-compute">
<title>Расчёт разрешения</title>
<para>
Следующие шаги помогут Вам рассчитать разрешение для Вашего
кодирования без слишком сильного искажения видео, учитывая
несколько видов информации об исходном видео.
Прежде всего, Вам необходимо рассчитать коэффициент соотношения
сторон для кодированного видео:
<systemitem>ARc = (Wc x (ARa / PRdvd )) / Hc</systemitem>
<itemizedlist>
<title>где:</title>
<listitem><para>
Wc и Hc &mdash; ширина и высота усечённого видео,
</para></listitem>
<listitem><para>
ARa &mdash; коэффициент соотношения сторон изображения, обычно 4/3 или 16/9,
</para></listitem>
<listitem><para>
PRdvd &mdash; отношение пикселей DVD, что равно 1.25=(720/576) для PAL
DVD и 1.5=(720/480) для NTSC DVD.
</para></listitem>
</itemizedlist>
</para>
<para>
Затем Вы можете рассчитать разрешение по X и Y, согласно определённому
фактору качества сжатия (CQ):
<systemitem>ResY = INT(SQRT( 1000*Битпоток/25/ARc/CQ )/16) * 16</systemitem>
и <systemitem>ResX = INT( ResY * ARc / 16) * 16</systemitem>.
</para>
<para>
Хорошо, но что такое CQ?
CQ соответствует числу битов на пиксель и на кадр для кодирования.
Грубо говоря, чем больше CQ, тем меньше вероятность увидеть
артефакты кодирования.
Однако, если у Вас есть заданный размер для Вашего фильма
(например, 1 или 2 CD), есть ограниченное общее число битов,
которые Вы можете потратить; поэтому важно найти хороший
компромисс между сжимаемостью и качеством.
</para>
<para>
CQ зависит от битпотока, эффективности видеокодека и разрешения фильма.
Обычно, в целях увеличения CQ, Вам нужно будет уменьшить размер
фильма, при условии, что битпоток, вычисленный как функция конечного
размера, и длина фильма постоянны.
С MPEG-4 ASP кодеками, такими как <systemitem class="library">Xvid</systemitem>
и <systemitem class="library">libavcodec</systemitem>, CQ
меньше 0.18 обычно приводит к изображению с большим числом
сегментов "квадратиками", из-за недостаточного числа битов для
кодирования информации в каждом макроблоке.
(MPEG4, как и многие другие кодеки, группирует пиксели в блоки по
несколько пикселей для сжатия изображения; если битов не хватает,
границы этих блоков заметны.)
Следовательно, благоразумно выбрать CQ в диапазоне от 0.20 до 0.22
для рипа на 1 CD и 0.26-0.28 для рипа на 2 CD при использовании
стандартных опций кодирования.
Более продвинутые опции кодирования, такие как указанные для
<link linkend="menc-feat-mpeg4-lavc-example-settings"><systemitem class="library">libavcodec</systemitem></link>
и
<link linkend="menc-feat-xvid-example-settings"><systemitem class="library">Xvid</systemitem></link>
должны сделать возможным получение того же качества с CQ в диапазоне
от 0.18 до 0.20 для рипа на 1 CD и 0.24-0.26 для рипа на 2 CD.
Используя MPEG-4 AVC кодеки, такие как
<systemitem class="library">x264</systemitem>, Вы можете использовать
CQ в диапазоне от 0.14 до 0.16 со стандартными опциями кодирования
и должны суметь достичь таких низких значений, как 0.10 - 0.12
с помощью
<link linkend="menc-feat-x264-example-settings">продвинутых опций кодирования <systemitem class="library">x264</systemitem></link>.
</para>
<para>
Пожалуйста, обратите внимание, что CQ &mdash; лишь показательная величина,
т.к. она зависит от кодируемого содержимого; CQ 0.18 может хорошо
смотреться для Бергмана (Bergman), в отличии от такого фильма как
Матрица (The Matrix), содержащего много сцен с быстрым движением.
С другой стороны, бесполезно увеличивать CQ выше 0.30, т.к. Вы
будете тратить биты без заметного увеличения качества.
Так же обратите внимание, что, как было указано выше в данном
руководстве, фильмам с низким разрешением (например, по сравнению с DVD)
необходим более высокий CQ для того, чтоб они выглядели хорошо.
</para>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-filtering">
<title>Фильтрация</title>
<para>
Изучение использования видео фильтров <application>MEncoder</application>
важно для получения хороших результатов кодирования.
Вся обработка видео выполняется посредством фильтров: усечение,
масштабирование, подстройка цвета, удаление шума, увеличение
чёткости, деинтерлейс (преобразование видео из чересстрочной
развёртки в построчную), телесин, обратный телесин и удаление
блочной сегментации &mdash; и это лишь некоторые из них.
Вместе с огромным количеством поддерживаемых входных форматов,
разнообразие фильтров, доступных в <application>MEncoder</application>,
является одним из его основных достоинств над другими аналогичными
программами.
</para>
<para>
Фильтры загружаются в цепочку с помощью опции -vf:
<screen>-vf фильтр1=опции,фильтр2=опции,...</screen>
Большинство фильтров используют численные значения опций,
разделённые двоеточиями, но синтаксис этих параметров различается
у разных фильтров, так что читайте мануал для детальной
информации о фильтрах, которые Вы желаете использовать.
</para>
<para>
Фильтры действуют на видео в порядке их загрузки.
Например, следующая цепочка:
<screen>-vf crop=688:464:12:4,scale=640:464</screen>
сперва усечёт область изображения до 688х464 с верхним левым
углом (12,4), а затем масштабирует результат до 640х464.
</para>
<para>
Некоторые фильтры нужно загружать в начале цепочки фильтров (или
рядом с ним) с целью получения преимущества от использования
информации после видеодекодера, которая будет потеряна или
искажена другими фильтрами.
Важнейшими примерами являются: <option>pp</option> (постобработка,
только при выполнении операций удаления блочной сегментации
(deblocking) или увеличения чёткости краёв (deringing)),
<option>spp</option> (другой фильтр постобработки, служащий для
удаления артефактов MPEG), <option>pullup</option> (обратный
телесин), и <option>softpulldown</option> (для преобразования
мягкого телесина в жёсткий).
</para>
<para>
В общем случае, Вам следует делать настолько мало фильтрации,
насколько это возможно, для того чтоб остаться близко к оригинальному
DVD источнику. Усечение часто необходимо (как описано выше), но
избегайте масштабирования видео. Несмотря на то, что уменьшение
размера иногда предпочтительно использованию бОльших
квантователей, нужно избегать и того, и другого: помните,
что мы с самого начала решили обменять биты на качество.
</para>
<para>
Также не корректируйте гамму, контрастность, яркость и т.п.. То,
что хорошо выглядит на Вашем мониторе, может плохо выглядеть
на других. Эти коррекции должны выполняться только при
воспроизведении.
</para>
<para>
Однако, есть одна вещь, которую Вы, быть может, захотите сделать &mdash;
это пропустить видео через очень слабый фильтр удаления шумов,
такой как <option>-vf hqdn3d=2:1:2</option>.
Ещё раз, причиной этому является то, что этим битам можно найти
лучшее применение: зачем тратить их, кодируя шум, если Вы просто
можете вернуть этот шум в процессе воспроизведения?
Увеличение параметров для <option>hqdn3d</option> дополнительно
улучшит сжимаемость, но увеличив значения слишком сильно, Вы рискуете
ухудшить различимость изображения.
Рекомендованные выше значения (<option>2:1:2</option>) слегка
консервативны; не бойтесь экспериментировать с более высокими
значениями и самостоятельно оценивать результаты.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-interlacing">
<title>Чересстрочная развёртка и телесин</title>
<para>
Почти все фильмы снимаются при 24 fps [кадр/сек]. Поскольку
в NTSC используется 30000/1001 fps, нужно выполнить некоторую
обработку для такого 24 fps видео, чтобы оно корректно
воспроизводилось при кадровой частоте NTSC. Этот процесс называется
3:2 пулдаун, обычно называемый телесин (поскольку пулдаун часто
применяется в процессе показа телевизионного фильма, англ. telecine);
и в упрощенном описании это работает путём замедления фильма до
24000/1001 fps и повтора каждого четвёртого кадра.
</para>
<para>
Однако, никакой специальной обработки не выполняется для видео
на PAL DVD, которое воспроизводится при 25 fps. (Технически PAL
может быть подверженным телесину, называемому 2:2 пулдаун, но на
практике это не применяется).
24 fps фильм просто проигрывается на 25 fps. В результате фильм
воспроизводится слегка быстрее, но если Вы не пришелец, то,
вероятно, не заметите разницы.
У большинства PAL DVD аудио скорректировано по высоте звука так,
что, воспроизводясь при 25 fps, оно звучит нормально, несмотря на
то, что аудиодорожка (и, следовательно, весь фильм) проигрываются
на 4% быстрее, чем NTSC DVD.
</para>
<para>
Поскольку видео на PAL DVD не переделывается, Вам не стоит
беспокоится о частоте кадров. У источника 25 fps и у Вашего
рипа будет 25 fps. Однако, если Вы делаете рип NTSC DVD фильма,
Вам, быть может, придётся выполнить обратный телесин.
</para>
<para>
Для фильмов, снятых на 24 fps, видео на NTSC DVD идёт либо с телесином
30000/1001, либо с построчной развёрткой 24000/1001 fps и
предназначается для телесина на лету с помощью DVD плеера.
С другой стороны, TV сериалы идут обычно только с чересстрочной развёрткой,
но без телесина. Это не строгое правило: есть сериалы с
чересстрочной развёрткой (например, Баффи, Убийца Вампиров
[Buffy the Vampire Slayer]), в то время как другие представляют
собой смесь построчной и чересстрочной развёртки (такие как
Ангел [Angel] или 24).
</para>
<para>
Настоятельно рекомендуется прочитать раздел о
<link linkend="menc-feat-telecine">работе с телесином и чересстрочной развёрткой в NTSC DVD</link>
для изучения способов обработки в разных ситуациях.
</para>
<para>
Однако, если Вы преимущественно делаете рипы фильмов, Вы, скорее
всего, имеете дело с 24 fps видео либо с построчной развёрткой,
либо с подвергнутым телесину; в последнем случае Вы можете использовать
<option>pullup</option> фильтр: <option>-vf
pullup,softskip</option>.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-encoding-interlaced">
<title>Кодирование чересстрочного видео</title>
<para>
Если Вы желаете кодировать фильм с чересстрочной развёрткой
(NTSC или PAL видео), Вам нужно решить, будете ли Вы его
преобразовывать в построчную развёртку или нет.
Хотя такое преобразование (деинтерлейс) сделает Ваш фильм
пригодным для дисплеев с построчной развёрткой, таких как
компьютерные мониторы и проекторы, это будет иметь свою цену:
частота полей уменьшится вдвое от 50 или 60000/1001 до 25 или
30000/1001 поля в секунду, и примерно половина информации в
Вашем фильме будет потеряна в сценах со значительным движением.
</para>
<para>
Поэтому, если Вы кодируете для высококачественных архивных целей,
не рекомендуется делать деинтерлейс. Вы всегда можете преобразовать
развёртку фильма в процессе воспроизведения (при воспроизведении
на устройствах с построчной развёрткой).
Мощность современных компьютеров вынуждает плееры использовать
фильтр деинтерлейса, что слегка ухудшает качество изображения.
Но плееры будущего будут способны имитировать дисплей TV с
чересстрочной развёрткой, выполняя деинтерлейс на полной частоте
полей и интерполируя 50 или 60000/1001 кадров в секунду для
чересстрочного видео.
</para>
<para>
С чересстрочным видео нужно работать особым образом:
</para>
<orderedlist>
<listitem><para>
Высота усечения и смещение по оси y должны быть кратны 4.
</para></listitem>
<listitem><para>
Любое вертикальное масштабирование должно выполняться в режиме
чересстрочной развёртки.
</para></listitem>
<listitem><para>
Фильтры постобработки и удаления шума могут не работать как
ожидается, только если Вы особо не позаботитесь об их
применении к одному полю за раз, иначе они могут
повредить видео при неверном использовании.
</para></listitem>
</orderedlist>
<para>
Учитывая вышесказанное, вот наш первый пример:
<screen>
mencoder <replaceable>захват.avi</replaceable> -mc 0 -oac lavc -ovc lavc -lavcopts \
vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
</screen>
Обратите внимание на опции <option>ilme</option> и <option>ildct</option>.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-av-sync">
<title>Замечания об аудио/видео синхронизации</title>
<para>
Алгоритмы аудио/видео (A/V) синхронизации <application>MEncoder</application>
были разработаны с целью восстановления файлов с повреждённой
синхронизацией.
Однако, в ряде случаев они могут привести к ненужному пропуску
или повторению кадров и, возможно, к лёгкой A/V рассинхронизации
корректных входных данных (конечно, проблемы A/V синхронизации
возникают только при обработке или копировании аудиотрека при
кодировании видео, что настоятельно рекомендуется).
Поэтому Вы можете переключиться на базовую A/V синхронизацию
с помощью опции <option>-mc 0</option> или разместить это в
конфигурационном файле <systemitem>~/.mplayer/mencoder</systemitem>,
если Вы работаете только с хорошими источниками (DVD, TV-захват,
высококачественные MPEG-4 рипы и т.п.), а не с повреждёнными
файлами ASF/RM/MOV.
</para>
<para>
Если Вы хотите дополнительно защититься от странных пропусков
и повторений кадров, Вы можете одновременно использовать опции
<option>-mc 0</option> и <option>-noskip</option>.
Это предотвратит <emphasis>любую</emphasis> A/V коррекцию, и
будет копировать кадры один в один, так что Вы не сможете это
использовать, если будете применять какие-либо фильтры, которые
непредсказуемо добавляют или отбрасывают кадры, либо если у
Вашего входного файла переменный битопоток!
Поэтому использование <option>-noskip</option> в общем случае не
рекомендуется.
</para>
<para>
Сообщалось о том, что так называемое трёхпроходное аудиокодирование,
поддерживаемое <application>MEncoder</application>, вызывало
A/V рассинхронизацию.
Это наверняка произойдёт при использовании совместно с некоторыми
фильтрами, поэтому сейчас <emphasis>не</emphasis> рекомендуется
использовать трёхпроходный аудио режим.
Эта возможность оставлена только для совместимости и для опытных
пользователей, понимающих когда это безопасно, а когда нет.
Если Вы ранее никогда не слышали о трёхпроходном режиме, забудьте
даже о том, что мы его упоминали!
</para>
<para>
Также были сообщения об A/V рассинхронизации при кодировании
со стандартного ввода (stdin) с помощью <application>MEncoder</application>.
Не делайте этого! Всегда взамен используйте файл или CD/DVD и т.п.
устройство.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-codec">
<title>Выбор видеокодека</title>
<para>
То, какой видеокодек лучше выбрать, зависит от нескольких
факторов, таких как размер, качество, устойчивость к ошибкам,
практичность и распространённость, многие из которых сильно
зависят от личных предпочтений и технических ограничений.
</para>
<itemizedlist>
<listitem>
<para>
<emphasis role="bold">Эффективность сжатия</emphasis>:
Достаточно очевидно, что большинство кодеков нового поколения
разработаны для увеличения качества и степени сжатия.
Поэтому, авторы данного руководства и многие другие люди полагают,
что Вы не можете ошибиться
<footnote id='fn-menc-feat-dvd-mpeg4-codec-cpu'><para>
Несмотря на это, будьте осторожны: для декодирования MPEG-4 AVC
видео с DVD разрешением необходима быстрая машина (например,
Pentium 4 свыше 1.5 ГГц или Pentium M свыше 1 ГГц).
</para></footnote>,
выбирая MPEG-4 AVC кодеки (например,
<systemitem class="library">x264</systemitem>)
вместо таких MPEG-4 ASP кодеков, как
<systemitem class="library">libavcodec</systemitem> MPEG-4 или
<systemitem class="library">Xvid</systemitem>.
(Опытные разработчики кодеков могут быть заинтересованы в
ознакомлении с точкой зрения Михаэля Нидермайера (Michael
Niedermayer)
"<ulink url="http://guru.multimedia.cx/?p=10">почему MPEG4-ASP отстой</ulink>".)
Аналогично, Вы должны получить лучшее качество с MPEG-4 ASP, по
сравнению с MPEG-2 кодеками.
</para>
<para>
Однако, новые кодеки, находящиеся в интенсивной разработке,
могут страдать от ещё не замеченных ошибок, которые могут
испортить кодирование. Просто это плата за использование
передовых технологий.
</para>
<para>
Более существенно то, что для начала использования нового кодека
необходимо потратить время на изучение его опций так, чтобы Вы
знали, что нужно подстраивать для достижения заданного качества
изображения.
</para>
</listitem>
<listitem><para>
<emphasis role="bold">Аппаратная совместимость</emphasis>:
Обычно необходимо длительное время для включения поддержки
последних видеокодеков в автономные видеоплееры.
В итоге, большинство поддерживает только MPEG-1 (наподобие
VCD, XVCD и KVCD), MPEG-2 (например, DVD, SVCD и KVCD) и MPEG-4
ASP (например, DivX,
<systemitem class="library">libavcodec</systemitem> LMP4 и
<systemitem class="library">Xvid</systemitem>)
(Осторожно: обычно поддерживаются не все возможности MPEG-4 ASP).
Пожалуйста, обратитесь к технической спецификации Вашего плеера
(если она доступна) или к гугл (google) для детальной информации.
</para></listitem>
<listitem>
<para>
<emphasis role="bold">Лучшее соотношение качества и времени кодирования</emphasis>:
Кодеки, уже использующиеся определённое время (например,
<systemitem class="library">libavcodec</systemitem> MPEG-4 и
<systemitem class="library">Xvid</systemitem>) обычно сильно
оптимизированы всевозможными остроумными алгоритмами и
ассемблерным SIMD кодом. Поэтому они обладают тенденцией
достижения лучшего соотношения качества к времени кодирования.
Однако, у них могут быть некоторые очень продвинутые опции,
которые, будучи включенными, сделают кодирование очень медленным
ради несущественного выигрыша.
</para>
<para>
Если Вам нужна высокая скорость, примерно придерживайтесь настроек
видеокодека по умолчанию (хотя Вам стоит попробовать другие опции,
упоминаемые в иных разделах данного руководства).
</para>
<para>
Вы так же можете рассмотреть вариант использования многопоточного
кодека, хотя это полезно только для пользователей машин с
несколькими процессорами.
<systemitem class="library">libavcodec</systemitem> MPEG-4 позволяет
это, но выигрыш в скорости ограничен и есть небольшой отрицательный
эффект для качества картинки.
Многопоточное кодирование <systemitem class="library">Xvid</systemitem>,
включаемое опцией <option>threads</option>, может использоваться для
ускорения кодирования (на примерно 40-60% в типичных случаях)
с небольшим ухудшением картинки или вообще без него.
<systemitem class="library">x264</systemitem> также позволяет
многопоточное кодирование, что обычно ускоряет процесс на 94%
для каждого CPU ядра с уменьшением PSNR от 0.005 дБ до 0.01 дБ при типичных
настройках.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Личные предпочтения</emphasis>:
Здесь всё становится почти неразумным: из-за тех же причин, по
которым одни придерживаются DivX&nbsp;3 в течении лет, в то время
как новые кодеки уже творят чудеса, другие люди предпочитают
<systemitem class="library">Xvid</systemitem> или
<systemitem class="library">libavcodec</systemitem> MPEG-4
использованию <systemitem class="library">x264</systemitem>.
</para>
<para>
Вам нужно принимать решение самостоятельно; не слушайте советов
людей, признающих только один кодек.
Сделайте несколько образцов клипов из искомых источников и
сравните разные опции кодирования и кодеки, с целью выбора
того, что Вам наиболее подходит.
Лучший кодек &mdash; это тот, которым Вы сами овладели, и
который выглядит лучше всего для Ваших глаз на Вашем дисплее
<footnote id='fn-menc-feat-dvd-mpeg4-codec-playback'><para>
Один и тот же результат кодирования может не выглядеть таким же
на чьём-либо другом мониторе или при воспроизведении с помощью
другого декодера, так что проверяйте Ваши результаты кодирования
на жизнеспособность, воспроизводя их в разных начальных условиях.
</para></footnote>!
</para>
</listitem>
</itemizedlist>
<para>
Пожалуйста, обратитесь к разделу
<link linkend="menc-feat-selecting-codec">выбор кодеков и форматов контейнера</link>
для получения списка поддерживаемых кодеков.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-audio">
<title>Аудио</title>
<para>
Аудио &mdash; это гораздо более простая проблема: если Вы
беспокоитесь о качестве, просто оставьте всё как есть.
Даже потоки AC3 5.1 не более чем 448 Кбит/с и они стоят каждого
бита. Вы можете соблазниться перекодированием аудио в
высококачественный Vorbis (он же ogg формат), но лишь то, что
у Вас сегодня нет A/V приёмника для пропускания AC3, не означает,
что у Вас не будет его завтра. Для жизнеспособности Ваших DVD
рипов в будущем, сохраняйте поток AC3.
Вы можете сохранить поток AC3, копируя его непосредственно в
видеопоток <link linkend="menc-feat-mpeg4">в процессе кодирования</link>.
Вы также можете извлечь AC3 поток с целью мультиплексирования его
в контейнеры наподобие NUT или Matroska (Матрёшка).
<screen>
mplayer <replaceable>файл_источника.vob</replaceable> -aid 129 -dumpaudio -dumpfile <replaceable>звук.ac3</replaceable></screen>
сохранит в файл <replaceable>звук.ac3</replaceable> аудиодорожку
с номером 129 из файла
<replaceable>файл_источника.vob</replaceable> (Обратите внимание:
DVD VOB файлы обычно используют нумерацию аудио, отличную от
стандартной, что означает, что аудиодорожка VOB 129 &mdash; это вторая
аудиодорожка файла).
</para>
<para>
Но иногда у Вас действительно нет иного выбора, чем далее сжимать
звук для того, чтоб больше битов могло быть потрачено на видео.
Большинство людей предпочитают сжимать звук с помощью MP3 или
Vorbis аудиокодеков.
Последний является очень эффективным, но MP3 лучше поддерживается
аппаратными плеерами, хотя эта тенденция меняется.
</para>
<para>
<emphasis>Не</emphasis> используйте <option>-nosound</option> при
кодировании файла с аудио, даже если позже Вы будете отдельно
кодировать и мультеплексировать аудио.
Хотя это может работать в идеальных случаях, использование
<option>-nosound</option> обычно скрывает ряд проблем в Ваших
настройках кодирования в командной строке.
Другими словами, наличие звуковой дорожки в процессе кодирования
гарантирует Вам, что в случае отсутствия сообщений, подобных
<quote>Слишком много аудиопакетов в буфере</quote>, у Вас будет
получена правильная синхронизация.
</para>
<para>
Вам необходимо обработать звук с помощью
<application>MEncoder</application>.
Например, Вы можете копировать исходную звуковую дорожку в
процессе кодирования с помощью <option>-oac copy</option> или
преобразовать её в "лёгкий" 4 кГц моно WAV PCM с помощью
<option>-oac pcm -channels 1 -srate 4000</option>.
Иначе, в ряде случаев, будет создаваться видео файл,
рассинхронизированный с аудио.
Такие случаи происходят, когда число кадров видео исходного файла
не совпадает с полной длиной кадров аудио, или когда были
разрывы/сшивания потока, где появились пропущенные или излишние
аудиокадры.
Правильным решением подобных проблем является вставка тишины или
усечение аудио в таких точках.
Однако, <application>MPlayer</application> не может это сделать
и если Вы демультиплексируете AC3 аудио и кодируете его отдельным
приложением (или создаёте дамп в PCM с помощью
<application>MPlayer</application>), сшивания останутся
нескорректированными и единственный испособ их исправить &mdash;
пропускать/дублировать видеокадры в местах сшивки.
Пока <application>MEncoder</application> видит аудио при
кодировании видео, он может выполнять этот пропуск/дублирование
(что обычно не вызывыет проблем, т.к. происходит при полностью
чёрных кадрах или при смене сцен), но если
<application>MEncoder</application> не доступно аудио, он просто
будет обрабатывать все кадры "как есть" и они не будут совпадать
с окончательным аудиопотоком, когда Вы, например, объедините
аудио и видео дорожки в Matroska файл.
</para>
<para>
Прежде всего, Вам необходимо преобразовать DVD звук в WAV файл,
который может использоваться аудиокодеком в качестве входных
данных. Например:
<screen>
mplayer <replaceable>исходный_файл.vob</replaceable> -ao pcm:file=<replaceable>звук.wav</replaceable>
-vc dummy -aid 1 -vo null
</screen>
сохранит вторую аудиодорожку из файла
<replaceable>исходный_файл.vob</replaceable> в файл
<replaceable>звук.wav</replaceable>.
Возможно, Вы захотите нормализовать звук перед кодированием,
поскольку аудиодорожки DVD обычно записываются с маленькой
громкостью.
Вы можете использовать, например, утилиту <application>normalize</application>,
доступную в большинстве дистрибутивов.
Если Вы пользуетесь Window$, утилита <application>BeSweet</application>
делает то же самое.
Вы можете сжать в Vorbis или MP3. Например:
<screen>oggenc -q1 <replaceable>звук.wav</replaceable></screen>
кодирует <replaceable>звук.wav</replaceable> с качеством 1,
что примерно эквивалентно 80 Кб/с и является минимальным качеством,
при котором Вам нужно кодировать, если Вы заботитесь о качестве.
Пожалуйста, обратите внимание, что <application>MEncoder</application>
на данный момент не поддерживает мультиплексирование аудиопотоков
Vorbis в выходной файл, поскольку он поддерживает только AVI и
MPEG контейнеры для выходных файлов, использование каждого из
которых может привести к проблемам A/V синхронизации с
некоторыми плеерами, в случае когда AVI файл содержит VBR
аудиопотоки наподобие Vorbis.
Не беспокойтесь, в данном документе будет рассказано как Вы
можете это сделать с помощью сторонних программ.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-muxing">
<title>Мультиплексирование</title>
<para>
Теперь, после того как Вы кодировали видео, скорее всего, Вы
захотите мультиплексировать его с одним или несколькими
аудиопотоками в такие видео контейнеры как AVI, MPEG,
Matroska или NUT.
На данный момент встроенная поддержка вывода аудио и видео в
<application>MEncoder</application> есть только для форматов
контейнеров MPEG и AVI.
Например:
<screen>
mencoder -oac copy -ovc copy -o <replaceable>выходной_фильм.avi</replaceable> \
-audiofile <replaceable>исходный_звук.mp2</replaceable> <replaceable>исходное_видео.avi</replaceable>
</screen>
Это объединит видеофайл <replaceable>исходное_видео.avi</replaceable>
и аудиофайл <replaceable>исходный_звук.mp2</replaceable>
в AVI файл <replaceable>выходной_фильм.avi</replaceable>.
Эта команда работает с MPEG-1 слой I, II и III (более
известный как MP3) аудио, WAV, а также с некоторыми иными
форматами аудио.
</para>
<para>
<application>MEncoder</application>
обладает экспериментальной поддержкой
<systemitem class="library">libavformat</systemitem> &mdash;
библиотеки из проекта FFmpeg, поддерживающей мультиплексирование
и демультиплексирование множества контейнеров.
Например:
<screen>
mencoder -oac copy -ovc copy -o <replaceable>выходной_фильм.asf</replaceable> \
-audiofile <replaceable>исходный_звук.mp2</replaceable> <replaceable>исходное_видео.avi</replaceable> \
-of lavf -lavfopts format=asf
</screen>
Это сделает то же самое, что и предыдущий пример, но выходным
контейнером будет ASF.
Пожалуйста, обратите внимание, что эта поддержка весьма
экспериментальна (но становится лучше c каждым днём), и будет
работать только в случае компиляции <application>MPlayer</application>
с включенной поддержкой
<systemitem class="library">libavformat</systemitem> (что означает,
что в большинстве случаев бинарная версия из пакетов не будет
работать).
</para>
<sect3 id="menc-feat-dvd-mpeg4-muxing-filter-issues">
<title>Улучшение мультиплексирования и надёжности A/V синхронизации</title>
<para>
Вы можете столкнуться с некоторыми серьёзными проблемами A/V
синхронизации при попытке мультиплексирования Вашего видео
с некоторыми аудиодорожками, где, как бы Вы не подбирали задержку
аудио, никогда не получается правильная синхронизация.
Это может происходить при использовании некоторых видеофильтров,
пропускающих или дублирующих некоторые кадры, например фильтров
обратного телесина.
Настоятельно рекомендуется добавлять видеофильтр
<option>harddup</option> в конце цепочки фильтров для избежания
подобных проблем.
</para>
<para>
Без опции <option>harddup</option>, в случае когда
<application>MEncoder</application> хочет дублировать кадр, он
полагается на то, что мультиплексор расположит отметку в
контейнере таким образом, что последний кадр будет повторен для
достижения синхронизации без реальной записи кадра.
С опцией <option>harddup</option>, <application>MEncoder</application>
вместо этого просто ещё раз поместит последний кадр в цепочку
фильтров.
Это означает, что кодер получит <emphasis>точно</emphasis>
такой же кадр дважды и сожмёт его.
Это приведёт у несколько большему файлу, но избавит от проблем
при демультиплексировании или ремультиплексировании с другими
форматами контейнеров.
</para>
<para>
Также у Вас может не быть иного выбора, как использовать
<option>harddup</option> с форматами контейнеров, которые
не слишком плотно связаны с
<application>MEncoder</application>, например, с форматами,
поддерживаемыми с помощью
<systemitem class="library">libavformat</systemitem>,
которые могут не поддерживать дублирование кадров на уровне
контейнера.
</para>
</sect3>
<sect3 id="menc-feat-dvd-mpeg4-muxing-avi-limitations">
<title>Ограничения контейнера AVI</title>
<para>
Хотя это самый широко распространённый формат контейнера после
MPEG-1, он также обладает некоторыми существенными недостатками.
Пожалуй, они наиболее очевидны в его избыточности.
Для каждой цепочки AVI файла теряется 24 байта на заголовки и
индекс.
Это приводит к чуть более 5 МБ/час или 1.0-2.5% избыточности
для 700 МБ фильма. Это не кажется большим, но может означать
разницу между возможностью использования 700 кбит/сек или
714 кбит/сек в случаях, когда каждый бит на счету.
</para>
<para>
В дополнение к малой эффективности, AVI также обладает следующими
серьёзными ограничениями:
</para>
<orderedlist>
<listitem><para>
Может быть сохранено только содержимое с фиксированной частотой
кадров. В частности, это особенно ограничивает, когда Ваш
исходный материал смешанного содержимого: например, является
смесью NTSC видео и киноматериала.
В действительности, есть хаки, позволяющие сохранять содержимое
с переменным fps в AVI, но они увеличивают (и без того большую)
избыточность впятеро или более того и поэтому непрактичны.
</para></listitem>
<listitem><para>
Аудио в AVI файлах должно быть или с постоянным битпотоком (CBR)
или с постоянным размером кадра (т.е. все кадры декодируются
в одно и то же число выборок).
К сожалению, самый эффективный кодек, Vorbis, не удовлетворяет
ни одному из данных требований.
Поэтому, если Вы планируете сохранять Ваш фильм в AVI, Вы должны
использовать менее эффективный кодек, такой как MP3 или AC3.
</para></listitem>
</orderedlist>
<para>
Сказав всё это, отметим, что <application>MEncoder</application>
на данный момент не поддерживает вывод с переменным fps или
Vorbis кодирование.
Поэтому Вы можете не рассматривать всё это как ограничения, если
<application>MEncoder</application> &mdash; это единственный
инструмент, который Вы используете для кодирования.
Однако, возможно использовать <application>MEncoder</application>
только для кодирования видео и затем использовать внешние
утилиты для кодирования аудио и мультиплексирования его в
контейнер другого формата.
</para>
</sect3>
<sect3 id="menc-feat-dvd-mpeg4-muxing-matroska">
<title>Мультиплексирование в контейнер Matroska (Матрёшка)</title>
<para>
Matroska &mdash; это свободный, открытый стандарт формата
контейнера, нацеленный на предоставление большого количества
продвинутых возможностей, которые старые контейнеры (наподобие
AVI) не поддерживают.
Например, Matroska поддерживает аудиосодержимое с переменным
битпотоком (VBR), переменные частоты кадров (VFR), разделы,
файловые вложения, код обнаружения ошибок (EDC) и современные
A/V кодеки, такие как "Продвинутое Аудио Кодирование" ("Advanced
Audio Coding", AAC), "Vorbis" или "MPEG-4 AVC" (H.264), также
не поддерживаемые AVI.
</para>
<para>
Утилиты, необходимые для создания Matroska файлов, сообща
называются <application>mkvtoolnix</application>, и доступны
для большинства Unix платформ, так же как и для Window$.
Поскольку Matroska &mdash; открытый формат, Вы можете найти
иные утилиты, которые лучше Вам подходят, но поскольку
<application>mkvtoolnix</application> &mdash; наиболее общие
и поддерживаются самой командой разработчиков Matroska, мы
будем обсуждать только их использование.
</para>
<para>
Возможно, самым простым способом начать использовать Matroska
является использование <application>MMG</application>,
графической оболочки, поставляемой с
<application>mkvtoolnix</application>. Следуйте
<ulink url="http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge-gui.html">руководству к mkvmerge GUI (mmg)</ulink>.
</para>
<para>
Также Вы можете мультиплексировать аудио и видео файлы используя
командную строку:
<screen>
mkvmerge -o <replaceable>выходной_файл.mkv</replaceable> <replaceable>входное_видео.avi</replaceable> <replaceable>входное_аудио1.mp3</replaceable> <replaceable>входное_аудио2.ac3</replaceable>
</screen>
Это объединит видеофайл <replaceable>входное_видео.avi</replaceable>
и два аудиофайла <replaceable>входное_аудио1.mp3</replaceable>
и <replaceable>входное_аудио2.ac3</replaceable> в Matroska
файл <replaceable>выходной_файл.mkv</replaceable>.
Как было отмечено ранее, Matroska способна реализовать гораздо
большее, например, множественные аудиодорожки (включая тонкую
настройку аудио/видео синхронизации), разделы, субтитры,
разбиение и т.д..
Пожалуйста, обратитесь к документации на эти приложения для
деталей.
</para>
</sect3>
</sect2>
</sect1>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<sect1 id="menc-feat-telecine">
<title>Как работать с телесином и чересстрочной развёрткой на NTSC DVD</title>
<sect2 id="menc-feat-telecine-intro">
<title>Введение</title>
<formalpara>
<title>Что такое телесин?</title>
<para>
Если Вы не понимаете многое из того, что здесь написано,
прочтите
<ulink url="http://en.wikipedia.org/wiki/Telecine">статью Википедии о телесине</ulink>.
Это понятное и разумно обширное описание того, что такое
телесин.
</para></formalpara>
<formalpara>
<title>Замечание о числах.</title>
<para>
Многие документы, включая указанное выше руководство, ссылаются
на количество полей в секунду 59.94 для NTSC видео и
соответствующие кадровые частоты 29.97 (для подверженного
телесину и чересстрочного видео) и 23.976 (для построчного).
Для простоты в ряде статей эти числа даже округляются до 60, 30
и 24 соответственно.
</para></formalpara>
<para>
Строго говоря, все эти числа являются аппроксимациями.
Чёрно-белое NTSC видео было точно с 60 полями в секунду, но
позже была выбрана частота 60000/1001 для адаптации цветовой
информации с одновременным сохранением совместимости с чёрно-белым
телевидением.
Цифровое NTSC видео (такое как на DVD) также с 60000/1001
полями в секунду. Отсюда возникла кадровая частота 30000/1001
кадр/сек для чересстрочного и телесиненного видео; построчное
видео идёт с 24000/1001 кадр/сек.
</para>
<para>
Старые версии документации <application>MEncoder</application>
и много архивных сообщений из списков рассылки ссылаются на
59.94, 29.97 и 23.976. Вся документация <application>MEncoder</application>
была обновлена для использования дробных значений, и Вам так же
следует их использовать.
</para>
<para>
<option>-ofps 23.976</option> &mdash; неправильно.
Взамен нужно использовать <option>-ofps 24000/1001</option>.
</para>
<formalpara>
<title>Как используется телесин.</title>
<para>
Всё видео, предназначенное для просмотра на NTSC телевидении
должно быть с 60000/1001 полями в секунду. Фильмы, сделанные
для показа на TV часто снимаются непосредственно при 60000/1001
полей в секунду, но большинство кино снимается на 24 или
24000/1001 кадрах в секунду. В процессе создания DVD с
кинофильмом, видео преобразуется для телевидения с помощью
процесса, называемого телесин.
</para></formalpara>
<para>
В действительности, видео никогда не хранится на DVD с
60000/1001 полями в секунду. Для видео, оригинально являющегося
60000/1001, каждая пара полей объединяется для формирования
кадра, приводя к 30000/1001 кадрам в секунду. Затем аппаратные
DVD плееры читают флаг, включенный в видеопоток, для определения
того какие, чётные или нечётные строки должны формировать первый
кадр.
</para>
<para>
Обычно, содержимое с частотой кадров 24000/1001 остаётся
неизменным при кодировании на DVD и DVD плеер должен выполнить
телесин на лету. Однако, иногда видео подвергается телесину
<emphasis>до</emphasis> записи на DVD; и хотя оно изначально
было с 24000/1001 кадр/сек, видео становится с 60000/1001 полями
в секунду. Когда оно сохраняется на DVD, пары полей объединяются
для формирования 30000/1001 кадров в секунду.
</para>
<para>
При рассмотрении отдельных кадров, полученных из 60000/1001
полей в секунду, телесиненных или наоборот, чересстрочная
развёртка чётко видна в случае, если есть какое-либо движение,
поскольку одно поле (скажем, с чётными номерами строк)
отображает момент времени на 1/(60000/1001) секунды позже, чем
другое поле. Воспроизведение чересстрочного видео на компьютере
выглядит скверно по двум причинам: монитор обладает более высоким
разрешением и видео показывается покадрово, вместо отображения по
полям.
</para>
<itemizedlist>
<title>Замечания:</title>
<listitem><para>
Этот раздел применим только к NTSC DVD, а не к PAL.
</para></listitem>
<listitem><para>
Примеры командных строк <application>MEncoder</application>
в данном разделе <emphasis role="bold">не</emphasis>
предназначены для реального использования. Они просто являются
минимально необходимым требованием для кодирования
соответствующей категории видео. То, как сделать хорошие DVD
рипы или тонко настроить
<systemitem class="library">libavcodec</systemitem> для
достижения максимального качества, не входит в рамки данного
раздела.
</para></listitem>
<listitem><para>
Есть несколько сносок, специфичных для данного руководства,
обозначенных следующим образом:
<link linkend="menc-feat-telecine-footnotes">[1]</link>
</para></listitem>
</itemizedlist>
</sect2>
<sect2 id="menc-feat-telecine-ident">
<title>Как распознать тип Вашего видео</title>
<sect3 id="menc-feat-telecine-ident-progressive">
<title>Построчная развёртка</title>
<para>
Видео с построчной развёрткой изначально записывается на
24000/1001 fps и сохраняется на DVD без чередования.
</para>
<para>
При воспроизведении DVD с построчной развёрткой в
<application>MPlayer</application>, <application>MPlayer</application>
выведет следующую строку при начале воспроизведения фильма:
<screen>demux_mpg: обнаружено 24000/1001 кадра/сек NTSC содержимое с построчной развёрткой,
переключаю частоту кадров.</screen>
Начиная с этого момента, demux_mpg никогда не должен
сообщать о том, что найдено
&quot;30000/1001 кадров/сек NTSC содержимое&quot;.
</para>
<para>
При просмотре видео с построчной развёрткой Вы не должны никогда
наблюдать чересстрочность. Однако, будьте осторожны, поскольку
иногда есть небольшая примесь телесина там, где Вы этого не
ожидаете. Мной наблюдались DVD с TV-шоу, у которых была одна
секунда телесина при каждой смене сцен или в случайных на вид
местах. Однажды я видел DVD, у которого одна половина была с
построчной развёрткой, а вторая &mdash; телесиненной. Если Вы
желаете быть <emphasis>действительно</emphasis> уверенными,
Вы можете просканировать весь фильм:
<screen>mplayer dvd://1 -nosound -vo null -benchmark</screen>
Использование <option>-benchmark</option> позволяет
<application>MPlayer</application> воспроизводить фильм столь
быстро, сколь это возможно; тем не менее, в зависимости от
Вашего железа, это может занять некоторое время. Всякий раз,
когда demux_mpg будет сообщать об изменении частоты кадров,
строка прямо над сообщением покажет Вам время, при котором
произошло изменение.
</para>
<para>
Иногда видео на DVD с построчной развёрткой называют
&quot;мягким телесином&quot;, поскольку предполагается, что
телесин будет выполнен DVD плеером.
</para>
</sect3>
<sect3 id="menc-feat-telecine-ident-telecined">
<title>Телесин</title>
<para>
Телесиненное видео изначально снимается на 24000/1001 кадр/сек,
но подвергается телесину <emphasis>до</emphasis> записи на DVD.
</para>
<para>
<application>MPlayer</application> не (всегда) сообщает об
изменении частоты кадров при воспроизведении телесиненного
видео.
</para>
<para>
При просмотре телесиненного видео, Вы будете видеть "мерцающие"
артефакты чересстрочной развёртки: они будут многократно
повторяться и исчезать.
Вы можете детально это рассмотреть следующим образом:
<orderedlist>
<listitem>
<screen>mplayer dvd://1</screen>
</listitem>
<listitem><para>
Переместитесь в часть фильма с движением.
</para></listitem>
<listitem><para>
Используйте клавишу <keycap>.</keycap> для покадровой перемотки
вперёд.
</para></listitem>
<listitem><para>
Наблюдайте за последовательностью кадров с чересстрочной и
построчной развёрткой. Если Вы видите следующую структуру:
ЧЧЧПП,ЧЧЧПП,ЧЧЧПП,... (где Ч &mdash; чересстрочные, а П &mdash;
построчные кадры), значит видео телесиненное. Если Вы
наблюдаете иную структуру, видео может быть телесиненным,
используя какой-либо нестандартный метод;
<application>MEncoder</application> не может преобразовать
без потерь нестандартный телесин в построчную развёртку.
Если Вы не видите вообще никакой структуры, значит наиболее
вероятно, что видео с чересстрочной развёрткой.
</para></listitem>
</orderedlist>
</para>
<para>
Иногда подверженное телесину видео на DVD называют "жестким телесином".
Поскольку жесткий телесин уже имеет 60000/1001 полей в секунду, DVD
проигрыватель, воспроизводя его, не делает никаких преобразований.
</para>
<para>
Другой способ выяснить, был Ваш источник подвержен телесину или нет, заключается
в воспроизведении исходного материала с опциями командной строки
<option>-vf pullup</option> и <option>-v</option>, чтобы увидеть, как
<option>pullup</option> сопоставляет кадры.
Если источник был телесиненным, Вы должны увидеть в консоли 3:2 структуру с
чередующимися <systemitem>0+.1.+2</systemitem> и <systemitem>0++1</systemitem>.
Преимущество этой техники состоит в том, что не требуется просматривать исходный
материал для его идентификации, это может быть полезно для автоматизации
процедуры кодирования или выполнения вышеуказанной процедуры удаленно через
медленное соединение.
</para>
</sect3>
<sect3 id="menc-feat-telecine-ident-interlaced">
<title>Чересстрочная развертка</title>
<para>
Чересстрочное видео изначально снималось на 60000/1001 полями в секунду,
и сохранялось на DVD с 30000/1001 кадрами в секунду. Эффект чересстрочности
(часто называемый "гребёнкой") &mdash; результат объединения пары полей в кадры.
Поля сдвинуты друг относительно друга на 1/(60000/1001) секунды,
и, когда отображаются одновременно, разница заметна.
</para>
<para>
Как и с подверженным телесину видео, <application>MPlayer</application> не должен
сообщать о каких-либо изменениях частоты кадров при воспроизведении
чересстрочного содержимого.
</para>
<para>
Внимательно, кадр за кадром (при помощи клавиши <keycap>.</keycap>) рассматривая
чересстрочное видео, Вы увидите, что каждый отдельный кадр &mdash; чересстрочный.
</para>
</sect3>
<sect3 id="menc-feat-telecine-ident-mixedpt">
<title>Смешанные построчная развертка и телесин</title>
<para>
Все видео со "смешанными построчной разверткой и телесином" изначально было с
24000/1001 кадрами в секунду, но некоторые его части оказались подвержены
телесину.
</para>
<para>
Когда <application>MPlayer</application> воспроизводит эту категорию, он будет
(как правило, периодически) переключаться между "30000/1001 кадров/сек NTSC
содержимым" и "24000/1001 кадра/сек NTSC содержимым с построчной развёрткой".
Смотрите конец вывода <application>MPlayer</application>, чтобы увидеть
эти сообщения.
</para>
<para>
Вам следует проверить разделы с "30000/1001 кадров/сек NTSC содержимым",
чтобы убедиться, что видео действительно телесиненное, а не просто
чересстрочное.
</para>
</sect3>
<sect3 id="menc-feat-telecine-ident-mixedpi">
<title>Смешанные построчная и чересстрочная развертки</title>
<para>
В содержимом со "смешанными построчной и чересстрочной развертками",
построчное и чересстрочное видео переплетаются друг с другом.
</para>
<para>
Эта категория выглядит также, как и "смешанные построчная развертка и телесин",
до тех пор, пока не проверите разделы 30000/1001 кадр/сек и не увидите,
что структура телесина отсутствует.
</para>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-telecine-encode">
<title>Как кодировать каждую категорию</title>
<para>
Как уже было сказано выше, последующие примеры командных строк
<application>MEncoder</application> <emphasis role="bold">не</emphasis> означают,
что надо использовать именно их; они всего лишь примеры минимального набора параметров
для правильного кодирования каждой категории.
</para>
<sect3 id="menc-feat-telecine-encode-progressive">
<title>Построчная развертка</title>
<para>
Видео с построчной разверткой не требует специальной обработки для кодирования.
Единственный нужный Вам для уверенности параметр &mdash; это
<option>-ofps 24000/1001</option>.
В противном случае <application>MEncoder</application> будет пытаться кодировать
с 30000/1001 кадрами в секунду и создаст дублирующиеся кадры.
</para>
<para>
<screen>mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001</screen>
</para>
<para>
Частый случай, однако, когда видео, выглядящее построчным, на самом деле
содержит очень короткие подверженные телесину части. Если Вы не уверены,
безопаснее будет считать его как видео со
<link linkend="menc-feat-telecine-encode-mixedpt">смешанными построчной
разверткой телесином</link>.
Потеря скорости невелика<link linkend="menc-feat-telecine-footnotes">[3]</link>.
</para>
</sect3>
<sect3 id="menc-feat-telecine-encode-telecined">
<title>Телесин</title>
<para>
Телесин может быть обращён для получения оригинального 24000/1001 содержимого
при помощи процесса, называемого обратный телесин.
<application>MPlayer</application> содержит несколько фильтров для выполнения
этого; лучший из них, <option>pullup</option> описан в разделе
<link linkend="menc-feat-telecine-encode-mixedpt">смешанные построчная развертка
и телесин</link>.
</para>
</sect3>
<sect3 id="menc-feat-telecine-encode-interlaced">
<title>Чересстрочная развертка</title>
<para>
На практике в большинстве случаев невозможно получить полностью построчное
видео из чересстрочного содержимого.
Единственный способ сделать это без потери половины вертикального разрешения
- это удвоить частоту кадров и попытаться "угадать", что должно составить
соответствующие линии каждого поля (этот способ имеет недостатки, смотрите метод
3).
</para>
<orderedlist>
<listitem><para>
Кодируйте видео в чересстрочной форме. Обычно это наносит вред способности
кодировщика хорошо сжимать, но <systemitem class="library">libavcodec</systemitem>
имеет два параметра специально для чуть лучшего сохранения чересстрочного
видео: <option>ildct</option> и <option>ilme</option>. К тому же, настоятельно
рекомендуется использовать
<option>mbd=2</option><link linkend="menc-feat-telecine-footnotes">[2]</link>,
потому что при этом макроблоки в местах без движения будут кодированы как
нечересстрочные. Имейте в виду, что <option>-ofps</option> здесь НЕ нужна.
<screen>mencoder dvd://1 -oac copy -ovc lavc -lavcopts ildct:ilme:mbd=2</screen>
</para></listitem>
<listitem><para>
Используйте фильтр деинтерлейсинга перед кодированием. Существует несколько
таких фильтров на выбор, каждый имеет свои преимущества и недостатки.
Обратитесь к <option>mplayer -pphelp</option> и <option>mplayer -vf help</option>
для определения доступных (grep по "deint"), прочтите
<ulink url="http://guru.multimedia.cx/deinterlacing-filters/">Сравнение
фильтров деинтерлейсинга</ulink> Майкла Нидермайера (Michael Niedermayer),
и поищите в <ulink url="http://www.mplayerhq.hu/design7/mailing_lists.html">
списках рассылки MPlayer</ulink>, чтобы найти множество обсуждений различных
фильтров.
И опять, частота кадров не меняется, поэтому никаких <option>-ofps</option>.
к тому же деинтерлейсинг следует производить после обрезания
<link linkend="menc-feat-telecine-footnotes">[1]</link> и до масштабирования.
<screen>mencoder dvd://1 -oac copy -vf yadif -ovc lavc</screen>
</para></listitem>
<listitem><para>
К сожалению, эта опция сбоит с <application>MEncoder</application>; она должна
хорошо работать с <application>MEncoder G2</application>, но его пока нет. Вы
можете столкнуться с крахами. Как бы то ни было, назначение опции
<option> -vf tfields</option> &mdash; создать полный кадр из каждого поля, что
делает частоту кадров равной 60000/1001. Преимущество этого подхода в том, что
никакие данные не теряются; однако, т.к. каждый кадр получается только из одного
поля, недостающие строки должны как-то интерполироваться.
Не существует очень хороших методов
генерации недостающих данных, поэтому результат будет выглядеть несколько похожим
на применение некоторых фильтров деинтерлейсинга. Генерация недостающих строк также создает
другие проблемы, просто потому что количество данных удваивается.
Таким образом, для сохранения качества требуются более высокие значения
битпотока, и больше ресурсов процессора используется как для
кодирования, так и для декодирования. <option>tfields</option> имеет
несколько различных опций, определяющих способ создания недостающих строк
каждого кадра. Если выбрали этот способ, обратитесь к руководству и выберите
ту опцию, которая лучше подходит для Вашего материала. Имейте в виду, что при
использовании <option>tfields</option> Вы
<emphasis role="bold">должны</emphasis> указать как <option>-fps</option>, так
и <option>-ofps</option>, установив им значение, равное удвоенной частоте
исходного материала.
<screen>
mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \
-fps 60000/1001 -ofps 60000/1001<!--
--></screen>
</para></listitem>
<listitem><para>
Если планируете сильно уменьшать размер изображения, можно извлекать и
декодировать только одно поле из двух. Конечно, Вы потеряете половину
вертикального разрешения, но если планируется уменьшать размер как минимум
вдвое, потеря будет не сильно заметна. В результате получится построчной
развёртки файл с 30000/1001 кадрами в секунду. Процедура следующая:
<option>-vf field</option>, затем обрезание
<link linkend="menc-feat-telecine-footnotes">[1]</link> и масштабирование
соответствующим образом. Помните, что потребуется скорректировать масштабирование
для компенсации уменьшенного вдвое вертикального разрешения.
<screen>mencoder dvd://1 -oac copy -vf field=0 -ovc lavc</screen>
</para></listitem>
</orderedlist>
</sect3>
<sect3 id="menc-feat-telecine-encode-mixedpt">
<title>Смешанные построчная развертка и телесин</title>
<para>
Для преобразования видео со смешанными построчной разверткой и телесином в
полностью построчное необходимо к подверженным телесину частям применить
обратный телесин. Есть три описанных ниже способа добиться этого.
Заметьте, что следует <emphasis role="bold">всегда</emphasis> применять обратный
телесин до какого-либо масштабирования; за исключением случая, когда Вы точно
знаете, что делаете, выполняйте обратный телесин также до обрезания
<link linkend="menc-feat-telecine-footnotes">[1]</link>.
<option>-ofps 24000/1001</option> здесь необходима, поскольку видео на выходе
будет с 24000/1001 кадрами в секунду.
</para>
<itemizedlist>
<listitem><para>
<option>-vf pullup</option> разработана для обратного телесина материала,
телесину подверженного, оставляя построчные данные как есть. Для правильной
работы после <option>pullup</option> <emphasis role="bold">должен</emphasis>
следовать фильтр <option>softskip</option>, иначе произойдет крах
<application>MEncoder</application>.
<option>pullup</option> является, однако, самым чистым и точным методом,
доступным для кодирования и телесина, и "смешанного построчного с телесином".
<screen>
mencoder dvd://1 -oac copy -vf pullup,softskip \
-ovc lavc -ofps 24000/1001<!--
--></screen>
</para></listitem>
<listitem><para>
Более старый метод заключается не в применении обратного телесина к
телесиненным частям, а, наоборот, в телесине не подверженных телесину частей и
последующем применении обратного телесина ко всему видео. Звучит запутанно?
softpulldown &mdash; это фильтр, проходящий по видео и делающий телесиненным весь
файл. Если следом за softpulldown указать либо <option>detc</option>, либо
<option>ivtc</option>, финальный результат будет полностью построчным.
<option>-ofps 24000/1001</option> необходима.
<screen>
mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
</screen>
</para></listitem>
<listitem><para>
Лично я не использовал <option>-vf filmdint</option>, но вот что сказал
Д Ричарт Фелкер III (D Richard Felker III):
<blockquote><para>С ним все в порядке, но имхо он слишком часто пытается
сделать деинтерлейс iвместо обратного телесина (в точности как аппаратные
DVD проигрыватели &amp; построчное TV), что в результате дает мерзкое
мерцание и другие артефакты. Если собираетесь его использовать, потребуется
как минимум потратить немного времени для тонкой настройки опций и
просмотра результата, чтобы убедиться, что он не испорчен.
</para></blockquote>
</para></listitem>
</itemizedlist>
</sect3>
<sect3 id="menc-feat-telecine-encode-mixedpi">
<title>Смешанные построчная и чересстрочная развертки</title>
<para>
Существует две опции для этой категории, каждая из которых &mdash; это компромисс. Вы
должны выбрать, исходя из продолжительности/положения каждого типа.
</para>
<itemizedlist>
<listitem>
<para>
Рассматривайте видео как построчное. Чересстрочные части будут выглядеть
чересстрочными, и потребуется удаление некоторых из чересстрочных полей, что
даст в результате некоторое скачкообразное дрожание. Вы можете использовать
фильтр постобработки, если хотите, но это может несколько ухудшить
построчные части.
</para>
<para>
Эта опция определенно не должна использоваться, если Вы хотите со
временем отображать видео на чересстрочном устройстве (с помощью TV карты,
например). Если у Вас есть чересстрочные кадры в видео с 24000/1001 кадрами в
секунду, к ним, как и к прогрессивным, будет применен телесин. Половина их
чересстрочных "кадров" будут отображаться с длительностью трех полей
(3/(60000/1001) секунд), давая в результате неприятно выглядящий эффект
<!-- FIXME is translation correct? -->
"прыжка назад во времени". Даже если Вы пробуете это, Вы
<emphasis role="bold">должны</emphasis> использовать фильтр деинтерлейсинга,
такой как <option>lb</option> или <option>l5</option>.
</para>
<para>
Для отображения на построчном дисплее это тоже может быть плохой идеей.
Будут отбрасываться пары последовательных чересстрочных полей, приводя к
разрывам, которые могут быть заметнее, чем при использовании второго метода,
отображающего некоторые построчные кадры дважды. Чересстрочное видео с
30000/1001 кадрами в секунду уже несколько прерывисто, потому что в реальности
оно должно отображаться с 60000/1001 полями в секунду, так что дублирующиеся
кадры не так сильно выделяются.
</para>
<para>
Так или иначе, лучше всего проанализировать Ваше содержимое и как Вы его
собираетесь показывать. Если видео на 90% построчное и Вы никогда не будете
показывать его на TV, Вам следует отдать предпочтение построчному варианту.
Если оно только наполовину построчное, Вы, возможно, захотите кодировать
его, как если бы оно было чересстрочным.
</para>
</listitem>
<listitem><para>
Считайте его чересстрочным. Некоторые кадры построчной части потребуют
дублирования, что даст в результате некоторое скачкообразное дрожание. И
снова, фильтры деинтерлейсинга могут несколько ухудшить построчные части.
</para></listitem>
</itemizedlist>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-telecine-footnotes">
<title>Примечания</title>
<orderedlist>
<listitem>
<formalpara>
<title>Об усечении сторон:</title>
<para>
Видеоданные на DVD хранятся в формате, называемом YUV 4:2:0. В YUV
видео, люма ("яркость") и хрома ("цвет") хранятся отдельно.
Поскольку человеческий глаз отчасти менее чувствителен к цвету, чем к яркости,
в YUV 4:2:0 изображении присутствует только один цветностный пиксел на четыре
яркостных. В изображении с построчной развёрткой каждый квадрат из четырёх яркостных
пикселов (два на два) имеют один общий цветностный пиксел. Вы должны обрезать
построчный YUV 4:2:0 до чётных размеров и использовать чётные смещения.
Например,
<option>crop=716:380:2:26</option> &mdash; правильно, а
<option>crop=716:380:3:26 </option> &mdash; нет.
</para>
</formalpara>
<para>
Когда имеете дело с чересстрочным YUV 4:2:0, ситуация чуть более сложная.
Вместо разделения одного цветностного пиксела четырьмя яркостными пикселами в
<emphasis>кадре</emphasis>, каждые четыре яркостных пиксела каждого
<emphasis>поля</emphasis> разделяют цветностный пиксел. Когда поля объединены в
кадр, каждая строка имеет высоту в один пиксел. Теперь, вместо квадрата из
четырех яркостных пикселов мы имеем два соседних пиксела, а два других расположены
на две строки ниже. Два яркостных пиксела следующей строки принадлежат
другому полю, и, поэтому, разделяют другой пиксел цветности с двумя пикселами
на две строки дальше. Вся эта неразбериха требует, чтобы вертикальные размеры
и смещения обрезания были кратны четырем. Горизонтальные могут оставаться
четными.
</para>
<para>
Для телесиненного видео я рекомендую производить обрезание после обратного
телесина. Так как видео построчное, достаточно обрезать только по четным
размерам. Если же действительно хотите получить небольшую прибавку к скорости,
которую может дать обрезка, Вам придется производить усечение с вертикальными
размерностями, кратными четырем. В противном случае фильтр обратного телесина
не будет иметь правильных данных.
</para>
<para>
Для чересстрочного (не подверженного телесину) видео, Вы всегда должны
производить усечение с вертикальными размерностями, кратными четырем, если
только не используете <option>-vf field</option> перед усечением.
</para>
</listitem>
<listitem><formalpara>
<title>О параметрах кодирования и качестве:</title>
<para>
Если я здесь рекомендую <option>mbd=2</option>, это еще не значит, что эту
опцию не следует использовать где-либо еще. Совместно с <option>trell</option>,
<option>mbd=2</option> является одной из двух опций
<systemitem class="library">libavcodec</systemitem>, которые значительно
увеличивают качество. Вам всегда следует использовать как минимум эти две,
за исключением случая, когда потеря скорости кодирования недопустима
(например, кодирование в реальном времени). Есть множество других
<systemitem class="library">libavcodec</systemitem> опций, улучшающих качество
(и замедляющих кодирование), но их описание выходит за рамки этого
документа.
</para>
</formalpara></listitem>
<listitem><formalpara>
<title>О производительности pullup:</title>
<para>
Использование <option>pullup</option> (совместно с <option>softskip</option>)
для видео с построчной развёрткой вполне безопасно и обычно является хорошей
идеей, если только про источник не известно достоверно, что он полностью
построчный. Потеря скорости мала в большинстве случаев.
В минимальном варианте кодирования <option>pullup</option> замедляет
<application>MEncoder</application> на 50%. Добавление обработки звука и
продвинутых <option>lavcopts</option> опций затмевает эту разницу, уменьшая
падение производительности от использования <option>pullup</option> до 2%.
</para>
</formalpara></listitem>
</orderedlist>
</sect2>
</sect1>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<sect1 id="menc-feat-enc-libavcodec">
<title>Кодирование семейством кодеков <systemitem class="library">libavcodec</systemitem>
</title>
<para>
<link linkend="ffmpeg"><systemitem class="library">libavcodec</systemitem></link>
предоставляет возможность простого кодирования в множество интересных видео и
аудио форматов. Вы можете кодировать следующими кодеками (более или менее
свежий список):
</para>
<!-- ********** -->
<sect2 id="menc-feat-enc-libavcodec-video-codecs">
<title>Видео кодеки <systemitem class="library">libavcodec</systemitem></title>
<para>
<informaltable frame="all">
<tgroup cols="2">
<thead>
<row><entry>Название видео кодека</entry><entry>Описание</entry></row>
</thead>
<tbody>
<row>
<entry>mjpeg</entry>
<entry>Motion JPEG</entry>
</row>
<row>
<entry>ljpeg</entry>
<entry>JPEG без потери качества</entry>
</row>
<row>
<entry>jpegls</entry>
<entry>JPEG LS</entry>
</row>
<row>
<entry>targa</entry>
<entry>Targa рисунок</entry>
</row>
<row>
<entry>gif</entry>
<entry>GIF рисунок</entry>
</row>
<row>
<entry>bmp</entry>
<entry>BMP рисунок</entry>
</row>
<row>
<entry>png</entry>
<entry>PNG рисунок</entry>
</row>
<row>
<entry>h261</entry>
<entry>H.261</entry>
</row>
<row>
<entry>h263</entry>
<entry>H.263</entry>
</row>
<row>
<entry>h263p</entry>
<entry>H.263+</entry>
</row>
<row>
<entry>mpeg4</entry>
<entry>ISO стандарт MPEG-4 (DivX, Xvid совместимый)</entry>
</row>
<row>
<entry>msmpeg4</entry>
<entry>вариант пре-стандарта MPEG-4 от MS, v3 (он же DivX3)</entry>
</row>
<row>
<entry>msmpeg4v2</entry>
<entry>вариант пре-стандарта MPEG-4 от MS, v2 (используемый в старых ASF
файлах)</entry>
</row>
<row>
<entry>wmv1</entry>
<entry>Windows Media Video, версия 1 (он же WMV7)</entry>
</row>
<row>
<entry>wmv2</entry>
<entry>Windows Media Video, версия 2 (он же WMV8)</entry>
</row>
<row>
<entry>rv10</entry>
<entry>RealVideo 1.0</entry>
</row>
<row>
<entry>rv20</entry>
<entry>RealVideo 2.0</entry>
</row>
<row>
<entry>mpeg1video</entry>
<entry>MPEG-1 видео</entry>
</row>
<row>
<entry>mpeg2video</entry>
<entry>MPEG-2 видео</entry>
</row>
<row>
<entry>huffyuv</entry>
<entry>сжатие без потерь</entry>
</row>
<row>
<entry>ffvhuff</entry>
<entry>huffyuv без потерь, модифицированный FFmpeg</entry>
</row>
<row>
<entry>asv1</entry>
<entry>ASUS Видео v1</entry>
</row>
<row>
<entry>asv2</entry>
<entry>ASUS Видео v2</entry>
</row>
<row>
<entry>ffv1</entry>
<entry>видео кодек без потерь из FFmpeg</entry>
</row>
<row>
<entry>svq1</entry>
<entry>Sorenson видео 1</entry>
</row>
<row>
<entry>flv</entry>
<entry>Sorenson H.263 используемый в Flash Видео</entry>
</row>
<row>
<entry>flashsv</entry>
<entry>Flash Screen Video</entry>
</row>
<row>
<entry>dvvideo</entry>
<entry>Sony Digital Video</entry>
</row>
<row>
<entry>snow</entry>
<entry>экспериментальный кодек FFmpeg, основанный на вейвлетах</entry>
</row>
<row>
<entry>zbmv</entry>
<entry>Zip Blocks Motion Video</entry>
</row>
</tbody>
</tgroup>
</informaltable>
Первый столбец содержит названия кодеков, которые следует указывать после
<literal>vcodec</literal> опции, например:
<option>-lavcopts vcodec=msmpeg4</option>
</para>
<informalexample><para>
Пример с MJPEG сжатием:
<screen>
mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy
</screen>
</para></informalexample>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-enc-libavcodec-audio-codecs">
<title>Аудио кодеки <systemitem class="library">libavcodec</systemitem></title>
<para>
<informaltable frame="all">
<tgroup cols="2">
<thead>
<row><entry>Название аудио кодека</entry><entry>Описание</entry></row>
</thead>
<tbody>
<row>
<entry>mp2</entry>
<entry>MPEG Layer 2</entry>
</row>
<row>
<entry>ac3</entry>
<entry>AC3, он же Dolby Digital</entry>
</row>
<row>
<entry>adpcm_ima_wav</entry>
<entry>IMA адаптивный PCM (4 бита на сэмпл, сжатие 4:1)</entry>
</row>
<row>
<entry>sonic</entry>
<entry>экспериментальный кодек от FFmpeg с потерями (lossy)</entry>
</row>
<row>
<entry>sonicls</entry>
<entry>экспериментальный кодек от FFmpeg без потерь (lossless)</entry>
</row>
<row>
<entry>vorbis</entry>
<entry>Xiph Ogg Vorbis кодек</entry>
</row>
<row>
<entry>wmav1</entry>
<entry>Windows Media Audio v1 кодек</entry>
</row>
<row>
<entry>wmav2</entry>
<entry>Windows Media Audio v2 кодек</entry>
</row>
</tbody>
</tgroup>
</informaltable>
Первый столбец содержит названия кодеков, которые следует указывать после
<literal>acodec</literal> опции, например: <option>-lavcopts acodec=ac3</option>
</para>
<informalexample><para>
Пример с AC3 сжатием:
<screen>
mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy
</screen>
</para></informalexample>
<para>
В отличие от видео кодеков <systemitem class="library">libavcodec</systemitem>,
ее аудио кодеки не очень разумно используют отданные им биты, в силу
неудачной реализации некоторой минимальной психоакустической модели (если она
вообще есть), которая является характерной чертой большинства остальных реализаций кодеков.
Однако заметьте, что все эти аудио кодеки очень быстры и работают прямо из
коробки везде, где <application>MEncoder</application> скомпилирован с
<systemitem class="library">libavcodec</systemitem> (а почти всегда так оно и
есть), и не зависят от внешних библиотек.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-lavc-encoding-options">
<title>Опции кодирования libavcodec</title>
<para>
В идеале, Вы, наверное, хотели бы иметь возможность просто сказать кодировщику
переключиться на "высокое качество" и начать кодирование.
Это было бы замечательно, но, к сожалению, трудно реализуемо, поскольку
различные опции кодирования, в зависимости от исходного материала, дают в результате
различное качество.
Так происходит потому, что сжатие зависит от визуальных свойств видео.
Например, аниме и живая съемка имеют сильно отличающиеся свойства и,
поэтому, требуют разные опции для получения оптимального результата.
Хорошая новость состоит в том, что некоторые опции, такие как
<option>mbd=2</option>, <option>trell</option> и <option>v4mv</option>,
никогда не следует опускать.
Детальное описание основных опций кодирования смотрите ниже.
</para>
<itemizedlist>
<title>Опции для настройки:</title>
<listitem><para>
<emphasis role="bold">vmax_b_frames</emphasis>: хороши 1 или 2, в зависимости
от фильма.
Заметьте, если хотите, чтобы Ваш фильм декодировался DivX5, Вы должны
активировать поддержку закрытых GOP, используя опцию <option>cgop</option>
<systemitem class="library">libavcodec</systemitem>, но также должны деактивировать
определение сцен, что не является хорошей идеей, поскольку несколько вредит
эффективности.
</para></listitem>
<listitem><para>
<emphasis role="bold">vb_strategy=1</emphasis>: помогает в высокодинамичных
сценах.
Для некоторых видео файлов vmax_b_frames может повредить качеству, но vmax_b_frames=2
вместе с vb_strategy=1 поможет в этом случае.
</para></listitem>
<listitem><para>
<emphasis role="bold">dia</emphasis>: диапазон поиска движения. Большие
значения лучше и медленнее.
Отрицательные значения &mdash; это совершенно другая шкала.
Хорошими значениями являются -1 для быстрого кодирования или 2-4 &mdash; для
медленного.
</para></listitem>
<listitem><para>
<emphasis role="bold">predia</emphasis>: предпроход поиска движения.
Не так важен, как dia. Хорошими являются значения от 1 (по умолчанию) до 4.
Требует preme=2, чтобы быть действительно полезным.
</para></listitem>
<listitem><para>
<emphasis role="bold">cmp, subcmp, precmp</emphasis>: Функция сравнения для
поиска движения.
Поэкспериментируйте со значениями 0 (по умолчанию), 2 (hadamard), 3 (dct), и 6
(соотношение сигнал-шум).
0 &mdash; самый быстрый и достаточен для precmp.
В случае cmp и subcmp, 2 является хорошим для аниме, а 3 для живой съемки.
6 может оказаться лучше, а может и нет, но он медленнее.
</para></listitem>
<listitem><para>
<emphasis role="bold">last_pred</emphasis>: Количество предсказателей
движения, берущихся из предыдущего кадра.
1-3 или около того помогут Вам ценой небольшой потери в скорости.
Большие значения медленны и не дают дополнительного улучшения.
</para></listitem>
<listitem><para>
<emphasis role="bold">cbp, mv0</emphasis>: Контролирует выбор макроблоков.
Незначительное снижение скорости с небольшим приростом в качестве.
</para></listitem>
<listitem><para>
<emphasis role="bold">qprd</emphasis>: адаптивное квантование, основанное на
сложности макроблока.
Может сделать лучше или хуже в зависимости от видео и других опций.
Она также может привести к появлению артефактов, если Вы не установите vqmax в
некоторое разумно малое значение
(хорошо &mdash; 6, может быть даже 4); vqmin=1 также может помочь.
</para></listitem>
<listitem><para>
<emphasis role="bold">qns</emphasis>: очень медленно, особенно в комбинации с qprd.
Эта опция укажет кодировщику минимизировать шум от артефактов сжатия вместо
создания закодированного видео, полностью соответствующего исходному.
Не используйте ее, если только не перепробовали настроить все, что было
возможно, а результат все таки недостаточно хорош.
</para></listitem>
<listitem><para>
<emphasis role="bold">vqcomp</emphasis>: Настраивает управление битпотоком.
Какие значения являются хорошими, зависит от фильма.
Если хотите, можете без опаски оставить значение по умолчанию.
Уменьшение vqcomp отдает больше бит в сцены с низкой сложностью, увеличение
его передает биты в очень сложные сцены (по умолчанию: 0.5, диапазон: 0-1.
рекомендуемый диапазон: 0.5-0.7).
</para></listitem>
<listitem><para>
<emphasis role="bold">vlelim, vcelim</emphasis>: Устанавливает порог
отбрасывания одиночного коэффициента для яркостной и цветностной плоскостей.
Они кодируются независимо во всех MPEG-похожих алгоритмах.
Идея этих опций заключается в использованию некоторой хорошей эвристики для
определения момента, когда изменения в блоке ниже указанного Вами порога, и что его
стоит кодировать как "блок без изменений".
Это сохраняет биты и, возможно, ускоряет кодирование.
vlelim=-4 и vcelim=9 выглядят неплохими для живой съемки, но, скорее всего, не
помогут для аниме; при кодировании анимации Вам, возможно, следует оставить
эту опцию неизменной.
</para></listitem>
<listitem><para>
<emphasis role="bold">qpel</emphasis>: Четверьтпиксельная оценка движения.
По-умолчанию, MPEG-4 использует полупиксельную точность для поиска движения,
следовательно, эта опция вносит дополнительные накладные расходы, поскольку
сохраняет больше информации в закодированном файле.
Улучшение/ухудшение степени сжатия зависит от фильма, но обычно эта опция не
очень эффективна для аниме.
qpel всегда вносит значительный вклад в CPU время декодирования (+25% на
практике).
</para></listitem>
<listitem><para>
<emphasis role="bold">psnr</emphasis>: не влияет на сам процесс кодирования,
но выводит в файл тип/размер/качество каждого кадра, а также итоговый
PSNR (Peak Signal to Noise Ratio, пиковое отношения сигнала к шуму) в конце
процесса.
</para></listitem>
</itemizedlist>
<itemizedlist>
<title>Опции, с которыми играть не стоит:</title>
<listitem><para>
<emphasis role="bold">vme</emphasis>: Значение по умолчанию является лучшим.
</para></listitem>
<listitem><para>
<emphasis role="bold">lumi_mask, dark_mask</emphasis>: Психовизуальное
адаптивное квантование.
Не стоит играть с этими опциями, если заботитесь о качестве.
Разумные значения могут быть эффективными в Вашем случае, но имейте в виду,
что это весьма субъективно.
</para></listitem>
<listitem><para>
<emphasis role="bold">scplx_mask</emphasis>: Пытается предотвратить появление
квадратиков, но лучше выполнить постобработку.
</para></listitem>
</itemizedlist>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-mpeg4-lavc-example-settings">
<title>Примеры настроек кодирования</title>
<para>
Следующие настройки &mdash; это примеры различных комбинаций опций кодирования,
которые влияют на соотношение скорость-качество при той же величине целевого
биптотока.
</para>
<para>
Все настройки кодирования проверялись на тестовом видео 720x448 @30000/1001 fps
с целевым битпотоком 900кбит/сек, на машине AMD-64 3400+ с 2400 МГц и 64 битном режиме.
Для каждой настройки кодирования указаны измеренная скорость кодирования (в
кадрах в секунду) и потеря PSNR (в дБ) по сравнению с настройкой "очень высокое
качество". Поймите, пожалуйста, что в зависимости от Вашего материала, типа
машины, прогресса разработки Вы можете получить сильно отличающиеся результаты.
</para>
<para>
<informaltable frame="all">
<tgroup cols="4">
<thead>
<row>
<entry>Описание</entry>
<entry>Опции кодирования</entry>
<entry>скорость (в fps)</entry>
<entry>Относительная потеря PSNR (в дБ)</entry>
</row>
</thead>
<tbody>
<row>
<entry>Очень высокое качество</entry>
<entry><option>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</option></entry>
<entry>6fps</entry>
<entry>0дБ</entry>
</row>
<row>
<entry>Высокое качество</entry>
<entry><option>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</option></entry>
<entry>15fps</entry>
<entry>-0.5дБ</entry>
</row>
<row>
<entry>Быстрое</entry>
<entry><option>vcodec=mpeg4:mbd=2:trell:v4mv:turbo</option></entry>
<entry>42fps</entry>
<entry>-0.74дБ</entry>
</row>
<row>
<entry>Реального времени</entry>
<entry><option>vcodec=mpeg4:mbd=2:turbo</option></entry>
<entry>54fps</entry>
<entry>-1.21дБ</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</sect2>
<!-- ********** -->
<sect2 id="custommatrices">
<title>Нестандартные inter/intra матрицы</title>
<para>
С этой возможностью
<link linkend="ffmpeg"><systemitem
class="library">libavcodec</systemitem></link>,
Вы можете установить нестандартные inter (I-кадры/ключевые) и intra
(P-кадры/предсказанные) матрицы. Это поддерживается многими кодеками:
В <systemitem>mpeg1video</systemitem> и <systemitem>mpeg2video</systemitem>
также заявлена поддержка.
</para>
<para>
Обычное использовании этой опции &mdash; установить матрицы, предпочитаемые
спецификациями <ulink url="http://www.kvcd.net/">KVCD</ulink>.
</para>
<para>
<emphasis role="bold">KVCD Матрица Квантования "Notch":</emphasis>
</para>
<para>
Intra:
<screen>
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
</screen>
Inter:
<screen>
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
</screen>
</para>
<para>
Использование:
<screen>
mencoder <replaceable>input.avi</replaceable> -o <replaceable>output.avi</replaceable> -oac copy -ovc lavc \
-lavcopts inter_matrix=...:intra_matrix=...
</screen>
</para>
<para>
<screen>
mencoder <replaceable>input.avi</replaceable> -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
</screen>
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-example">
<title>Пример</title>
<para>
Итак, Вы только что купили новенькую, блестящую копию фильма "Гарри Поттер и Тайная
Комната" (в широкоэкранном формате, конечно) и хотите сделать рип этого DVD так,
чтобы добавить его к Домашнему кинотеатру на PC. Это DVD первого региона,
поэтому NTSC. Пример ниже также применим и для PAL, за исключением того, что
надо будет опустить <option>-ofps 24000/1001</option> (поскольку частота кадров
на выходе такая же, как и на входе), и, конечно, границы обрезания будут
другими.
</para>
<para>
После запуска <option>mplayer dvd://1</option> мы следуем процессу, детально
описанному в разделе <link linkend="menc-feat-telecine">Как работать с телесином
и чересстрочностью в NTSC DVD</link>, и выясняем, что это 24000/1001 fps
построчное видео, а значит, использовать фильтры обратного телесина,
такие как <option>pullup</option> или <option>filmdint</option> не нужно.
</para>
<para id="menc-feat-dvd-mpeg4-example-crop">
Далее, мы хотим определить верные границы обрезания, поэтому используем фильтр
cropdetect:
<screen>mplayer dvd://1 -vf cropdetect</screen>
Убедитесь, что переместились к полностью заполненному кадру (например,
к светлой сцене после пропущенных начальных титров и логотипов),
Вы должны увидеть в консоли <application>MPlayer</application>:
<screen>crop area: X: 0..719 Y: 57..419 (-vf crop=720:362:0:58)</screen>
Затем снова воспроизводим фильм с этим фильтром для проверки его корректности:
<screen>mplayer dvd://1 -vf crop=720:362:0:58</screen>
И убеждаемся, что все выглядит прекрасно. Далее, проверяем, что ширина и высота
делятся на 16. С шириной все в порядке, а с высотой &mdash; нет.
Поскольку мы не заваливали математику в 7-ом классе, то знаем, что ближайшее
целое, меньшее 362 и кратное 16, равно 352.
</para>
<para>
Мы могли бы просто использовать <option>crop=720:352:0:58</option>, но будет
лучше отрезать понемногу от верха и низа, чтобы центр остался на месте.
Мы уменьшили высоту на 10 пикселов, но не хотим увеличивать смещение по y на 5,
поскольку это нечетное число и отрицательно скажется на качестве.
Вместо этого, мы увеличим y на 4:
<screen>mplayer dvd://1 -vf crop=720:352:0:62</screen>
Другая причина, по которой мы урезаем пикселы сверху и снизу, заключаемся в том,
что мы хотим убедиться, что удалены все наполовину черные пикселы, если они есть.
Если Ваше видео подвержено телесину, убедитесь, что фильтр <option>pullup</option> (или
любой другой фильтр обратного телесина, который Вы решили использовать)
находится в цепочке до фильтра crop.
Если оно чересстрочное, то перед обрезкой проведите деинтерлейсинг.
(Если решили сохранить чересстрочность видео, убедитесь, что вертикальный сдвиг
обрезания кратен 4.)
</para>
<para>
Если Вас действительно заботит потеря этих 10 пикселов, Вы можете
вместо этого отмасштабировать фильм, уменьшив размерности до ближайших
кратных 16 значений.
Цепочка фильтров будет выглядеть примерно так:
<screen>-vf crop=720:362:0:58,scale=720:352</screen>
Подобное уменьшение изображения будет означать потерю небольшого количества
деталей, хотя это, возможно, окажется незаметным. Масштабирование изображения в
сторону увеличения даст худшее качество (если Вы не увеличиваете битпоток).
Обрезка же полностью выбросит те пикселы. Это компромисс, идти на который или нет,
придется решать в каждом частном случае. Например, если DVD видео было создано
для телевидения, Вы можете захотеть избежать вертикального масштабирования,
поскольку дискретизация строк соответствует тому, как содержимое
изначально записывалось.
</para>
<para>
При проверке видим, что наш фильм имеет немного движения и большое количество
деталей, так что выбираем для битпотока значение 2400Кбит/сек.
</para>
<para>
Теперь мы готовы произвести двухпроходное кодирование. Проход первый:
<screen>
mencoder dvd://1 -ofps 24000/1001 -oac copy -o <replaceable>Harry_Potter_2.avi</replaceable> -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
</screen>
И второй проход с теми же параметрами, за исключением <option>vpass=2</option>:
<screen>
mencoder dvd://1 -ofps 24000/1001 -oac copy -o <replaceable>Harry_Potter_2.avi</replaceable> -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
</screen>
</para>
<para>
Опции <option>v4mv:mbd=2:trell</option> значительно улучшат качество ценой
времени кодирования. Нет никаких оснований отключать эти
опции, когда главным критерием является качество. Опции
<option>cmp=3:subcmp=3</option> выбирают функцию сравнения, дающую
лучшее качество, чем стандартная. Вы можете поэкспериментировать с этим параметром
(возможные значения смотрите на man странице), поскольку разные функции могут
давать разный прирост в качестве в зависимости от исходного материала.
Например, если Вы замечаете, что <systemitem class="library">libavcodec</systemitem>
производит слишком много блочных артефактов (квадратиков), то можете попытаться
выбрать экспериментальный NSSE в качестве функции сравнения при помощи опции
<option>*cmp=10</option>.
</para>
<para>
Для этого фильма полученный AVI будет 138 минут длинной и размером около 3Гб.
И, поскольку Вы сказали, что размер файла значения не имеет, это вполне
приемлемый результат. Однако, если все-таки хотите получить меньший размер файла,
можете попробовать уменьшить битпоток. Увеличение битпотока имеет снижающийся эффект,
поэтому, хотя мы можем ясно видеть улучшение от 1800Кбит/сек до 2000Кбит/сек, оно
может быть не столь заметно выше 2000Кбит/сек.
</para>
<para>
Так как мы пропустили исходное видео через фильтр удаления шума, то, возможно,
захочется вернуть какую-то его часть во время воспроизведения.
Это, совместно с фильтром постобработки <option>spp</option>, существенно
улучшит воспринимаемое качество и поможет избежать блочных артефактов в видео.
Опцией <option>autoq</option> <application>MPlayer</application>'а Вы можете
изменять величину производимой фильтром spp постобработки в зависимости от
доступных ресурсов CPU. Вдобавок, на этом этапе Вы можете захотеть применить
коррекцию гаммы и/или цвета для лучшего соответствия Вашему монитору. Например:
<screen>
mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3
</screen>
</para>
</sect2>
</sect1>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<sect1 id="menc-feat-xvid">
<title>Кодирование кодеком <systemitem class="library">Xvid</systemitem></title>
<para>
<systemitem class="library">Xvid</systemitem> &mdash; это свободная библиотека для
кодирования MPEG-4 ASP видео потоков.
Перед тем, как начать кодирование, Вам потребуется <link linkend="xvid">
настроить <application>MEncoder</application> для его поддержки</link>.
</para>
<para>
Это руководство в основном нацелено на особенности применения тех же методов,
что описаны в руководстве по кодированию с помощью x264.
Поэтому, сначала прочтите, пожалуйста,
<link linkend="menc-feat-x264-encoding-options-intro">первую часть</link>
того руководства.
</para>
<!-- ********** -->
<sect2 id="menc-feat-xvid-intro">
<title>Какие опции следует использовать для получения лучших результатов?</title>
<para>
Пожалуйста, начните с просмотра раздела
<systemitem class="library">Xvid</systemitem> man страницы
<application>MPlayer</application>.
Этот раздел предполагается как дополнение к man странице.
</para>
<para>
Настройки по умолчанию Xvid уже являются хорошим выбором между скоростью и
качеством, поэтому Вы можете без опасений придерживаться их, если следующий
раздел Вас озадачивает.
</para>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-xvid-encoding-options">
<title>Опции кодирования <systemitem class="library">Xvid</systemitem></title>
<itemizedlist>
<listitem><para>
<emphasis role="bold">vhq</emphasis>
Эта опция влияет на алгоритм принятия решений о макроблоке, чем выше значение, тем
мудрее будут решения.
Значение по умолчанию можно без опаски использовать для любого кодирования, в
то время, как более высокие значения всегда улучшат PSNR, но будут работать значительно
медленнее.
Заметьте, пожалуйста, что лучший PSNR не обязательно означает лучше выглядящую
картинку, но говорит, что она ближе к оригиналу.
Отключение этой опции заметно ускоряет кодирование; это может быть достойным
компромиссом, если скорость Вам критична.
</para></listitem>
<listitem><para>
<emphasis role="bold">bvhq</emphasis>
То же, что и vhq, но для B-кадров.
Имеет незначительное влияние на скорость и слегка улучшает качество (около
+0.1дБ).
</para></listitem>
<listitem><para>
<emphasis role="bold">max_bframes</emphasis>
Большее число допустимых последовательных B-кадров обычно улучшает
сжимаемость, хотя оно может также привести к большему количеству блочных
артефактов (квадратиков).
Значение по умолчанию &mdash; хороший выбор между сжимаемостью и качеством, но Вы
можете увеличить его до 3, если стеснены величиной битпотока.
Вы также можете уменьшить это значение до 1 или 0, если печетесь об отличном качестве,
впрочем в этом случае Вы должны убедиться, что целевой битпоток достаточно высок,
дабы кодировщик не увеличивал значение квантователя, сохраняя нужную величину
битпотока.
</para></listitem>
<listitem><para>
<emphasis role="bold">bf_threshold</emphasis>
Управляет чувствительностью кодировщика к B-кадрам, где большие значения
приводят к использованию большего количества B-кадров (и наоборот).
Опция должна использоваться совместно с <option>max_bframes</option>;
если Вы стеснены величиной битпотока, то должны увеличить и
<option>max_bframes</option>, и <option>bf_threshold</option>,
в том время как увеличение <option>max_bframes</option> и уменьшение
<option>bf_threshold</option> позволят кодировщику использовать больше
B-кадров в местах, где это <emphasis role="bold">действительно</emphasis>
необходимо.
Низкое количество <option>max_bframes</option> и высокое значение
<option>bf_threshold</option> &mdash; это, возможно, не самое мудрое решение,
поскольку оно принудит кодировщик размещать B-кадры в местах, которые никак не
выиграют от этого, тем самым ухудшая визуальное качество.
Однако, если Вам требуется совместимость с аппаратными
проигрывателями, поддерживающими только старые DivX профили (которые
поддерживают только 1 последовательный B-кадр), это единственный способ
увеличить сжимаемость при помощи B-кадров.
</para></listitem>
<listitem><para>
<emphasis role="bold">trellis</emphasis>
Оптимизирует процесс квантования для получения оптимального
соотношения между PSNR и битпотоком, что позволяет существенно экономить биты.
Эти биты впоследствии будут потрачены на другие части видео, что приведет к
увеличению общего качества.
Следует всегда оставлять эту опцию включенной, поскольку ее влияние на
качество огромно. Даже если Вы заботитесь о скорости, не отключайте ее до тех
пор, пока не выставили <option>vhq</option> и остальные более CPU-прожорливые
опции на минимум.
</para></listitem>
<listitem><para>
<emphasis role="bold">hq_ac</emphasis>
Активирует более точный метод оценки стоимости коэффициентов, что
уменьшает размер файла примерно на 0.15 - 0.19% (соответствует увеличению
PSNR меньше, чем на 0.01дБ), имея несущественное влияние на скорость.
Поэтому, рекомендуется всегда держать эту опцию включенной.
</para></listitem>
<listitem><para>
<emphasis role="bold">cartoon</emphasis>
Разработана для лучшего кодирования мультфильмов и не влияет на скорость,
поскольку всего-лишь настраивает эвристики принятия решений о режимах для
этого типа содержимого.
</para></listitem>
<listitem>
<para>
<emphasis role="bold">me_quality</emphasis>
Это опция для настройки точности оценки движения.
Чем выше <option>me_quality</option>, тем точнее будет оценка оригинального
движения и тем лучше получающийся отрывок будет фиксировать оригинальное движение.
</para>
<para>
Настройка по умолчанию лучше во всех случаях, поэтому не рекомендуется ее
выключать, если только Вы действительно не гонитесь за скоростью, поскольку
биты, сэкономленные хорошей оценкой движения, могут быть использованы
где-нибудь еще, увеличивая общее качество.
Таким образом, не используйте значения ниже 5, да и его &mdash; только в крайнем
случае.
</para>
</listitem>
<listitem><para>
<emphasis role="bold">chroma_me</emphasis>
Улучшает оценку движения, дополнительно принимая во внимание информацию о
цвете, тогда как одна <option>me_quality</option> использует только яркость.
Это замедляет кодирование на 5-10%, но несколько улучшает визуальное качество,
уменьшая эффект блочности и сокращая размер файла примерно на 1.3%.
Если Вас интересует скорость, следует попробовать отключить эту опцию, прежде
чем решите уменьшать значение <option>me_quality</option>.
</para></listitem>
<listitem><para>
<emphasis role="bold">chroma_opt</emphasis>
Эта опция служит для увеличения качества цветного изображения вокруг чисто черных/белых
границ вместо улучшения сжатия. Она также может помочь против
эффекта "красных ступенек".
</para></listitem>
<listitem><para>
<emphasis role="bold">lumi_mask</emphasis>
Пытается отдать меньший битпоток областям изображения, которые
человеческий глаз не в состоянии увидеть достаточно хорошо, что
позволит кодировщику потратить сэкономленные биты на более важные
части картинки. Качество закодированного материала, привнесенное этой
опцией, сильно зависит от личных предпочтений и от типа и настроек монитора,
использовавшегося для просмотра (обычно результат выглядит не очень хорошо,
если он яркий, или является TFT монитором).
</para></listitem>
<listitem>
<para>
<emphasis role="bold">qpel</emphasis>
Увеличивает количество предполагаемых векторов движения, путём повышения
точности оценки движения с полупиксельной до четвертьпиксельной.
Идея состоит в том, чтобы найти лучшие векторы движения, которые взамен
уменьшат битпоток (тем самым увеличивая качество).
Однако, векторы движения с четверьтпиксельной точностью требуют большего
количества дополнительных бит для кодирования, а векторы-кандидаты не всегда
дают (значительно) лучшие результаты.
Достаточно часто кодек тратит дополнительные биты на повышенную точность
впустую, а взамен получает или вообще ничего, или небольшое увеличение качества.
К сожалению, нет способа предсказать возможные улучшения от <option>qpel</option>,
так что Вам придется сделать кодирование с ней и без нее, чтобы знать
наверняка.
</para>
<para>
<option>qpel</option> может почти удвоить время кодирования и
требует, как минимум, на 25% большей мощности при декодировании.
Она поддерживается не всеми аппаратными проигрывателями.
</para>
</listitem>
<listitem><para>
<emphasis role="bold">gmc</emphasis>
Пытается сэкономить биты в панорамных сценах, используя один вектор
движения для всего кадра. Это почти всегда увеличивает PSNR, но заметно
замедляет кодирование (так же как и декодирование).
Поэтому Вас следует использовать ее, только когда Вы включили
<option>vhq</option> на максимум.
GMC <systemitem class="library">Xvid</systemitem>'а является более сложным,
чем у DivX'а, но поддерживается только некоторыми аппаратными проигрывателями.
</para></listitem>
</itemizedlist>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-xvid-encoding-profiles">
<title>Профили кодирования</title>
<para>
Xvid поддерживает профили кодирования через опцию <option>profile</option>,
которая используется для накладывания ограничений на значения видео потока Xvid таким
образом, что он будет воспроизводиться на всем, что поддерживает выбранный
профиль.
Ограничения относятся к разрешению, битпотоку и некоторым возможностям MPEG-4.
Следующая таблица показывает, что поддерживает тот или иной профиль.
</para>
<informaltable>
<tgroup cols="16" align="center">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<colspec colnum="3" colname="col3"/>
<colspec colnum="4" colname="col4"/>
<colspec colnum="5" colname="col5"/>
<colspec colnum="6" colname="col6"/>
<colspec colnum="7" colname="col7"/>
<colspec colnum="8" colname="col8"/>
<colspec colnum="9" colname="col9"/>
<colspec colnum="10" colname="col10"/>
<colspec colnum="11" colname="col11"/>
<colspec colnum="12" colname="col12"/>
<colspec colnum="13" colname="col13"/>
<colspec colnum="14" colname="col14"/>
<colspec colnum="15" colname="col15"/>
<colspec colnum="16" colname="col16"/>
<colspec colnum="17" colname="col17"/>
<spanspec spanname="spa2-5" namest="col2" nameend="col5"/>
<spanspec spanname="spa6-11" namest="col6" nameend="col11"/>
<spanspec spanname="spa12-17" namest="col12" nameend="col17"/>
<tbody>
<row>
<entry></entry>
<entry spanname="spa2-5">Простой</entry>
<entry spanname="spa6-11">Расширенный простой</entry>
<entry spanname="spa12-17">DivX</entry>
</row>
<row>
<entry>Название профиля</entry>
<entry>0</entry>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>0</entry>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
<entry>Карманный</entry>
<entry>Портативный NTSC</entry>
<entry>Портативный PAL</entry>
<entry>Домашний кинотеатр NTSC</entry>
<entry>Домашний кинотеатр PAL</entry>
<entry>HDTV</entry>
</row>
<row>
<entry>Ширина [пикселов]</entry>
<entry>176</entry>
<entry>176</entry>
<entry>352</entry>
<entry>352</entry>
<entry>176</entry>
<entry>176</entry>
<entry>352</entry>
<entry>352</entry>
<entry>352</entry>
<entry>720</entry>
<entry>176</entry>
<entry>352</entry>
<entry>352</entry>
<entry>720</entry>
<entry>720</entry>
<entry>1280</entry>
</row>
<row>
<entry>Высота [пикселов]</entry>
<entry>144</entry>
<entry>144</entry>
<entry>288</entry>
<entry>288</entry>
<entry>144</entry>
<entry>144</entry>
<entry>288</entry>
<entry>288</entry>
<entry>576</entry>
<entry>576</entry>
<entry>144</entry>
<entry>240</entry>
<entry>288</entry>
<entry>480</entry>
<entry>576</entry>
<entry>720</entry>
</row>
<row>
<entry>Частота кадров [fps]</entry>
<entry>15</entry>
<entry>15</entry>
<entry>15</entry>
<entry>15</entry>
<entry>30</entry>
<entry>30</entry>
<entry>15</entry>
<entry>30</entry>
<entry>30</entry>
<entry>30</entry>
<entry>15</entry>
<entry>30</entry>
<entry>25</entry>
<entry>30</entry>
<entry>25</entry>
<entry>30</entry>
</row>
<row>
<entry>Максимальный средний битпоток [кбит/сек]</entry>
<entry>64</entry>
<entry>64</entry>
<entry>128</entry>
<entry>384</entry>
<entry>128</entry>
<entry>128</entry>
<entry>384</entry>
<entry>768</entry>
<entry>3000</entry>
<entry>8000</entry>
<entry>537.6</entry>
<entry>4854</entry>
<entry>4854</entry>
<entry>4854</entry>
<entry>4854</entry>
<entry>9708.4</entry>
</row>
<row>
<entry>Пиковое значение средней величины битпотока за 3 секунды [кбит/сек]</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>800</entry>
<entry>8000</entry>
<entry>8000</entry>
<entry>8000</entry>
<entry>8000</entry>
<entry>16000</entry>
</row>
<row>
<entry>Макс. B-кадров</entry>
<entry>0</entry>
<entry>0</entry>
<entry>0</entry>
<entry>0</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>0</entry>
<entry>1</entry>
<entry>1</entry>
<entry>1</entry>
<entry>1</entry>
<entry>2</entry>
</row>
<row>
<entry>MPEG квантование</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Адаптивное квантование</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
</row>
<row>
<entry>Чересстрочное кодирование</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
</row>
<row>
<entry>Четвертьпиксельная точность</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row>
<entry>Глобальная компенсация движения</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry>X</entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-xvid-example-settings">
<title>Примеры настроек кодирования</title>
<para>
Последующие настройки &mdash; это примеры различных комбинаций опций кодирования,
которые влияют на соотношения скорость-качество при той же величине целевого
битпотока.
</para>
<para>
Все настройки кодирования проверялись на тестовом видео 720x448 @30000/1001 fps
с целевым битпотоком 900кбит/сек, на машине AMD-64 3400+ с 2400 МГц и 64 битном режиме.
Для каждой настройки кодирования указаны измеренная скорость кодирования (в
кадрах в секунду) и потеря PSNR (в дБ) по сравнению с настройкой "очень высокое
качество". Поймите, пожалуйста, что в зависимости от Вашего материала, типа
машины, прогресса разработки, Вы можете получить сильно отличающиеся результаты.
</para>
<informaltable frame="all">
<tgroup cols="4">
<thead>
<row><entry>Описание</entry><entry>Опции кодирования</entry><entry>скорость
(в fps)</entry><entry>Относительная потеря PSNR (в дБ)</entry></row>
</thead>
<tbody>
<row>
<entry>Очень высокое качество</entry>
<entry><option>chroma_opt:vhq=4:bvhq=1:quant_type=mpeg</option></entry>
<entry>16fps</entry>
<entry>0дБ</entry>
</row>
<row>
<entry>Высокое качество</entry>
<entry><option>vhq=2:bvhq=1:chroma_opt:quant_type=mpeg</option></entry>
<entry>18fps</entry>
<entry>-0.1дБ</entry>
</row>
<row>
<entry>Быстрое</entry>
<entry><option>turbo:vhq=0</option></entry>
<entry>28fps</entry>
<entry>-0.69дБ</entry>
</row>
<row>
<entry>Реального времени</entry>
<entry><option>turbo:nochroma_me:notrellis:max_bframes=0:vhq=0</option></entry>
<entry>38fps</entry>
<entry>-1.48дБ</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
</sect1>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<sect1 id="menc-feat-x264">
<title>Кодирование кодеком <systemitem class="library">x264</systemitem></title>
<para>
<systemitem class="library">x264</systemitem> &mdash; это свободная библиотека для
кодирования H.264/AVC видео потоков.
Перед началом кодирования Вы должны <link linkend="codec-x264-encode">
настроить <application>MEncoder</application> для его поддержки</link>.
</para>
<!-- ********** -->
<sect2 id="menc-feat-x264-encoding-options">
<title>Опции кодирования x264</title>
<para>
Начните, пожалуйста с просмотра раздела
<systemitem class="library">x264</systemitem>
man страницы <application>MPlayer</application>'а.
Этот раздел предполагается быть дополнением к странице man.
Здесь Вы найдете быстрые подсказки о том, какие опции чаще всего интересуют
большинство людей. Страница man более лаконична, но также более полна и порой
намного лучше преподносит технические детали.
</para>
<sect3 id="menc-feat-x264-encoding-options-intro">
<title>Введение</title>
<para>
Это руководство рассматривает две главные категории опций кодирования:
</para>
<orderedlist>
<listitem><para>
Опции, в основном влияющие на соотношение скорость-качество.
</para></listitem>
<listitem><para>
Опции, которые могут быть полезны для удовлетворения различных
пользовательский предпочтений и специальных требований.
</para></listitem>
</orderedlist>
<para>
В конце концов, только Вы можете решать какие опции являются лучшими для Ваших
целей. Решение для первого класса опций очень простое:
надо только определить, считаете ли Вы, что разница в качестве оправдывает разницу в
скорости. Для второго класса опций предпочтения могут быть значительно более
субъективными и зависеть от большего числа факторов.
Имейте в виду, что некоторые из опций категории "пользовательских предпочтений и специальных
требований" могут все же иметь большое влияние на скорость или качество,
но это не основное их предназначение.
Часть опций из "пользовательских предпочтений" могут даже привести к изменениям,
которые выглядят лучше для одних людей и хуже &mdash; для других.
</para>
<para>
Перед тем как продолжить, Вам придется понять, что это руководство использует
только одну метрику качества: глобальный PSNR.
Краткое описание того, что такое PSNR, смотрите в
<ulink url="http://en.wikipedia.org/wiki/PSNR">статье Википедии о PSNR</ulink>.
Глобальный PSNR &mdash; это последнее значение PSNR, выводимое на консоль, когда в
<option>x264encopts</option> включена опция <option>psnr</option>.
Каждый раз, когда Вы читаете утверждения о PSNR, за ними скрывается
предположение, что используются одинаковые значения битпотока.
</para>
<para>
Почти все комментарии этого руководства предполагают, что Вы используете два
прохода.
Есть две основные причины использовать двухпроходное кодирование при сравнении
опций.
Во-первых, использование двух проходов увеличивает PSNR примерно на 1дБ,
что является очень хорошим значением.
Во-вторых, тестирование опций прямым сравнением качества при однопроходном
кодировании вводит основной сбивающий фактор: зачастую битпоток значительно
меняется при каждом кодировании.
Не всегда можно с легкостью сказать, изменилось ли качество в основном за счет
изменения опций, или оно по большей части отражает случайные изменения
в полученном битпотоке.
</para>
</sect3>
<sect3 id="menc-feat-x264-encoding-options-speedvquality">
<title>Опции, затрагивающие, в основном, скорость и качество</title>
<itemizedlist>
<listitem>
<para>
<emphasis role="bold">subq</emphasis>:
Из всех опций, позволяющих выбирать между скоростью и качеством,
<option>subq</option> и <option>frameref</option> (смотрите ниже), пожалуй,
самые важные.
Если Вы заинтересованы в тонкой настройке либо скорости, либо качества,
эти две &mdash; первое, с чего Вам стоит начать.
С точки зрения скорости, опции <option>frameref</option> и
<option>subq</option> очень жестко взаимодействуют друг с другом.
Опыт показывает, что с одним ссылочным кадром
<option>subq=5</option> (настройка по умолчанию) расходует на 35% больше
времени, чем <option>subq=1</option>.
С 6 ссылочными кадрами эта величина достигает 60%.
Эффект <option>subq</option> на PSNR выглядит довольно постоянным, в отличие
от количества ссылочных кадров.
Как правило, <option>subq=5</option> достигает значения глобального PSNR
на 0.2-0.5 дБ большего, чем при <option>subq=1</option>.
Обычно этого достаточно, чтобы заметить.
</para>
<para>
<option>subq=6</option> &mdash; медленнее и дает лучшее качество при разумной
цене.
Если сравнивать с <option>subq=5</option>, он обычно дает на 0.1-0.4 дБ
больший глобальный PSNR ценой потери 25%-100% скорости.
В отличие от остальных уровней <option>subq</option>, поведение
<option>subq=6</option> не так сильно зависит от <option>frameref</option>
и <option>me</option>. Вместо этого, эффективность <option>subq=6</option>
по большей части зависит от количества используемых B-кадров. При
обычном использовании это означает, что <option>subq=6</option> в сложных,
высокодинамичных сценах имеет большое влияние как на скорость, так и на
качество, но в сценах с малым количествах движения она не имеет такого
эффекта. Имейте в виду, что по-прежнему рекомендуется всегда устанавливать
<option>bframes</option> в значение, отличное от нуля (смотрите далее).
</para>
<para>
<option>subq=7</option> &mdash; самый медленный режим с наилучшим качеством.
По сравнению с <option>subq=6</option> он, обычно, улучшает общий PSNR на
0.01-0.05 дБ ценой потери 15%-30% скорости.
Поскольку соотношение качества и времени кодирования очень невелико, Вам
следует использовать этот режим, только если боретесь за каждый бит, и время
кодирования Вас не волнует.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">frameref</emphasis>:
<option>frameref</option> по умолчанию установлена в 1, но это не значит, что
ее стоит устанавливать в 1.
Только увеличение <option>frameref</option> до 2 дает прирост PSNR примерно
на 0.15дБ за счет уменьшения скорости на 5-10%; похоже, что это неплохая цена.
<option>frameref=3</option> дает примерно 0.25дБ PSNR сверх
<option>frameref=1</option>, что должно быть видимой разницей.
<option>frameref=3</option> медленнее примерно на 15%, чем
<option>frameref=1</option>.
К сожалению, улучшение очень быстро сходит на нет.
От <option>frameref=6</option> можно ожидать прироста PSNR лишь на
0.05-0.1 дБ по сравнению с <option>frameref=3</option> с дополнительной
потерей 15% скорости.
Выше <option>frameref=6</option> качество обычно увеличивается очень незначительно
(хотя на всем протяжении этой дискуссии Вам следует иметь в виду, оно может
значительно изменяться в зависимости от исходного материала).
В довольно типичном случае <option>frameref=12</option> улучшит глобальный
PSNR всего на 0.02дБ по сравнению с <option>frameref=6</option>,
ценой 15%-20% скорости.
При таких высоких значениях <option>frameref</option>, единственная
действительно хорошая вешь, о которой может быть сказано, состоит в том, что
дальнейшее ее увеличение почти никогда не будет <emphasis
role="bold">вредить</emphasis> PSNR, но увеличение качества будет трудно даже
измерить, не говоря уже о его заметности.
</para>
<note><title>Замечание:</title>
<para>
Увеличение <option>frameref</option> до чрезмерно высоких значений
<emphasis role="bold">может</emphasis> и
<emphasis role="bold">обычно наносит</emphasis>
вред эффективности кодирования, если CABAC отключен.
С задействованным CABAC (настройка по умолчанию), возможность установки
<option>frameref</option> "слишком высоким" на данный момент выглядит слишком
далекой, чтобы об этом беспокоиться, а в будущем оптимизации могут вообще
убрать такую возможность.
</para></note>
<para>
Если Вас заботит скорость, разумным компромиссом будет использовать низкие
значения <option>subq</option> и <option>frameref</option> в первом проходе, а
затем увеличить их во втором. Обычно, это обладает ничтожным отрицательным
эффектом на конечное качество: Вы, возможно, потеряете вплоть до 0.1дБ PSNR,
что должно быть слишком малой разницей, чтобы её заметить.
Однако, различные значения <option>frameref</option> могут
иногда повлиять на решение о выборе типа кадра.
Скорее всего, это довольно редкие крайние случаи, но если Вы хотите быть точно
уверенными, посмотрите, содержит ли Ваше видео полноэкранные
<!-- FIXME is translation correct? -->
периодически вспыхивающие изображения или очень большие паузы, которые могут стать
причиной принудительной вставки I-кадра.
Настройте <option>frameref</option> в первом проходе так, чтобы
она была достаточно большой для содержания длительности цикла вспыхивания
(или паузы).
Например, если сцены вспыхивают и гаснут между двумя изображениями в течении
трёх кадров, установите <option>frameref</option> равным 3 или выше.
Эта проблема, возможно, очень редко появляется для живой съемки, но она иногда
возникает при записи видео игр.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">me</emphasis>:
Эта опция используется для выбора метода оценки движения.
Изменение этой опции оказывает прямое влияние на соотношение
скорость-качество. <option>me=dia</option> лишь на несколько процентов
быстрее, чем поиск по умолчанию, ценой не больше 0.1дБ глобального PSNR.
Значение по умолчанию (<option>me=hex</option>) &mdash; разумный выбор между скоростью
и качеством. <option>me=umh</option> немного, вплоть до 0.1дБ, улучшает
глобальный PSNR, соответствующее падение скорости меняется в
зависимости от <option>frameref</option>. С высокими значениями
<option>frameref</option> (например, 12 или около того), <option>me=umh</option>
примерно на 40% медленнее, чем настройка по умолчанию <option>me=hex</option>.
С <option>frameref=3</option>, падение скорости уменьшается до 25%-30%.
</para>
<para>
<option>me=esa</option> использует исчерпывающий поиск, который работает
слишком медленно для практического применения.
</para>
</listitem>
<listitem><para>
<emphasis role="bold">partitions=all</emphasis>:
Эта опция задействует использование сегментов 8x4, 4x8 и 4x4 в предсказанных
макроблоках (в дополнение к стандартным).
Ее включение приведет к довольно постоянной 10%-15% потере в скорости.
Эта опция практически бесполезна для исходного материала, содержащего только
небольшое движение, тем не менее, для некоторого высокодинамичного материала,
особенно с большим количеством мелких движущихся объектов, следует ожидать
прироста около 0.1дБ.
</para></listitem>
<listitem>
<para>
<emphasis role="bold">bframes</emphasis>:
Если Вы занимались кодированием с другими кодеками, то могли заметить, что
B-кадры не всегда полезны.
В H.264 это изменилось: есть новые техники и типы блоков, возможные в B-кадрах.
Обычно, даже примитивный алгоритм выбора B-кадров может дать значимую
выгоду для PSNR.
Интересно заметить, что использование B-кадров обычно отчасти ускоряет второй
проход, а также может ускорить однопроходное кодирование, если отключено
адаптивное принятие решения о B-кадрах.
</para>
<para>
С отключенным адаптивным принятием решения о B-кадрах
(<option>nob_adapt</option> в <option>x264encopts</option>),
оптимальное значение этой опции обычно не превышает
<option>bframes=1</option>, иначе могут пострадать высокодинамичные сцены.
С включенным адаптивным принятием решения о B-кадрах (поведение по умолчанию),
можно безопасно использовать более высокие значения; кодировщик уменьшит
количество B-кадров в сценах, где они повредят сжатию.
Кодировщик редко решает использовать больше, чем 3 или 4 B-кадра;
установка этой опции в любое более высокое значение не будет иметь большого
эффекта.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">b_adapt</emphasis>:
Заметьте: она включена по умолчанию.
</para>
<para>
Когда эта опция включена, кодировщик будет использовать разумно
быстрый процесс принятия решения для уменьшения количества B-кадров,
используемых в сценах, которые от этого не сильно выиграют.
Вы можете использовать <option>b_bias</option> для тонкой настройки того,
насколько "счастлив" будет кодировщик использованию B-кадров.
Потеря в скорости при использовании адаптивных B-кадров на данный момент
весьма невелика, но таково же и потенциальное улучшение качества.
Тем не менее, хуже от этого обычно не становится.
Заметьте, что эта опция влияет на скорость и решение о типе кадра только в первом
проходе.
<option>b_adapt</option> и <option>b_bias</option> не имеют эффекта в
последующих проходах.
</para>
</listitem>
<listitem><para>
<emphasis role="bold">b_pyramid</emphasis>:
С тем же успехом Вы можете включить эту опцию, если используете >=2 B-кадров;
Вы получите небольшое улучшение качества без потери в скорости, как и говорит
man руководство.
Имейте в виду, что такое видео не может быть прочитано основанными на
libavcodec декодерами, созданными ранее, чем примерно 5 Марта 2005.
</para></listitem>
<listitem>
<para>
<emphasis role="bold">weight_b</emphasis>:
В обычных случаях эта опция не дает большого улучшения.
Однако, в проявляющихся или затухающих сценах взвешенное предсказание дает
довольно большую экономию битпотока.
В MPEG-4 ASP затухание обычно лучше кодируется последовательностью дорогих
I-кадров; использование взвешенного предсказания в B-кадрах делает возможным
преобразовать хотя бы часть из них в значительно более меньшие B-кадры.
Потери в скорости кодирования минимальны, поскольку не требуется делать
дополнительные принятия решений.
Вдобавок, вопреки расхожему мнению, взвешенное предсказание не
сильно влияет на требования декодера к CPU при прочих равных условиях.
</para>
<para>
К сожалению, текущий алгоритм адаптивного принятия решений о B-кадрах имеет
твердую склонность к избеганию использования B-кадров при затуханиях.
До тех пор, пока это не изменится, хорошей идеей, возможно, будет добавить
<option>nob_adapt</option> к x264encopts, если предполагаете, что затухания
будут давать существенный вклад в Вашем конкретном видеоклипе.
</para>
</listitem>
<listitem id="menc-feat-x264-encoding-options-speedquality-threads">
<para>
<emphasis role="bold">threads</emphasis>
Эта опция позволяет породить потоки для параллельного кодирования на
нескольких CPU. Вы можете вручную выбрать количество создаваемых потоков или,
что лучше, установить <option>threads=auto</option> и позволить
<systemitem class="library">x264</systemitem> определить количество доступных
CPU и выбрать соответствующее количество потоков.
Если у Вас многопроцессорная машина, Вам следует всерьез задуматься об
использовании этой опции, так как она может увеличить скорость кодирования линейно
в зависимости от числа CPU ядер (около 94% на ядро), незначительно уменьшая PSNR
(примерно 0.005 дБ для двухпроцессорной, 0.01 дБ &mdash; для
четырехпроцессорной машины).
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3 id="menc-feat-x264-encoding-options-misc-preferences">
<title>Опции, относящиеся к различным предпочтениям</title>
<itemizedlist>
<listitem>
<para>
<emphasis role="bold">Двухпроходное кодирование</emphasis>:
Выше советовалось всегда использовать кодирование в два прохода, но все же
существуют причины этого не делать. Например, если Вы захватываете TV
трансляцию и кодируете в реальном времени, придется использовать однопроходный
режим. К тому же один проход очевидно быстрее, чем два; если Вы используете
точно такой же набор опций в обоих случаях, двухпроходной режим медленнее
почти вдвое.
</para>
<para>
Все же существует очень хорошие причины использовать кодирование в два
прохода. Во-первых, управление битпотоком однопроходного режима не
является телепатом и часто делает необоснованный выбор, потому что не может
видеть общую картину. Например, предположим, что Вы имеете двухминутное видео,
состоящее из двух независимых частей. Первая половина &mdash; очень динамичная
сцена, продолжающаяся 60 секунд и требующая сама по себе битпоток примерно
2500 кбит/сек, чтобы прилично выглядеть. Сразу за ней следует гораздо менее
требовательная 60-секундная сцена, которая хорошо выглядит при 300 кбит/сек.
Предположим, Вы запросили битпоток 1400 кбит/сек; в теории этого достаточно
для удовлетворения потребностей обеих сцен.
В этом случае управление битпотоком в однопроходном режиме сделает пару "ошибок".
Во-первых, оно установит битпоток в 1400 кбит/сек для обеих частей. Первая
часть может оказаться чрезмерно квантованной, что приведет к
недопустимо выглядящему и неоправданно блочному изображению. Вторая часть будет
существенно недостаточно квантованной; она может выглядеть отлично, но цена
битпотока для этого качества будет полностью неоправданной.
Чего намного труднее избежать, так это проблемы перехода между двумя
сценами. В первых секундах малодинамичной части квантователь будет чрезвычайно
превышен, потому что управление битпотоком все еще ожидает встретить такие же
требования к битпотоку как и в первой части. Этот "ошибочный период" с
чрезвычайно превышенным квантованием будет выглядеть раздражающе неприятно и
использовать на самом деле меньше, чем 300 кбит/сек, требуемых ему для того,
чтобы прилично выглядеть. Существуют способы смягчить эффект от подобных
подводных камней однопроходного режима, но они могут иметь склонность к
усилению неверного предсказания битпотока.
</para>
<para>
Многопроходное кодирование может предложить огромные преимущества по сравнению
с однопроходным. Используя статистику, собранную при первом проходе,
кодировщик может оценить, с разумной точностью, "стоимость" (в битах)
кодирования любого заданного кадра при любом заданном квантователе.
Это делает возможным намного более рациональное, лучше спланированное
распределение битов между дорогими (высокодинамичными) и дешевыми
(малодинамичными) сценами. Смотрите <option>qcomp</option> ниже, чтобы узнать
некоторые идеи о том, как можно это распределение настроить по Вашему вкусу.
</para>
<para>
Более того, два прохода занимают не двойное время по сравнению с одним.
Вы можете настроить опции первого прохода на более быструю скорость и низкое
качество. Если хорошо выберете опции, Вы получите очень быстрый первый проход.
Полученное качество во втором проходе будет несколько ниже, потому что
предсказание размера менее точно, но разница в качестве обычно слишком мала,
чтобы быть заметной. Попробуйте, например, добавить
<option>subq=1:frameref=1</option> в <option>x264encopts</option> первого
прохода. Затем, при втором проходе, используйте более медленные, с лучшим
качеством опции:
<option>subq=6:frameref=15:partitions=all:me=umh</option>
</para>
</listitem>
<listitem><para>
<emphasis role="bold">Кодирование в три прохода</emphasis>?
x264 предоставляет возможность делать желаемое количество последовательных
проходов. Если Вы указали <option>pass=1</option> при первом проходе,
используйте затем <option>pass=3</option> в последующем проходе, этот проход
будет одновременно читать статистику предыдущего прохода и записывать свою
собственную. Дополнительный проход, следующий за этим, будет иметь очень
хорошую основу для осуществления очень точных предсказаний размеров кадров при
выбранном квантователе. На практике, общее улучшение качества от использования
этого режима близко к нулю и, вполне возможно, третий проход приведет к
немного худшему глобальному PSNR, чем у предыдущего прохода.
При обычном использовании три прохода помогают, если Вы при двух проходах
получаете либо плохое предсказание битпотока, либо плохо выглядящие переходы
между сценами. Это отчасти то, что наверняка будет происходить на очень
коротких клипах. Существуют также особые случаи, когда три (или более)
проходом удобны для продвинутых пользователей, но, для краткости, это
руководство не включает в себя описание этих особых случаев.
</para></listitem>
<listitem><para>
<emphasis role="bold">qcomp</emphasis>:
<option>qcomp</option> управляет соотношением количества бит, отданных
"дорогим" высокодинамичным и "дешевым" малодинамичным кадрам. Один крайний
случай: <option>qcomp=0</option>, предназначен для истинно постоянного
битпотока. Обычно это сделает высокодинамичные сцены выглядящими просто
ужасно, в то время как малодинамичные сцены будут, возможно, выглядеть
абсолютно великолепно, но при этом будут использовать во много раз больший
битпоток, чем им необходимо, чтобы выглядеть лишь превосходно.
Другая крайность: <option>qcomp=1</option>, добивается примерно одинакового
параметра квантования (QP). Постоянный QP не выглядит плохо, но большинство
людей думают, что более разумно частично снизить битпоток в сильно
дорогих сценах (где потеря качества не очень заметна) и перераспределить их в
сцены, которые легче закодировать с отличным качеством.
<option>qcomp</option> по умолчанию установлена в 0.6, что по мнению многих
людей может быть несколько мало (также часто используется 0.7-0.8).
</para></listitem>
<listitem><para>
<emphasis role="bold">keyint</emphasis>:
<option>keyint</option> &mdash; единственная возможность выбора между удобством
перемещения по файлу и эффективностью кодирования. По-умолчанию
<option>keyint</option> установлена в 250. В материале с 25fps это гарантирует
возможность перемещения с точностью до 10 секунд. Если Вы считаете, что более
важным и полезным будет перемещение с точностью до 5 секунд, установите
<option>keyint=125</option>; это немного ухудшит качество/битпоток. Если Вы
заботитесь только о качестве, но не о перемещаемости, Вы можете установить
значение этой опции в более высокое значение (понимая, что улучшение будет
убывающим, вплоть до исчезающе малого или даже нулевого). Видео поток
по-прежнему будет иметь точки перемещения, пока в нем есть какие-то изменения
сцен.
</para></listitem>
<listitem>
<para>
<emphasis role="bold">deblock</emphasis>:
Этот раздел может быть несколько спорным.
</para>
<para>
H.264 определяет простую процедуру удаления блочности в I-блоках, которая
использует предустановленные степени обработки и пороговые значения в
зависимости от QP рассматриваемого блока.
По-умолчанию, блоки с высоким QP обрабатываются сильнее, а в блоках с низким
QP удаление блочности вообще не производится.
Предустановленые степени обработки, определенные стандартом, тщательно подобраны
и имеют хорошие шансы быть PSNR-оптимальными для любого видео, которое Вы
пытаетесь кодировать.
Опция <option>deblock</option> позволяет указать смещения предустановленных
пороговых значений деблокинга.
</para>
<para>
Похоже, многие думают, что хорошей идеей является значительное уменьшение силы
воздействия фильтра деблокинга (читай, -3).
Это, однако, почти никогда не является хорошей идеей, и, люди, это делающие, в большинстве
случаев не совсем хорошо понимают, как работает удаление
блочности по умолчанию.
</para>
<para>
<!-- FIXME: Можно ли как-то перевести in-loop? -->
Первая и самая важная вещь, которую нужно знать о in-loop фильтре удаления
блочности состоит в том, что пороговые значения по умолчанию практически
всегда PSNR-оптимальны.
В редких случаях, где они неоптимальны, идеальное смещение будет плюс минус 1.
Изменение параметров деблокинга на большие значения фактически гарантирует
ухудшение PSNR.
Усиление фильтра размажет больше деталей; ослабление &mdash; оставит больше квадратиков.
</para>
<para>
По определению плохая идея уменьшать пороги деблокинга, если Ваш исходный
материал в основном имеет небольшую пространственную сложность (т.е. не имеет
множества деталей или шума).
In-loop фильтр делает весьма неплохую работу по сокрытию появляющихся
артефактов. Однако, если исходный материал имеет высокую пространственную
сложность, артефакты будут практически незаметны.
Это происходит потому, что ореолы имеют склонность выглядеть как детали или
шум. Зрительное восприятие легко замечает отсутствие деталей, но ему не так
легко обратить внимание на неверно изображенный шум.
Когда речь идет о субъективном качестве, шум и детали в некоторой степени
взаимозаменяемы.
Уменьшая силу фильтра удаления блочности, Вы, скорее всего, увеличиваете ошибку,
добавляя ореолы, но глаз этого не замечает, поскольку он путает артефакты с
деталями.
</para>
<para>
Однако, это <emphasis role="bold">по-прежнему</emphasis> не оправдывает
уменьшение силы фильтра. Вы в большинстве случаев можете получить более
качественный шум при помощи постобработки.
Если результат кодирования при помощи H.264 выглядит слишком смазанным или
размытым, попробуйте поиграть с <option>-vf noise</option>, при
воспроизведении закодированного фильма.
<option>-vf noise=8a:4a</option> должна скрыть большинство мелких артефактов.
Ее результат почти наверняка будет выглядеть лучше, чем полученный при помощи
махинаций с фильтром удаления блочности.
</para>
</listitem>
</itemizedlist>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-x264-example-settings">
<title>Примеры настроек кодирования</title>
<para>
Последующие настройки &mdash; это примеры различных комбинаций опций кодирования,
которые влияют на соотношения скорость-качество при той же величине целевого
битпотока.
</para>
<para>
Все настройки кодирования проверялись на тестовом видео 720x448 @30000/1001 fps
с целевым битпотоком 900кбит/сек, на машине AMD-64 3400+ с 2400 МГц и 64-х битном режиме.
Для каждой настройки кодирования указаны измеренная скорость кодирования (в
кадрах в секунду) и потеря PSNR (в дБ) по сравнению с настройкой "очень высокое
качество". Поймите, пожалуйста, что в зависимости от Вашего материала, типа
машины, прогресса разработки Вы можете получить сильно отличающиеся результаты.
</para>
<informaltable frame="all">
<tgroup cols="4">
<thead>
<row>
<entry>Описание</entry>
<entry>Опции кодирования</entry>
<entry>скорость (в fps)</entry>
<entry>Относительная потеря PSNR (в дБ)</entry>
</row>
</thead>
<tbody>
<row>
<entry>Очень высокое качество</entry>
<entry><option>subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b</option></entry>
<entry>6fps</entry>
<entry>0дБ</entry>
</row>
<row>
<entry>Высокое качество</entry>
<entry><option>subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b</option></entry>
<entry>13fps</entry>
<entry>-0.89дБ</entry>
</row>
<row>
<entry>Быстро</entry>
<entry><option>subq=4:bframes=2:b_pyramid:weight_b</option></entry>
<entry>17fps</entry>
<entry>-1.48дБ</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
</sect1>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<sect1 id="menc-feat-video-for-windows">
<title>
Кодирование семейством кодеков <systemitem class="library">Video For Windows</systemitem>
</title>
<para>
Video for Windows предоставляет простое кодирование при помощи бинарных видео
кодеков. Вы можете кодировать следующими кодеками (если у Вас есть другие,
сообщите нам!)
</para>
<para>
Имейте в виду, что поддержка этой возможности очень экспериментальная и
некоторые кодеки могут не работать корректно. Некоторые кодеки могут работать
только в определенных пространствах цветов, попробуйте
<option>-vf format=bgr24</option> и <option>-vf format=yuy2</option>,
если кодек выдает ошибку или кодирует неверно.
</para>
<!-- ********** -->
<sect2 id="menc-feat-enc-vfw-video-codecs">
<title>Поддерживаемые кодеки Video for Windows</title>
<para>
<informaltable frame="all">
<tgroup cols="4">
<thead>
<row>
<entry>Имя файла с видео кодеком</entry>
<entry>Описание (FourCC)</entry>
<entry>md5sum</entry>
<entry>Комментарий</entry>
</row>
</thead>
<tbody>
<row>
<entry>aslcodec_vfw.dll</entry>
<entry>Alparysoft vfw кодек без потерь (ASLC)</entry>
<entry>608af234a6ea4d90cdc7246af5f3f29a</entry>
<entry></entry>
</row>
<row>
<entry>avimszh.dll</entry>
<entry>AVImszh (MSZH)</entry>
<entry>253118fe1eedea04a95ed6e5f4c28878</entry>
<entry>необходим <option>-vf format</option></entry>
</row>
<row>
<entry>avizlib.dll</entry>
<entry>AVIzlib (ZLIB)</entry>
<entry>2f1cc76bbcf6d77d40d0e23392fa8eda</entry>
<entry></entry>
</row>
<row>
<entry>divx.dll</entry>
<entry>DivX4Windows-VFW</entry>
<entry>acf35b2fc004a89c829531555d73f1e6</entry>
<entry></entry>
</row>
<row>
<entry>huffyuv.dll</entry>
<entry>HuffYUV (без потерь) (HFYU)</entry>
<entry>b74695b50230be4a6ef2c4293a58ac3b</entry>
<entry></entry>
</row>
<row>
<entry>iccvid.dll</entry>
<entry>Cinepak Video (cvid)</entry>
<entry>cb3b7ee47ba7dbb3d23d34e274895133</entry>
<entry></entry>
</row>
<row>
<entry>icmw_32.dll</entry>
<entry>Motion Wavelets (MWV1)</entry>
<entry>c9618a8fc73ce219ba918e3e09e227f2</entry>
<entry></entry>
</row>
<row>
<entry>jp2avi.dll</entry>
<entry>ImagePower MJPEG2000 (IPJ2)</entry>
<entry>d860a11766da0d0ea064672c6833768b</entry>
<entry><option>-vf flip</option></entry>
</row>
<row>
<entry>m3jp2k32.dll</entry>
<entry>Morgan MJPEG2000 (MJ2C)</entry>
<entry>f3c174edcbaef7cb947d6357cdfde7ff</entry>
<entry></entry>
</row>
<row>
<entry>m3jpeg32.dll</entry>
<entry>Morgan Motion JPEG Codec (MJPG)</entry>
<entry>1cd13fff5960aa2aae43790242c323b1</entry>
<entry></entry>
</row>
<row>
<entry>mpg4c32.dll</entry>
<entry>Microsoft MPEG-4 v1/v2</entry>
<entry>b5791ea23f33010d37ab8314681f1256</entry>
<entry></entry>
</row>
<row>
<entry>tsccvid.dll</entry>
<entry>TechSmith Camtasia Screen Codec (TSCC)</entry>
<entry>8230d8560c41d444f249802a2700d1d5</entry>
<entry>ошибка shareware в windows</entry>
</row>
<row>
<entry>vp31vfw.dll</entry>
<entry>On2 Open Source VP3 Codec (VP31)</entry>
<entry>845f3590ea489e2e45e876ab107ee7d2</entry>
<entry></entry>
</row>
<row>
<entry>vp4vfw.dll</entry>
<entry>On2 VP4 Personal Codec (VP40)</entry>
<entry>fc5480a482ccc594c2898dcc4188b58f</entry>
<entry></entry>
</row>
<row>
<entry>vp6vfw.dll</entry>
<entry>On2 VP6 Personal Codec (VP60)</entry>
<entry>04d635a364243013898fd09484f913fb</entry>
<entry></entry>
</row>
<row>
<entry>vp7vfw.dll</entry>
<entry>On2 VP7 Personal Codec (VP70)</entry>
<entry>cb4cc3d4ea7c94a35f1d81c3d750bc8d</entry>
<entry>неверный FourCC?</entry>
</row>
<row>
<entry>ViVD2.dll</entry>
<entry>SoftMedia ViVD V2 VfW кодек (GXVE)</entry>
<entry>a7b4bf5cac630bb9262c3f80d8a773a1</entry>
<entry></entry>
</row>
<row>
<entry>msulvc06.DLL</entry>
<entry>MSU кодек без потерь (MSUD)</entry>
<entry>294bf9288f2f127bb86f00bfcc9ccdda</entry>
<entry>
Может декодироваться <application>Window Media Player</application>,
но не <application>MPlayer</application> (пока).
</entry>
</row>
<row>
<entry>camcodec.dll</entry>
<entry>CamStudio lossless video codec (CSCD)</entry>
<entry>0efe97ce08bb0e40162ab15ef3b45615</entry>
<entry>sf.net/projects/camstudio</entry>
</row>
</tbody>
</tgroup>
</informaltable>
Первый столбец содержит имена кодеков, которые должны указываться после
параметра <literal>codec</literal>,
например: <option>-xvfwopts codec=divx.dll</option>
FourCC код, используемый каждым кодеком, указан в скобках.
</para>
<informalexample>
<para>
Пример конвертации ISO DVD ролика в VP6 flash видео файл с использованием
compdata настроек битпотока:
<screen>
mencoder -dvd-device <replaceable>zeiram.iso</replaceable> dvd://7 -o <replaceable>trailer.flv</replaceable> \
-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 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames
</screen>
</para>
</informalexample>
</sect2>
<sect2 id="menc-feat-video-for-windows-bitrate-settings">
<title>Использование vfw2menc для создания файла настроек кодека.</title>
<para>
Для кодирования кодеками Video for Windows, Вам потребуется установить
величину битпотока и другие опции. Известно, что это работает на x86 и для
*NIX, и для Windows.
</para>
<para>
Во-первых, Вы должны собрать программу <application>vfw2menc</application>.
Она находится в подкаталоге <filename class="directory">TOOLS</filename>
дерева исходников MPlayer.
Для сборки под Linux, это можно сделать, воспользовавшись <application>Wine</application>:
<screen>winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32</screen>
Для сборки под Windows в <application>MinGW</application> или
<application>Cygwin</application> используйте:
<screen>gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32</screen>
Для сборки в <application>MSVC</application> вам потребуется getopt.
Getopt можно найти в исходном архиве <application>vfw2menc</application>,
доступном в:
Проект <ulink url="http://oss.netfarm.it/mplayer-win32.php">MPlayer на win32</ulink>.
</para>
<informalexample>
<para>
Далее следует пример использования с VP6 кодеком.
<screen>
vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
</screen>
Это откроет диалоговое окно кодека VP6. Повторите этот шаг для второго прохода,
указав <option>-s <replaceable>secondpass.mcf</replaceable></option>.
</para>
</informalexample>
<para>
Пользователи Windows могут использовать
<option>-xvfwopts codec=vp6vfw.dll:compdata=dialog</option>,
для показа окна настроек кодека перед началом кодирования.
</para>
</sect2>
</sect1>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<sect1 id="menc-feat-quicktime-7">
<title>Использование <application>MEncoder</application>
для создания совместимых с <application>QuickTime</application>
файлов</title>
<sect2 id="menc-feat-quicktime-7-why-use-it">
<title>Зачем необходимо создавать совместимые с <application>QuickTime</application>
файлы?</title>
<para>
Есть несколько причин, по которым создание
<application>QuickTime</application>-совместимых файлов может быть
желательно.
</para>
<itemizedlist>
<listitem><para>
Вы хотите, чтобы любой компьютерно неграмотный человек мог смотреть
результат Вашего кодирования на большинстве платформ (Windows, Mac OS X, Unices &hellip;).
</para></listitem>
<listitem><para>
<application>QuickTime</application>
позволяет воспользоваться преимуществами большего числа возможностей
аппаратного и программного ускорения на Mac OS X, чем платформо-независимые
плееры наподобие <application>MPlayer</application> или
<application>VLC</application>.
Это означает, что Ваше кодирование имеет шансы плавно воспроизводиться
на старых машинах, оснащённых G4.
</para></listitem>
<listitem><para>
<application>QuickTime</application> 7 поддерживает кодек нового поколения
H.264, который даёт существенно лучшее качество изображения, чем
предыдущие поколения кодеков (MPEG-2, MPEG-4 &hellip;).
</para></listitem>
</itemizedlist>
</sect2>
<sect2 id="menc-feat-quicktime-7-constraints">
<title>Ограничения <application>QuickTime</application> 7</title>
<para>
<application>QuickTime</application> 7 поддерживает H.264 видео и
AAC аудио, но не поддерживает их мультиплексирование в формат
контейнера AVI.
Однако, Вы можете использовать <application>MEncoder</application>
для кодирования видео и аудио, а потом использовать внешнюю
программу, такую как <application>mp4creator</application> (часть
<ulink url="http://mpeg4ip.sourceforge.net/">пакета MPEG4I</ulink>)
для ремультиплексирования видео и аудио дорожек в контейнер MP4.
</para>
<para>
Поддержка H.264 в <application>QuickTime</application> ограничена,
так что Вам придётся отказаться от нескольких продвинутых возможностей.
Если Вы кодируете видео с возможностями, не поддерживаемыми
<application>QuickTime</application> 7,
плееры, основанные на <application>QuickTime</application>,
покажут Вам милый белый экран вместо ожидаемого Вами видео.
</para>
<itemizedlist>
<listitem><para>
<emphasis role="bold">B-кадры</emphasis>:
<application>QuickTime</application> 7 поддерживает максимум 1 B-кадр,
т.е. <option>-x264encopts bframes=1</option>. Это означает, что
<option>b_pyramid</option> и <option>weight_b</option> не дадут
эффекта, поскольку им необходимо, чтобы <option>bframes</option>
было больше 1.
</para></listitem>
<listitem><para>
<emphasis role="bold">Макроблоки</emphasis>:
<application>QuickTime</application> 7 не поддерживает 8x8 DCT макроблоки.
Эта опция (<option>8x8dct</option>) выключена по умолчанию, так что
просто удостоверьтесь, что явно её не задали.
Это также означает, что опция <option>i8x8</option> будет бесполезна,
т.к. ей необходима <option>8x8dct</option>.
</para></listitem>
<listitem><para>
<emphasis role="bold">Коэффициент соотношения сторон</emphasis>:
<application>QuickTime</application> 7 не поддерживает информацию
SAR (коэффициент пропорций пиксела, sample aspect ratio)
в MPEG-4 файлах; он предполагает SAR=1. Прочтите
<link linkend="menc-feat-quicktime-7-scale">раздел о масштабировании</link>
для обхода проблемы.
</para></listitem>
</itemizedlist>
</sect2>
<sect2 id="menc-feat-quicktime-7-crop">
<title>Обрезание</title>
<para>
Предположим, что Вы хотите сделать рип свежекупленной копии "Хроник
Нарнии" и Ваш регион DVD 1, что означает, что это NTSC.
Пример ниже будет также применим к PAL, за исключением того, что Вам
нужно будет опустить <option>-ofps 24000/1001</option> и использовать
слегка отличающиеся размеры для <option>crop</option> и <option>scale</option>.
</para>
<para>
После запуска <option>mplayer dvd://1</option>, Вы следуете процессу,
описанному в разделе <link linkend="menc-feat-telecine">Как работать
с телесином и чересстрочной развёрткой на NTSC DVD</link> и обнаруживаете,
что это 24000/1001 fps видео с построчной развёрткой. Это несколько
упрощает обработку, поскольку Вам не нужно использовать фильтр
обратного телесина, такой как <option>pullup</option>, или фильтр
деинтерлейса, такой как <option>yadif</option>.
</para>
<para>
Затем Вам необходимо усечь чёрные полосы сверху и снизу видео, как
описано в <link linkend="menc-feat-dvd-mpeg4-example-crop">этом</link>
разделе.
</para>
</sect2>
<sect2 id="menc-feat-quicktime-7-scale">
<title>Масштабирование</title>
<para>
Следующий шаг действительно душераздирающий.
<application>QuickTime</application> 7 не поддерживает MPEG-4 видео
с коэффициентом соотношения сторон пиксела, отличным от 1. Так что Вам
придётся масштабировать видео либо в сторону увеличения (что впустую
потратит много места на диске), либо в строну уменьшения (что приведёт
к потере некоторых деталей источника) для квадратизации пикселов.
Какой бы способ Вы не выбрали, это будет крайне неэффективным, но
не может быть опущено, если Вы хотите, чтоб Ваше видео воспроизводилось
с помощью <application>QuickTime</application> 7.
<application>MEncoder</application> может применить необходимое
увеличивающее или уменьшающее масштабирование, если ему указать
<option>-vf scale=-10:-1</option> или <option>-vf scale=-1:-10</option>
соответственно.
Это отмасштабирует Ваше видео до корректной ширины для усечённой
высоты, округлённой до ближайшего множителя 16 для оптимального
сжатия.
Помните, что если производите обрезание, то нужно сперва обрезать, а лишь затем
масштабировать:
<screen>-vf crop=720:352:0:62,scale=-10:-1</screen>
</para>
</sect2>
<sect2 id="menc-feat-quicktime-7-avsync">
<title>A/V синхронизация</title>
<para>
Поскольку Вы будете мультиплексировать в другой контейнер, Вы должны
всегда использовать опцию <option>harddup</option>, чтобы убедиться,
что дублирующиеся кадры будут действительно дублироваться в полученном
видео. Без этой опции <application>MEncoder</application> будет просто
располагать маркер в видеопотоке о том, что кадр был повторен, и будет
полагаться на то, что клиентское программное обеспечение покажет кадр
дважды. К сожалению, это "мягкое дублирование" не переживает
ремультиплексирование, в результате чего аудио будет постепенно терять
синхронизацию с видео.
</para>
<para>
В итоге, цепочка фильтров выглядит следующим образом:
<screen>-vf crop=720:352:0:62,scale=-10:-1,harddup</screen>
</para>
</sect2>
<sect2 id="menc-feat-quicktime-7-bitrate">
<title>Битпоток</title>
<para>
Как обычно, выбор битпотока зависит от технических свойств исходного
материала, как объясняется
<link linkend="menc-feat-dvd-mpeg4-resolution-bitrate">здесь</link>,
как, впрочем, и от личного вкуса.
Этот фильм обладает небольшим количеством движения и большим
количеством деталей, но H.264 видео хорошо выглядит на существенно
меньших битпотоках, чем XviD или другие MPEG-4 кодеки.
После длительного экспериментирования, автор данного руководства
решил кодировать фильм на 900 кбит/сек, и считает, что он выглядит
очень хорошо. Вы можете уменьшить битпоток, если Вам нужно сохранить
больше места, или увеличить, если Вам нужно улучшить качество.
</para>
</sect2>
<sect2 id="menc-feat-quicktime-7-example">
<title>Пример кодирования</title>
<para>
Теперь Вы готовы к кодированию видео. Поскольку Вы заботитесь
о качестве, Вы , разумеется, будете делать двупроходное кодирование.
Для некоторого сокращения времени кодирования, Вы можете указать
опцию <option>turbo</option> при первом проходе; это уменьшит
<option>subq</option> и <option>frameref</option> до 1.
Чтобы сохранить немного места на диске, Вы можете использовать
параметр <option>ss</option> для отрезания первых нескольких
секунд видео. (Я обнаружил, что, в частности, у данного фильма
есть 32 секунды титров и логотипов.)
<option>bframes</option> может быть 0 или 1.
остальные опции описаны в разделе <link
linkend="menc-feat-x264-encoding-options-speedvquality">Кодирование
кодеком <systemitem class="library">x264</systemitem></link> и на
man странице.
<screen>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=1 -channels 2 -srate 48000 \
-ofps 24000/1001</screen>
Если у Вас многопроцессорная машина, не упустите шанс значительно
ускорить кодирование задействованием
<link linkend="menc-feat-x264-encoding-options-speedquality-threads">
многопоточного режима <systemitem class="library">x264</systemitem></link>,
добавив <option>threads=auto</option> в <option>x264encopts</option> в
командной строке.
</para>
<para>
Второй проход выполняется аналогично, за исключением того, что Вам
нужно указать выходной файл и установить <option>pass=2</option>.
<screen>mencoder dvd://1 <emphasis role="bold">-o нарния.avi</emphasis> -ss 32 -ovc x264 \
-x264encopts <emphasis role="bold">pass=2</emphasis>: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=1 -channels 2 -srate 48000 \
-ofps 24000/1001</screen>
</para>
<para>
Получившееся AVI должно хорошо воспроизводиться в
<application>MPlayer</application>, но, конечно же,
<application>QuickTime</application> не сможет его воспроизвести,
т.к. не поддерживает H.264, мультиплексированный в AVI.
Так что следующий шаг &mdash; ремультиплексирование видео в контейнер MP4.
</para>
</sect2>
<sect2 id="menc-feat-quicktime-7-remux">
<title>Ремультиплексирование в MP4</title>
<para>
Существует несколько способов ремультиплексирования AVI файлов
в MP4. Вы можете использовать <application>mp4creator</application>,
являющийся частью
<ulink url="http://mpeg4ip.sourceforge.net/">пакета MPEG4IP</ulink>.
</para>
<para>
Сперва демультиплексируйте AVI в отдельные аудио и видео потоки
с помощью <application>MPlayer</application>.
<screen>mplayer нарния.avi -dumpaudio -dumpfile нарния.aac
mplayer нарния.avi -dumpvideo -dumpfile нарния.h264</screen>
Имена файлов важны; для <application>mp4creator</application>
необходимо, чтобы AAC аудио потоки назывались <systemitem>.aac</systemitem>
и H.264 видео потоки назывались <systemitem>.h264</systemitem>.
</para>
<para>
Теперь используйте <application>mp4creator</application> для создания
нового MP4 файла из аудио и видео потоков.
<screen>mp4creator -create=нарния.aac нарния.mp4
mp4creator -create=нарния.h264 -rate=23.976 нарния.mp4</screen>
В отличии от этапа кодирования, Вам нужно указать частоту кадров
как десятичную (например, 23.976), а не целую (например, 24000/1001)
дробь.
</para>
<para>
Теперь файл <systemitem>нарния.mp4</systemitem> должен проигрываться
с помощью любого <application>QuickTime</application> 7 приложения,
например, <application>QuickTime Player</application> или
<application>iTunes</application>.
Если Вы планируете просмотр видео в вэб-браузере с помощью плагина
<application>QuickTime</application>, Вам также необходимо
модифицировать фильм таким образом, чтобы плагин
<application>QuickTime</application> мог начать его воспроизведение
ещё во время загрузки. <application>mp4creator</application>
может создать эти вспомогательные дорожки (т.н. hint tracks):
<screen>mp4creator -hint=1 нарния.mp4
mp4creator -hint=2 нарния.mp4
mp4creator -optimize нарния.mp4</screen>
Вы можете проверить полученный результат, чтобы убедиться, что
вспомогательные дорожки были успешно созданы.
<screen>mp4creator -list нарния.mp4</screen>
Вы должны увидеть список дорожек: 1 аудио, 1 видео и 2 вспомогательных.
<screen>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
</screen>
</para>
</sect2>
<sect2 id="menc-feat-quicktime-7-metadata">
<title>Добавление тегов метаданных</title>
<para>
Если Вы хотите добавить в видео теги, которые отображаются в iTunes, Вы
можете использовать
<ulink url="http://atomicparsley.sourceforge.net/">AtomicParsley</ulink>.
<screen>AtomicParsley нарния.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite</screen>
Опция <option>--metaEnema</option> удаляет любые существующие метаданные
(<application>mp4creator</application> вставляет своё название в тег
"утилита кодирования") и <option>--freefree</option> высвобождает место,
оставшееся от удалённых метаданных.
Опция <option>--stik</option> устанавливает тип видео (например,
Movie или TV Show), который используется iTunes для группировки
родственных видеофайлов.
Опция <option>--overWrite</option> перезаписывает исходный файл; без неё
<application>AtomicParsley</application> создаст новый файл с автоматическим
именем в том же каталоге и оставит исходный файл нетронутым.
</para>
</sect2>
</sect1>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<sect1 id="menc-feat-vcd-dvd">
<title>Использование <application>MEncoder</application>
для создания VCD/SVCD/DVD-совместимых файлов.</title>
<sect2 id="menc-feat-vcd-dvd-constraints">
<title>Ограничения формата</title>
<para>
<application>MEncoder</application> способен создавать MPEG файлы VCD, SCVD
и DVD формата, используя библиотеку <systemitem class="library">libavcodec</systemitem>.
Эти файлы затем могут быть использованы совместно с
<ulink url="http://www.gnu.org/software/vcdimager/vcdimager.html">vcdimager</ulink>
или
<ulink url="http://dvdauthor.sourceforge.net/">dvdauthor</ulink>
для создания дисков, которые будут воспроизводиться на стандартном видео
проигрывателе.
</para>
<para>
DVD, SVCD, и VCD форматы обладают жесткими ограничениями. Доступен только небольшой выбор
размеров и пропорций кодируемого изображения.
Если Ваш фильм пока не удовлетворяет этим ограничениям, придется изображение
масштабировать, обрезать или добавлять к нему черные полосы, чтобы добиться
совместимости.
</para>
<sect3 id="menc-feat-vcd-dvd-constraints-resolution">
<title>Ограничения форматов</title>
<informaltable frame="all">
<tgroup cols="9">
<thead>
<row>
<entry>Формат</entry>
<entry>Разрешение</entry>
<entry>Вид. Кодек</entry>
<entry>Вид. Битпоток</entry>
<entry>Дискретизация</entry>
<entry>Ауд. Кодек</entry>
<entry>Ауд. Битпоток</entry>
<entry>FPS</entry>
<entry>Пропорции</entry>
</row>
</thead>
<tbody>
<row>
<entry>NTSC DVD</entry>
<entry>720x480, 704x480, 352x480, 352x240</entry>
<entry>MPEG-2</entry>
<entry>9800 кбит/с</entry>
<entry>48000 Гц</entry>
<entry>AC3,PCM</entry>
<entry>1536 кбит/с (макс.)</entry>
<entry>30000/1001, 24000/1001</entry>
<entry>4:3, 16:9 (только для 720x480)</entry>
</row>
<row>
<entry>NTSC DVD</entry>
<entry>352x240<footnote id='fn-rare-resolutions'><para>
Эти разрешения редко используются для DVD, поскольку имеют довольно низкое
качество.</para></footnote></entry>
<entry>MPEG-1</entry>
<entry>1856 кбит/с</entry>
<entry>48000 Гц</entry>
<entry>AC3,PCM</entry>
<entry>1536 кбит/с (макс.)</entry>
<entry>30000/1001, 24000/1001</entry>
<entry>4:3, 16:9</entry>
</row>
<row>
<entry>NTSC SVCD</entry>
<entry>480x480</entry>
<entry>MPEG-2</entry>
<entry>2600 кбит/с</entry>
<entry>44100 Гц</entry>
<entry>MP2</entry>
<entry>384 кбит/с (макс.)</entry>
<entry>30000/1001</entry>
<entry>4:3</entry>
</row>
<row>
<entry>NTSC VCD</entry>
<entry>352x240</entry>
<entry>MPEG-1</entry>
<entry>1150 кбит/с</entry>
<entry>44100 Гц</entry>
<entry>MP2</entry>
<entry>224 кбит/с</entry>
<entry>24000/1001, 30000/1001</entry>
<entry>4:3</entry>
</row>
<row>
<entry>PAL DVD</entry>
<entry>720x576, 704x576, 352x576, 352x288</entry>
<entry>MPEG-2</entry>
<entry>9800 кбит/с</entry>
<entry>48000 Гц</entry>
<entry>MP2,AC3,PCM</entry>
<entry>1536 кбит/с (макс.)</entry>
<entry>25</entry>
<entry>4:3, 16:9 (только для 720x576)</entry>
</row>
<row>
<entry>PAL DVD</entry>
<entry>352x288<footnoteref linkend='fn-rare-resolutions'/></entry>
<entry>MPEG-1</entry>
<entry>1856 кбит/с</entry>
<entry>48000 Гц</entry>
<entry>MP2,AC3,PCM</entry>
<entry>1536 кбит/с (макс.)</entry>
<entry>25</entry>
<entry>4:3, 16:9</entry>
</row>
<row>
<entry>PAL SVCD</entry>
<entry>480x576</entry>
<entry>MPEG-2</entry>
<entry>2600 кбит/с</entry>
<entry>44100 Гц</entry>
<entry>MP2</entry>
<entry>384 кбит/с (макс.)</entry>
<entry>25</entry>
<entry>4:3</entry>
</row>
<row>
<entry>PAL VCD</entry>
<entry>352x288</entry>
<entry>MPEG-1</entry>
<entry>1152 кбит/с</entry>
<entry>44100 Гц</entry>
<entry>MP2</entry>
<entry>224 кбит/с</entry>
<entry>25</entry>
<entry>4:3</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
Если Ваш фильм имеет пропорции 2.35:1 (большинство современных фильмов с обилием движения),
для создания DVD или VCD придется добавить черные полосы или обрезать фильм до
16:9. Добавляя черные полосы, пытайтесь выровнять их размеры на границу в 16 пикселов,
чтобы минимизировать влияние на производительность кодирования.
К счастью, DVD имеет достаточно избыточный битпоток, чтобы не сильно
беспокоиться об эффективности кодирования, но SVCD и VCD весьма ограничены в
битпотоке и требуют определенных усилий для достижения приемлемого качества.
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-constraints-gop">
<title>Ограничения на размер GOP</title>
<para>
DVD, VCD, и SVCD также ограничивают Вас относительно низкими размерами
GOP (Group of Pictures, Группа Изображений).
Для материала с 30 fps максимальный допустимый размер GOP равен 18.
Для 25 или 24 fps, максимум равен 15.
Размер GOP устанавливается опцией <option>keyint</option>.
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-constraints-bitrate">
<title>Ограничения на битпоток</title>
<para>
VCD видео должно быть CBR с 1152 кбит/с.
Это сильное ограничение усугубляется, к тому же, чрезвычайно низким размером vbv
буфера, равным 327 килобит.
SVCD допускает различные значения видео битпотока вплоть до 2500 кбит/с и не
так сильно стесняющий размер vbv буфера, равный 917 килобит.
У DVD видео битпоток может свободно меняться вплоть до 9800 kbps (хотя обычный
поток равен примерно половине этого значения), а размер vbv буфера равен 1835
килобит.
</para>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-vcd-dvd-output">
<title>Опции вывода</title>
<para>
У <application>MEncoder</application> есть опции, управляющие выходным форматом.
Используя их, можно дать указание создать файл корректного типа.
</para>
<para>
Для VCD и SVCD опции называются xvcd и xsvcd, потому что они являются
расширенными форматами. Они не полностью совместимы, в основном, потому что не
содержат смещений развёртки. Если нужно создать образ SVCD, следует передать
выходной файл программе
<ulink url="http://www.gnu.org/software/vcdimager/vcdimager.html">vcdimager</ulink>.
</para>
<para>
VCD:
<screen>-of mpeg -mpegopts format=xvcd</screen>
</para>
<para>
SVCD:
<screen>-of mpeg -mpegopts format=xsvcd</screen>
</para>
<para>
DVD (с временными метками на каждом кадре, если возможно):
<screen>-of mpeg -mpegopts format=dvd:tsaf</screen>
</para>
<para>
DVD с NTSC Pullup:
<screen>-of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001</screen>
Это делает возможным кодирование 24000/1001 fps построчного содержимого с
частотой 30000/1001 fps, с одновременным сохранением совместимости с DVD.
</para>
<sect3 id="menc-feat-vcd-dvd-output-aspect">
<title>Пропорции</title>
<para>
Аргумент aspect в <option>-lavcopts</option> используется для кодирования
коэффициента пропорций файла.
Коэффициент пропорций используется в процессе воспроизведения для восстановления
правильного размера видео.
</para>
<para>
16:9 or "Широкоэкранный"
<screen>-lavcopts aspect=16/9</screen>
</para>
<para>
4:3 or "Полноэкранный"
<screen>-lavcopts aspect=4/3</screen>
</para>
<para>
2.35:1 or "Кинематографический" NTSC
<screen>-vf scale=720:368,expand=720:480 -lavcopts aspect=16/9</screen>
Для вычисления правильного размера масштабирования используйте расширенную
ширину NTSC 854/2.35 = 368
</para>
<para>
2.35:1 or "Кинематографический" PAL
<screen>-vf scale=720:432,expand=720:576 -lavcopts aspect=16/9</screen>
Для вычисления правильного размера масштабирования используйте расширинную
ширину PAL 1024/2.35 = 432
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-a-v-sync">
<title>Сохранение A/V синхронизации</title>
<para>
Для того, чтобы сохранять аудио/видео синхронизацию на протяжении всего
кодирования, <application>MEncoder</application> должен выбрасывать или
дублировать кадры. Это довольно неплохо работает при мультиплексировании в AVI
файл, но с другими мультиплексорами, такими как MPEG, почти гарантировано
приведет к нарушению A/V синхронизации. Для избежания подобных проблем,
необходимо добавить видео фильтр <option>harddup</option> в конец цепочки
фильтров. Дополнительную техническую информацию о <option>harddup</option> можно
найти в разделе
<link linkend="menc-feat-dvd-mpeg4-muxing-filter-issues">Улучшение
мультиплексирования и надежности A/V синхронизации</link> или в man руководстве.
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-output-srate">
<title>Преобразование частоты дискретизации</title>
<para>
Если частота дискретизации в оригинальном файле не совпадает с требуемой в
целевом формате, необходимо преобразование. Его можно осуществить, совместно
используя опцию <option>-srate</option> и аудио фильтр<option>-af lavcresample</option>.
</para>
<para>
DVD:
<screen>-srate 48000 -af lavcresample=48000</screen>
</para>
<para>
VCD и SVCD:
<screen>-srate 44100 -af lavcresample=44100</screen>
</para>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-vcd-dvd-lavc">
<title>Использование libavcodec для VCD/SVCD/DVD кодирования</title>
<sect3 id="menc-feat-vcd-dvd-lavc-intro">
<title>Введение</title>
<para>
Используя соответствующие опции, можно применять
<systemitem class="library">libavcodec</systemitem> для создания VCD/SVCD/DVD
совместимого видео.
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-lavc-options">
<title>lavcopts</title>
<para>
Это список полей в <option>-lavcopts</option>, которые может потребоваться
изменить, чтобы создать совместимый фильм для VCD, SVCD или DVD:
</para>
<itemizedlist>
<listitem><para>
<emphasis role="bold">acodec</emphasis>:
<option>mp2</option> для VCD, SVCD, или PAL DVD;
<option>ac3</option> наиболее часто используется для DVD.
Для DVD также может использоваться PCM, но это, по большей части, бесполезная
трата свободного места. Имейте в виду, что MP3 аудио не совместимо ни с одним
из этих форматов, но, как бы то ни было, часто проигрыватели не испытывают
никаких проблем с его воспроизведением.
</para></listitem>
<listitem><para>
<emphasis role="bold">abitrate</emphasis>:
224 для VCD; вплоть до 384 для SVCD; вплоть до 1536 для DVD, но
распространенным является диапазон значений от 192 кбит/с для стерео до 384
кбит/с для 5.1 звука.
</para></listitem>
<listitem><para>
<emphasis role="bold">vcodec</emphasis>:
<option>mpeg1video</option> для VCD;
<option>mpeg2video</option> для SVCD;
<option>mpeg2video</option> обычно используется для DVD, но Вы также можете
использовать
<option>mpeg1video</option> для CIF разрешений.
</para></listitem>
<listitem><para>
<emphasis role="bold">keyint</emphasis>:
Используется для установки размера GOP.
18 для 30fps материала или 15 для 25/24 fps материала.
Коммерческие изготовители, похоже, предпочитают значение интервала ключевых
кадров, равное 12. Можно значительно увеличить это значение и все еще
сохранять совместимость с большинством проигрывателей.
<option>keyint</option> равное 25 не должно вызывать никаких проблем.
</para></listitem>
<listitem><para>
<emphasis role="bold">vrc_buf_size</emphasis>:
327 для VCD, 917 для SVCD и 1835 ддя DVD.
</para></listitem>
<listitem><para>
<emphasis role="bold">vrc_minrate</emphasis>:
1152 для VCD. Может не указываться для SVCD и DVD.
</para></listitem>
<listitem><para>
<emphasis role="bold">vrc_maxrate</emphasis>:
1152 для VCD; 2500 для SVCD; 9800 для DVD.
Для SVCD и DVD Вы, возможно, пожелаете использовать меньшие значения в
зависимости от Ваших личных требований и предпочтений.
</para></listitem>
<listitem><para>
<emphasis role="bold">vbitrate</emphasis>:
1152 для VCD;
вплоть до 2500 для SVCD;
вплоть до 9800 для DVD.
Для двух последний форматов, vbitrate следует установить на основании личных
предпочтений.
Например, если Вы настаиваете на размещении 20 или около того часов видео на
DVD, можете использовать vbitrate=400.
Качество получившегося видео, возможно, будет довольно плохим.
Если Вы пытаетесь выжать максимально возможное качество на DVD, используйте
vbitrate=9800, но имейте в виду, что это ограничит Вас менее чем одним часом
видео на однослойном DVD.
</para></listitem>
<listitem><para>
<emphasis role="bold">vstrict</emphasis>:
<option>vstrict</option>=0 следует использовать для создания DVD.
Без этой опции <application>MEncoder</application> создает поток, который не
может быть корректно декодирован некоторыми аппаратными DVD проигрывателями.
</para></listitem>
</itemizedlist>
</sect3>
<sect3 id="menc-feat-vcd-dvd-lavc-examples">
<title>Примеры</title>
<para>
Это обычный минимальный набор <option>-lavcopts</option> для кодирования видео:
</para>
<para>
VCD:
<screen>
-lavcopts vcodec=mpeg1video:vrc_buf_size=327:vrc_minrate=1152:\
vrc_maxrate=1152:vbitrate=1152:keyint=15:acodec=mp2
</screen>
</para>
<para>
SVCD:
<screen>
-lavcopts vcodec=mpeg2video:vrc_buf_size=917:vrc_maxrate=2500:vbitrate=1800:\
keyint=15:acodec=mp2
</screen>
</para>
<para>
DVD:
<screen>
-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
keyint=15:vstrict=0:acodec=ac3
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-lavc-advanced">
<title>Расширенные опции</title>
<para>
Для достижения более высокого качества кодирования, Вы также можете
добавить опции lavcopts, улучшающие качество, такие как
<option>trell</option>, <option>mbd=2</option> и другие.
Обратите внимание, что <option>qpel</option> и <option>v4mv</option>,
часто полезные с MPEG-4, не применимы к MPEG-1 или MPEG-2.
Также, если Вы хотите выполнить очень высококачественное кодирование
DVD, может быть полезным добавление <option>dc=10</option> в lavcopts.
Это может помочь подавить появление блоков в однородно окрашенных
областях. Подводя итог, вот пример настроек lavcopts для
высококачественного DVD:
</para>
<para>
<screen>
-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
</screen>
</para>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-vcd-dvd-audio">
<title>Кодирование звука</title>
<para>
VCD и SVCD поддерживают звук MPEG-1 layer II, используя одну из
<systemitem class="library">toolame</systemitem>,
<systemitem class="library">twolame</systemitem>,
или MP2 <systemitem class="library">libavcodec</systemitem> кодировщик.
libavcodec MP2 не так хорош, как остальные две библиотеки, однако, он должен
быть всегда доступен для использования.
VCD поддерживает только звук с постоянным битпотоком (CBR), в то время как SVCD
также поддерживает и переменный (VBR). Будьте осторожны, используя VBR,
поскольку некоторые плохие аппаратные проигрыватели могут не очень хорошо его
поддерживать.
</para>
<para>
Для DVD звука используется AC3 кодек из <systemitem class="library">libavcodec</systemitem>.
</para>
<sect3 id="menc-feat-vcd-dvd-audio-toolame">
<title>toolame</title>
<para>
Для VCD и SVCD:
<screen>-oac toolame -toolameopts br=224</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-audio-twolame">
<title>twolame</title>
<para>
Для VCD и SVCD:
<screen>-oac twolame -twolameopts br=224</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-audio-lavc">
<title>libavcodec</title>
<para>
Для 2 канального DVD звука:
<screen>-oac lavc -lavcopts acodec=ac3:abitrate=192</screen>
</para>
<para>
Для DVD с 5.1 звуком:
<screen>-channels 6 -oac lavc -lavcopts acodec=ac3:abitrate=384</screen>
</para>
<para>
Для VCD и SVCD:
<screen>-oac lavc -lavcopts acodec=mp2:abitrate=224</screen>
</para>
</sect3>
</sect2>
<!-- ********** -->
<sect2 id="menc-feat-vcd-dvd-all">
<title>Собирая все вместе</title>
<para>
Этот раздел демонстрирует некоторые полные команды для создания VCD/SVCD/DVD
совместимого видео.
</para>
<sect3 id="menc-feat-vcd-dvd-all-pal-dvd">
<title>PAL DVD</title>
<para>
<screen>
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 <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-all-ntsc-dvd">
<title>NTSC DVD</title>
<para>
<screen>
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 <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-all-pal-ac3-copy">
<title>PAL AVI, содержащий AC3 звук, в DVD</title>
<para>
Если исходный материал уже содержит AC3 звук, используйте -oac copy вместо
перекодирования.
<screen>
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 <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-all-ntsc-ac3-copy">
<title>NTSC AVI, содержащий AC3 звук, в DVD</title>
<para>
Если исходный материал уже содержит AC3 звук и является NTSC @ 24000/1001 fps:
<screen>
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 <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-all-pal-svcd">
<title>PAL SVCD</title>
<para>
<screen>
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 -ofps 25 \
-o <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-all-ntsc-svcd">
<title>NTSC SVCD</title>
<para>
<screen>
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 -ofps 30000/1001 \
-o <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-all-pal-vcd">
<title>PAL VCD</title>
<para>
<screen>
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 -ofps 25 \
-o <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
<sect3 id="menc-feat-vcd-dvd-all-ntsc-vcd">
<title>NTSC VCD</title>
<para>
<screen>
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 -ofps 30000/1001 \
-o <replaceable>фильм.mpg</replaceable> <replaceable>фильм.avi</replaceable>
</screen>
</para>
</sect3>
</sect2>
</sect1>
</chapter>