Краткое руководство по использованию FFmpeg для конвертации медиафайлов



Предыдущая |

FFmpeg - это отличный инструмент для быстрого изменения формата или качества AV-файла, извлечения звука, создания GIF-файлов и многого другого.

Существует множество инструментов с открытым исходным кодом для редактирования, настройки и преобразования мультимедиа именно в то, что вам нужно. Такие инструменты, как Audacity или Handbrake, являются фантастическими, но иногда вы просто хотите быстро изменить файл из одного формата в другой. Введите FFmpeg.

FFmpeg - это коллекция различных проектов для обработки мультимедийных файлов. Он часто используется за кулисами во многих других проектах, связанных со СМИ. Несмотря на название, оно не имеет ничего общего с Группой экспертов по движущимся изображениям или созданными ею бесчисленными мультимедийными форматами.

В этой статье я буду использовать FFmpeg через инструмент командной строки ffmpeg, который является всего лишь небольшим фрагментом проекта FFmpeg. Он доступен во многих операционных системах и по умолчанию включен в некоторые операционные системы. Его можно загрузить с веб-сайта FFmpeg или через большинство менеджеров пакетов.

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

Медиа файлы
На очень высоком уровне медиа-файл разбивается на контейнер и его потоки. Потоки включают в себя фактические AV-компоненты, такие как аудио или видео фильма, и кодируются с использованием определенного медиакодирования или кодека. Каждый кодек имеет свои свойства, сильные и слабые стороны. Например, кодек FLAC хорош для высококачественного звука без потерь, тогда как Vorbis разработан, чтобы конкурировать с MP3 по размеру файла, предлагая лучшее качество звука. Это означает, что файл в формате FLAC будет намного больше, чем аудиопоток Vorbis, но должен звучать лучше. Ни один из них по своей сути не лучше другого, поскольку каждый пытается делать разные вещи.

Контейнер является оберткой для потоков. Он представляет собой единый интерфейс, с которым могут взаимодействовать медиаплееры и инструменты. Некоторые контейнеры очень продвинуты и допускают любой вид потока, включая несколько потоков видео и аудио внутри одного контейнера. Хотя потоки в контейнере не должны быть просто аудио или видео. Различные контейнеры позволяют использовать разные потоки, например субтитры, информацию о главе или другие метаданные. Все зависит от того, что контейнер разрешен.

Это абстрактное представление медиа-файлов, пропускающее множество различий между контейнерами. Многие требуют определенных потоков и метаданных или накладывают ограничения на допустимые кодеки или содержимое. Этого объяснения достаточно, чтобы провести вас через эту статью. Чтобы узнать больше, нажмите на ссылки выше.

Помните, что кодирование видео и аудио может занять очень много времени. При использовании FFmpeg вы должны быть готовы поселиться на некоторое время.

Основное преобразование
При конвертации аудио и видео большинство людей сбивает с толку выбор правильных форматов и контейнеров. К счастью, FFmpeg довольно умный с настройками по умолчанию. Обычно он автоматически выбирает правильные кодеки и контейнер без какой-либо сложной конфигурации.

Например, скажем, у вас есть файл MP3 и вы хотите, чтобы он был преобразован в файл OGG:

 

ffmpeg -i input.mp3 output.ogg

 

Эта команда берет файл MP3 с именем input.mp3 и преобразует его в файл OGG с именем output.ogg. С точки зрения FFmpeg это означает преобразование аудиопотока MP3 в аудиопоток Vorbis и упаковку этого потока в контейнер OGG. Вам не нужно было указывать типы потоков или контейнеров, потому что FFmpeg понял это за вас.

Это также работает с видео:

 

ffmpeg -i input.mp4 output.webm

 

Поскольку WebM является четко определенным форматом, FFmpeg автоматически знает, какие видео и аудио он может поддерживать, и преобразует потоки в действительный файл WebM.

В зависимости от выбранного вами контейнера, это не всегда будет работать. Например, контейнеры, такие как Matroska, предназначены для обработки практически любого потока, который вы хотите добавить в них, независимо от того, действительны они или нет. Это означает команду:

 

ffmpeg -i input.mp4 output.mkv

 

может привести к файлу с теми же кодеками, что и для input.mp4, что может быть, а может и не быть тем, что вы хотите.

