Контейнеры и кодеки

Дерек Херман
Derek Herman
Джо Медли
Joe Medley

Для поддержки нескольких браузеров вам потребуется использовать FFmpeg для преобразования файла .mov в два разных контейнера: контейнер MP4 и контейнер WebM. На практике вы, скорее всего, одновременно укажете кодек. На данный момент мы позволяем FFmpeg использовать настройки по умолчанию.

Если эти понятия для вас новы, вам следует прочитать основы работы с медиафайлами, прежде чем идти дальше. Кроме того, если у вас не установлен FFmpeg, прочтите «Основы работы с мультимедийным приложением», чтобы настроить его с помощью Docker.

Мы используем предложенную установку Docker и файл glocken.mov из раздела «Подготовка медиафайлов для Интернета», добавленный в каталог media . Мы использовали FFmpeg версии 4.3.2 для всех команд в этом разделе.

Контейнеры

Во-первых, нам нужно создать два контейнера из файла .mov с расширениями .mp4 и .webm с аудио- и видеопотоком внутри файла. Ознакомьтесь с основами работы с медиафайлами, чтобы узнать больше о контейнерах и потоках, если вы не знаете различий между ними.

  1. МП4

    /media # ffmpeg -i glocken.mov glocken.mp4
  2. ВебМ

    /media # ffmpeg -i glocken.mov glocken.webm

Создание WebM занимает больше времени, чем MP4. Это неудивительно, если посмотреть на результаты. В то время как MP4 сжимается примерно до 83% от размера исходного файла, WebM сжимается до 78% от размера оригинала, но может быть намного меньше. Ваши результаты будут разными. Важно отметить, что в FFmpeg 4.2.2 битрейт видео по умолчанию установлен на 200k , а в 4.3.2 он не устанавливает битрейт по умолчанию. Таким образом, видео уже не составляет всего лишь 4% от оригинала . Вы можете убедиться в этом сами, используя команду ls -a bash в папке, где находятся ваши медиафайлы.

Например:

/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root   9503301 Mar 7 18:30 glocken.webm

Чтобы получить крошечный файл, вы должны сделать это:

/media # ffmpeg -i glocken.mov -b:v 200k glocken.webm
...
frame=  300 fps=3.6 q=0.0 Lsize=     483kB time=00:00:10.01 bitrate= 395.0kbits/
s speed=0.121x
video
:359kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.356068%
/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root    494497 Mar 7 18:45 glocken.webm

Проверьте свою работу

Чтобы проверить результаты, используйте FFmpeg и Shaka Packager, как уже показано в разделе «Основы медиаприложений» :

/media # packager input=glocken.mp4 --dump_stream_info
/media # ffmpeg -i glocken.mp4

Кодеки

Далее кодек. Как указано в разделе «Основы работы с медиафайлами» , кодек — это не то же самое, что контейнер (тип файла). Два файла одного и того же типа контейнера могут хранить данные, сжатые с использованием разных кодеков. Например, формат WebM позволяет кодировать аудио с помощью Vorbis или Opus . Для смены кодека мы используем FFmpeg. Например, эта команда выводит файл .mkv с аудиокодеком vorbis и видеокодеком av1 .

/media # ffmpeg -i glocken.mov -c:a vorbis -c:v av1 glocken.mkv

В этом примере флаги -c:a и -c:v предназначены для указания аудио- и видеокодеков соответственно.

На странице преобразования мультимедиа перечислены команды, необходимые для преобразования кодеков. В таблицах ниже приведены библиотеки, используемые в FFmpeg для преобразования кодеков для файлов WebM и MP4. Это форматы, рекомендуемые для DASH и HLS соответственно.

Видео

Кодек Расширение Библиотека
av1 ВебМ, MKV libaom-av1
h264 МП4 libx264
вп9 ВебМ libvpx-vp9

Аудио

Кодек Расширение Библиотека
аак МП4 аак
опус ВебМ либопус
ворбис ВебМ либворбис

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