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

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

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

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

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

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

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

7.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. Прочтите раздел о масштабировании для обхода проблемы.

7.7.3. Обрезание

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

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

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

7.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

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

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

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

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

7.7.6. Битпоток

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

7.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.

7.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

7.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 создаст новый файл с автоматическим именем в том же каталоге и оставит исходный файл нетронутым.