Выбор ваших кодеков
Итак, что вы делаете, когда вы хотите использовать контейнер, такой как Matroska (который может обрабатывать практически любой поток), но все же влиять на то, какие кодеки находятся в выводе? FFmpeg на помощь! Вы можете выбрать нужные кодеки, используя флаг -c.

Этот флаг позволяет вам установить разные кодеки для каждого потока. Например, чтобы установить аудиопоток на Vorbis, вы должны использовать следующую команду:

 

ffmpeg -i input.mp3 -c:a libvorbis output.ogg

 

То же самое можно сделать, чтобы изменить видео и аудио поток:

 

ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv

 

Это создаст контейнер Matroska с видеопотоком VP9 и аудиопотоком Vorbis, по сути, такой же, как WebM, который мы сделали ранее.

Команда ffmpeg -codecs напечатает каждый кодек, о котором знает FFmpeg. Вывод этой команды будет меняться в зависимости от установленной версии FFmpeg.

Изменение одного потока
Чаще, чем вам хотелось бы, файл, который вы имеете, является частично правильным, только с одним потоком в неправильном формате. Перекодирование правильного потока может занять очень много времени. FFmpeg может помочь в этой ситуации:

 

ffmpeg -i input.webm -c:v copy -c:a flac output.mkv

 

Эта команда копирует видеопоток из input.webm в output.mkv и кодирует аудиопоток Vorbis в FLAC. Флаг -c действительно мощный.

Смена контейнера
Предыдущий пример может быть применен как к аудио-, так и к видеопотокам, что позволяет вам конвертировать из одного формата контейнера в другой без необходимости какого-либо дополнительного кодирования потока:

 

ffmpeg -i input.webm -c:av copy output.mkv

 

Влияние на качество
Теперь, когда у нас есть дескриптор кодеков, следующий вопрос: как мы устанавливаем качество каждого потока?

Самый простой способ - это изменить битрейт, что может привести или не привести к другому качеству. Способность людей видеть и слышать не так чиста и ясна, как хотелось бы думать. Иногда изменение битрейта имеет огромное значение для субъективного качества. В других случаях это может ничего не делать, кроме как изменить размер файла. Иногда очень сложно сказать, что произойдет, не испытав этого.

Чтобы установить битрейт каждого потока, вы используете флаг -b, который работает аналогично флагу -c, за исключением того, что вместо параметров кодека вы устанавливаете битрейт.

Например, чтобы изменить битрейт видео, вы должны использовать его так:

 

ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv

 

Это скопирует аудио (-c: копию) из input.webm и преобразует видео в кодек VP9 (-c: v vp9) с битрейтом 1M / s (-b: v), все в комплекте Контейнер Matroska (output.mkv).

Еще один способ повлиять на качество - настроить частоту кадров видео с помощью параметра -r:

 

ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv

 

Это создает новую Matroska с скопированным аудиопотоком и частотой кадров видеопотока, установленной на 30 кадров в секунду, вместо использования частоты кадров на входе (-r 30).

Вы также можете настроить размеры вашего видео с помощью FFmpeg. Самый простой способ - использовать заранее определенный размер видео:

 

ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv

 

Это изменяет видео до 1280x720 в выводе, но вы можете установить ширину и высоту вручную, если хотите:

 

ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv

 

Это производит тот же вывод, что и предыдущая команда. Если вы хотите установить нестандартные размеры в FFmpeg, помните, что параметр ширины (1280) стоит перед высотой (720).

Регулировка частоты кадров и битрейта - это два грубых, но эффективных метода воздействия на качество мультимедиа. Установка очень высоких значений не может улучшить качество существующего источника, если его качество уже низкое.

Изменение этих настроек наиболее эффективно для быстрого сокращения потока высокого качества для уменьшения размера файла. Регулировка размера вашего видео не может улучшить качество, но может сделать его более подходящим для планшета, а не для вашего телевизора. Изменение размера видео 640x480 на 4K не улучшит его.

Изменение качества ваших файлов - это очень субъективный вопрос, а это значит, что нет единого способа, который будет работать каждый раз. Лучший способ - внести некоторые изменения и проверить, выглядит ли он лучше или звучит для вас лучше.

