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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: