Работа с мультимедиа часто требует изменения характеристик медиафайлов, таких как битрейт или разрешение. Поиск простого способа начать работу может быть довольно пугающим. На этой странице вы узнаете об используемых инструментах и о том, как их быстро установить.
Сначала мы опишем базовое использование двух распространенных мультимедийных утилит командной строки: Shaka Packager и FFmpeg , а затем поможем вам быстро установить эти инструменты. Зачем охватывать два приложения? Хотя оба они мощны и полезны сами по себе, ни один из них не дает всего необходимого для подготовки медиа к Интернету. Мы также создали страницы «Преобразование мультимедиа» и «Шифрование мультимедиа» , на которых показано множество более распространенных операций с этими двумя приложениями.
Эти приложения — не единственные варианты, доступные для задач манипулирования файлами, но они являются двумя наиболее распространенными и мощными. Другие варианты включают приложения с графическим интерфейсом Miro , HandBrake и VLC . Существуют также сервисы кодирования/транскодирования, такие как Zencoder , Amazon Elastic Encoder и Google Transcoder API .
Шака Пэкигер
Shaka Packager — это бесплатный SDK для упаковки мультимедиа. Если бы вы использовали на своем сайте медиаплеер, для подготовки файлов вы бы использовали Shaka Packager. Он поддерживает преобразование для двух наиболее распространенных протоколов потокового видео: динамическую адаптивную потоковую передачу через HTTP ( DASH ) или потоковую передачу HTTP Live ( HLS ). Shaka Packager поддерживает ключевые функции безопасности: общее шифрование и управление цифровыми правами Widevine (DRM). Он также может обрабатывать потоковое вещание и видео по запросу.
Несмотря на то, что написано на упаковке, эта утилита предназначена не только для разработчиков C++. Вы можете использовать его как библиотеку для создания мультимедийного программного обеспечения, так и как утилиту командной строки для подготовки мультимедийных файлов для воспроизведения в Интернете. Именно последняя способность нам здесь пригодится. Фактически, для создателей веб-медиа Shaka Packager — единственный способ выполнить некоторые задачи, не тратя деньги на дорогие коммерческие приложения.
Вот базовый шаблон команды Shaka Packager:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
Это не совсем то, что вы получите, если наберете packager -help
. Этот пример легче рассуждать, и он отражает примеры в документации Shaka Packager . Обратите внимание, что в шаблоне имеется несколько stream_descriptor
. Хотя мы этого не показываем, вы можете управлять видео- и аудиопотоками файла отдельно с помощью одной команды.
Сравните этот базовый шаблон с простым использованием, отображающим характеристики файла. В примере мы выстроили эквивалентные части.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
Команда выводит это:
File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
codec_string: avc1.640028
time_scale: 30000
duration: 300300 (10.0 seconds)
is_encrypted: false
codec: H264
width: 1920
height: 1080
pixel_aspect_ratio: 1:1
trick_play_factor: 0
nalu_length_size: 4
Stream [1] type: Audio
codec_string: mp4a.40.2
time_scale: 48000
duration: 481280 (10.0 seconds)
is_encrypted: false
codec: AAC
sample_bits: 16
num_channels: 2
sampling_frequency: 48000
language: eng
seek_preroll_ns: 20833
Найдите характеристики, обсуждаемые в разделе «Основы работы с медиафайлами» , и обратите внимание на несколько вещей. Высота и ширина соответствуют формату Full HD, а аудио- и видеокодеки являются одними из предпочтительных кодеков для своих типов контейнеров: AAC для аудио и H264 для видео. Обратите также внимание, что потоки обозначаются числами. Они полезны для операций, которые управляют аудио и видео отдельно.
Обратите внимание, что приведенный выше вывод не показывает битрейт. Несмотря на то, чего не хватает, этот вывод легче читать, поэтому мы используем его всякий раз, когда можем. Когда нам нужна информация, которую Shaka Packager не может получить, например, битрейт, мы используем FFmpeg.
FFmpeg
FFmpeg также является бесплатным приложением для записи, преобразования и потоковой передачи мультимедийных файлов. Его возможности не лучше и не хуже, чем у Shaka Packager. Они просто другие.
Базовый шаблон команды FFmpeg выглядит следующим образом:
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
Как и Shaka Packager, это приложение может обрабатывать несколько потоков. Некоторые из его параметров используются в нескольких местах и по-разному управляют выводом файла в зависимости от того, где они находятся в команде. Помните об этом, просматривая вопросы FFmpeg на Stack Overflow и подобных сайтах.
Мы еще раз сравним базовый шаблон с примером отображения характеристик файла.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
В дополнение к запрошенной нами информации также выводится сообщение об ошибке, как показано в примере ниже. Это потому, что технически это неправильное использование FFmpeg. Мы используем его, потому что он отображает важную для нас информацию.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.100
Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Установка приложений с помощью Docker
Если вы планируете следовать нашим инструкциям и попробовать наши команды, вы можете либо установить необходимые инструменты вручную, либо пойти по простому пути и использовать Docker . Мы предлагаем использовать Docker, потому что это сэкономит вам много времени. Кроме того, мы предоставили инструкции, которые помогут вам быстро настроить.
Начните с создания где-нибудь на вашем компьютере нового каталога с именем
media-tools
; вы можете использовать любое имя, которое вам нравится, просто учтите, что следующие инструкции предполагают, что вы используетеmedia-tools
в качестве имени каталога.Создайте
docker
иmedia
каталог внутриmedia-tools
. Это позволит сохранить вашmedia
-каталог вне контекста сборки. Это важно, поскольку наmedia
хранятся файлы, над которыми мы планируем выполнять операции, и некоторые из них могут быть довольно большими. РазмещениеDockerfile
непосредственно вmedia-tools
замедлит создание образа, если вы когда-нибудь пересоберете его в будущем — возможно, для изменения установленных версий.Создайте
/media-tools/docker/Dockerfile
и добавьте следующие инструкции по сборке:FROM google/shaka-packager:release-v2.4.3 as packager FROM jrottenberg/ffmpeg:4.3.2-alpine38 COPY --from=packager /usr/bin /usr/bin ENTRYPOINT ["sh"]
Создайте изображение:
docker build -t media-tools ./docker
Запустите изображение как интерактивную оболочку. В Linux:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
В Windows:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
Во время запуска образа вы можете проверить версии как для FFmpeg, так и для Shaka Packager, чтобы убедиться, что все прошло успешно, запустив ffmpeg -version
и packager --version
. Вывод должен выглядеть так:
/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release
Теперь, когда вы попробовали свои силы в использовании Shaka Packager и FFmpeg, вы можете продолжить изучение основных понятий, а затем — основы потоковой передачи мультимедиа .