Модификация потоков
Часто у вас есть файл, который почти идеален, и вам просто нужно обрезать несколько частей. Это можно сделать проще с помощью инструмента, который показывает вам, что вы меняете, но если вы точно знаете, где вы хотите его обрезать, это очень легко сделать в FFmpeg:

 

ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv

 

Это скопирует видео и аудио потоки (-c: av copy), но обрежет видео. Параметр -t устанавливает продолжительность обрезки равной 10 секундам, а параметр -ss устанавливает начальную точку видео для обрезки, в данном случае одну минуту (00:01:00). Вы можете быть более точным, чем просто часы, минуты и секунды, уменьшая до миллисекунд при необходимости.

Извлечение аудио
Иногда вы не заботитесь о видео, вы просто хотите аудио. К счастью, это очень просто в FFmpeg с флагом -vn:

 

ffmpeg -i input.mkv -vn audio_only.ogg

 

Эта команда извлекает только аудио из входа, кодирует его как Vorbis и сохраняет его в audio_only.ogg. Теперь у вас есть изолированный аудиопоток. Вы также можете использовать флаги -an и -sn таким же образом, чтобы вырезать потоки аудио и субтитров.

Делая из этого GIF
Недавно анимированные GIF-файлы (с жестким g, потому что я не монстр) вернулись. Лично я думаю, что GIF - худший формат, который вы можете выбрать для видео. У него ужасное качество и размер сжатия; имеет очень жесткие ограничения по цветам, частоте кадров и метаданным контейнера; и не может поддерживать аудио. Тем не менее, это довольно популярно. Итак, как вы можете превратить видеоклип в анимированный GIF?

Использование флага -an, аналогично тому, что мы делали выше, лучше, чем создание анимированного GIF, если вы хотите сделать видео без звука, но есть много мест, которые поддерживают GIF, которые не поддерживают другой формат видео , Для всех тех:

 

ffmpeg -i input.mkv output.gif

 

Эта команда создает GIF с теми же размерами, что и входной файл. Это часто плохая идея, поскольку GIF-файлы плохо сжимаются по сравнению с другими видеоформатами (по моему опыту, GIF будет примерно в восемь раз больше исходного видео). Может быть полезно использовать опцию -s, чтобы изменить размер GIF-файла, чтобы он был немного меньше, особенно если источник входного сигнала довольно большой, например, HD-видео.

Другие инструменты
Хотя FFmpeg - инструмент для большинства задач AV, он не идеален для всего. Есть некоторые инструменты, которые, используемые в сочетании с FFmpeg, могут сделать все немного проще.

Захват видео с YouTube
Можно очень легко загрузить что-то на YouTube, потерять исходное видео и оставить только версию YouTube. Какой самый простой способ получить копию ваших видео на YouTube?

Youtube-dl - это отличный маленький инструмент, который вы можете использовать для получения видео с YouTube и нескольких других сервисов потокового видео. Это супер просто использовать:

 

youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0

 

Эта команда загружает видео по указанному URL-адресу и сохраняет его локально.

Youtube-dl имеет несколько опций для контроля качества и формата загружаемого видео, но мне проще использовать приведенную выше команду. Он загружает аудио и видео высочайшего качества в один файл, затем я использую FFmpeg, чтобы конвертировать их в нужный мне формат.

Получение информации о СМИ
Иногда все, что вам нужно знать, это что находится внутри медиа контейнера. Хотя есть несколько инструментов, которые могут это сделать, я предпочитаю MediaInfo. MediaInfo показывает всю информацию внутри медиа-контейнера для каждого из различных потоков, а также метаданные для входного файла. Это дает вам все, что вы хотели бы знать - и, вероятно, кучу вещей, которых вы не знали.

При запуске команды mediainfo inputFile.mkv выдает список информации о входном файле в удобочитаемой форме.

И больше...
Это просто царапает поверхность того, что может сделать FFmpeg. К счастью, документация для FFmpeg и других инструментов проекта очень хороша, и ее стоит проверить. Он научит вас многим различным трюкам, которые может сделать эта собака.

Если вам нужен инструмент с графическим интерфейсом для конвертации мультимедиа, Handbrake - исключительно хороший инструмент, доступный в Linux, Mac OS X и Windows. Ручной тормоз использует FFmpeg (среди других инструментов) под капотом.