Подготовка видео для звукового дизайна. Какой кодек выбрать

в 12:24, , рубрики: ffmpeg, game development, MJPEG, звуковой дизайн, Работа с видео, Работа со звуком, сжатие видео, метки: , , , ,

Материал статьи отражает личный опыт автора и не претендует на научную точность. Буду рад любым исправлениям и дополнениям. Для тех, кто не хочет читать дальше, правильный ответ на главный вопрос: MJPEG.

Вступление

Клиенты часто предпочитают архаичные способы передачи проектных материалов и случаи, когда 5-минутный фильм присылают вложением по почте, сжатым до 20 МБ, не являются редкостью. Материал для ознакомления становится материалом для работы, что влечёт за собой ряд неочевидных проблем, основные из которых — низкая детализация картинки (вызванная чрезмерным сжатием) и использование видео кодеков, которые не предназначены для аудиомонтажа.

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

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

Общая информация

Но для начала немного информации о том, что вообще из себя представляет видео файл. Если коротко, то это контейнер — метафайл, который содержит в себе несколько потоков данных (streams). К потокам относятся аудио, видео, изображения, субтитры, меню, информация о главах, метаданные, теги и т.п. Внутри контейнера могут находится сразу несколько потоков одного типа (например, 2 видео дорожки, 3 аудио дорожки, субтитры на нескольких языках), при этом каждый из них может быть сжат разными кодеками. Здесь стоит напомнить термины:

  • mux — упаковка нескольких потоков в один контейнер
  • demux — извлечение потоков из контейнера в отдельные файлы
  • remux — замена одного или нескольких потоков в контейнере

Все эти операции — без потери качества, т.е. они никак не влияют на содержимое потоков.

AVI, FLV, MOV, MP4, MKV, OGG, TS, WebM — это не видео кодеки, а контейнеры — расширение видео файла практически никак не отражает характер содержимого. Видео кодеки — это DivX, XVid, H.264, MPEG, MJPEG, Theora, VP9 и они бывают трёх типов: lossy, lossless и intra-only. Именно кодеки определяют качество изображения и пригодность для аудиомонтажа. Про intra-only будет сказано чуть ниже, а принципы работы первых двух типов хорошо описаны в этой статье. Если коротко, то кодек делит видео поток на группы кадров (Group Of Pictures) и для уменьшения размера файла, в каждом GOP полностью сохраняется только первый кадр (i-frame), а остальные (b- и p-frames) содержат только информацию об изменениях в картинке. В итоге, структура каждого GOP выглядит примерно так: ibbpbbpbbp. Чем сильнее сжато видео, тем выше порог прохождения изменений в b- и p-фреймы. Чем больше длина GOP, тем больше проблем будет с перемоткой (залипающие кадры и т.п.). Отсюда следует вывод: для аудиомонтажа lossy и lossless кодеки условно годятся, только если видео конвертировалось с небольшим значением GOP.

Синхронизация

Синхронизация потоков осуществляется посредством временны́х меток (timestamps), которые генерируются кодеком при (де)кодировании. Если в этот момент возникает ошибка, то кодек пропускает такие кадры и назначает временну́ю метку проблемного пакета следующему непроблемному. В результате этого возникает рассинхронизация «битого» потока с остальными. При повторной конвертации такого файла в lossy/lossless формат эффект может усиливаться.

Intra-frame

Отличительная особенность intra-frame кодеков в том, что каждый кадр потока является ключевым (i-frame). Неполноценные промежуточные кадры отсутствуют. Один из популярных кодеков этого типа — MJPEG (Motion JPEG). Он преобразует видео в последовательность сжатых независимо друг от друга JPEG изображений.

Плюсы MJPEG:

  • быстрая скорость конвертации
  • плавная перемотка
  • подходит для аудиомонтажа

Минусы:

  • размер файла может получиться довольно большим

Преобразовать любой видео файл в MJPEG можно с помощью утилиты ffmpeg. Команда будет примерно такой:

ffmpeg -i input.avi -c:v mjpeg -q:v 1 -c:a copy output.mov

Чтобы не выполнять эту операцию каждый раз из командной строки, создайте вот такой скрипт (для Windows) и просто перетаскивайте на него видео файлы (можно сразу несколько):

for %%A in (%*) do ffmpeg -i %%A -c:v mjpeg -q:v 1 -c:a copy "%%~nA"_mjpeg.mov

Для удобства, ярлык на этот скрипт можно кинуть в папку SendTo (в свойствах ярлыка нужно будет очистить поле «Start in»).

В заключение

Заранее просите клиента присылать видео в хорошем качестве (не сильно сжатый lossy или lossless), после чего конвертируйте любое присланное видео в MJPEG и озвучку делайте под этот формат. Когда звук готов, делайте remux клиентского видео, добавляя в контейнер вашу аудио дорожку. У некоторых контейнеров есть ограничения, например, MP4 не поддерживает аудио потоки в PCM (WAV/AIFF), звук в этом случае придётся переводить в MP3 или ALAC. Подробная таблица совместимости есть на Википедии.

Автор: versia

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js