10.7. Использование MEncoder для создания совместимых с QuickTime файлов
Пред. | Глава 10. Кодирование с MEncoder | След.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

### 10.7.6. Битпоток

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    mp4creator -list нарния.mp4

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

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

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

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

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

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

Пред. | Уровень выше | След.
10.6. Кодирование семейством кодеков `Video For Windows` | Начало | 10.8. Использование MEncoder для создания VCD/SVCD/DVD-совместимых файлов.