Как стать автором
Обновить

Конвертер аудио / видео файлов FFmpeg

Время на прочтение6 мин
Количество просмотров21K
1 Введение

Каждый пользователь хотя бы раз использовал компьютер для просмотра фильмов или прослушивания музыки. Большинство из Вас знает о существова­нии различных форматов как аудио-, так и видеоинформации. Каждый формат предназначен для своей цели.
Так MP4 удобен для воспроизведения на мобильных устройствах за счет высокой степени сжатия. Файлы формата MKV имеют огромные размеры, но вместе с тем высококачественное видео и звук. Формат AVI даже не самостоя­тельный формат, а оболочка для упаковки медиаданных других форматов. Строго говоря, MKV — это тоже контейнер, основанный на двоичном аналоге языка XML [1]. Это позволяет расширять формат без утери совместимости со старыми программами.
Список можно продолжать долго. Часто возникает необходимость пере­вести, например, фильм из одного формата в другой. Например это может пона­добится для просмотра видео на мобильном телефоне или DVD-плеере, кото­рые не поддерживают воспроизведение исходного формата.
В этом случае Вам пригодится простой, но вместе с тем необычайно мощный инструмент — конвертер FFmpeg.

1.1 Общая характеристика

Описание в данном разделе составлено по материалам Wikipedia [2] и стра­ниц помощи MAN операционной системы Ubuntu 10.04 LTS.
Итак, FFmpeg — это набор библиотек с открытым исходным кодом. Проект создал Фабрис Беллар. Так как исходный код открыт, программа может быть скомпилирована (создана) под любую операционную систему. Утилита FFmpeg — это интерфейс для этих библиотек. Она работает из командной стро­ки. Многим современным пользователям это может показаться не удобным, од­нако командная строка позволяет не отнимать ресурсы системы на отображение графических элементов, чем ускоряет работу программы.
FFmpeg — это целая система. В ее состав входят кодеки, сервер для по­токового вещания, утилита для конвертирования видео файлов и даже простей­ший проигрыватель. Нас сейчас будут интересовать в основном возможности этой системы по преобразованию файлов.
FFmpeg поддерживает большинство распространенных форматов. Так как разработка системы не прекращена до сих пор, сложно будет привести пол­ный их список. Конечно же, FLV, AVI, MP4 входят в их число. За все время мне не удалось обнаружить ни одного формата, который бы не поддерживался в FFmpeg.
Кроме возможностей по конвертации файлов в разные форматы FFmpeg может конвертировать видео формат в аудио дорожку, «захватить» потоковое видео или устроить широковещательную трансляцию. Возможности просто огромны. Кроме того интерфейс командной строки был разработан интуитивно понятным. Так, например, большинство форматов распознается по указанным расширениям входного и выходного файлов.
FFmpeg имеет широкие возможности обработки аудио- и видео дан­ных. Так, например, можно изменить частоту дискретизации для аудио формата, звуковой дорожки фильма, обрезать или масштабировать кадры.
FFmpeg можно использовать для потокового преобразователя видео или аудио. Можно и дальше перечислять достоинства системы, но давайте лучше перейдем к ее изучению и попутно с ними познакомимся.

1.2 Первые шаги

Любая дорога начинается с первого шага. Так давайте же начнем. Сразу оговорюсь: я предполагаю, что утилита FFmpeg уже установлена в Вашей си­стеме. Если это не так, Вам придется позаботиться об этом самостоятельно. Дело в том, что установка для разных операционных систем сильно отличается. Чтобы статья была универсальной и не содержала лишнего объема, здесь содер­жится только описание процесса использования.
Итак, предположим мы имеет видео файл film.mkv. Этот формат обес­печивает очень высокое качество изображения, но требователен к ресурсам си­стемы. Кроме того, мобильные устройства его, чаще всего, не поддерживают. Существует формат MP4. Он очень хорошо «сжимает» видео данные и поддер­живается большинством устройств с низкими системными требованиями. Что­бы перевести наш файл в этот формат нужно перейти в каталог с файлом film.mkv и дать команду:

ffmpeg -i film.mkv film.mp4

В том же каталоге появится файл film.mp4. Просто, правда? Большая часть настроек установлена «по умолчанию». Форматы файлов определены ав­томатически. Но делать так не советую и вот почему: современные видео дан­ные имеют очень хорошее качество. Оно зависит от многих параметров, но, на мой взгляд, определяющими являются три: битрейт, частота кадров и кодек.
Битрейт — это количество информации в битах, которое необходимо обработать в секунду той программе, которая будет показывать Ваш фильм или воспроизводить Ваш звук. По умолчанию битрейт устанавливается равным 200 kb/s. Даже если на звуковую дорожку приходится 64 kb/s, а частота кадров — 15 fps (15 кадров в секунду), значит на один кадр приходится примерно 9 kb или около килобайта. Даже с современными технологиями сжатия видео не о каком качестве не может быть и речи.
От битрейта, как Вы понимаете, напрямую зависит размер конечного файла. В каждом конкретном случае битрейт подбирается индивидуально и об­щих рекомендаций здесь дать нельзя. Чтобы задать максимальный битрейт, ко­манду нужно дополнить следующим образом:

ffmpeg -i film.mkv -b 1200k film.mp4

Теперь максимальный битрейт в 6 раз больше, чем установленный «по умолчанию» и качество изображения очень заметно повысится.
Частота кадров — это количество кадров, которое проходит на экране за секунду. Стандартная телевизионная частота — 24 fps, т. е. за одну секунду воспроизводится 24 кадра. Каждый кадр — это по сути картинка. Стандартная частота для цифрового видео — 15-16 fps. Таким образом, можно увеличить битрейт, но выиграть в размере файла за счет снижения частоты кадров. Для че­ловеческого глаза это будет почти не заметно, а размер видео уменьшится при­мерно в полтора раза.
Чтобы установить частоту кадров, предыдущую команду нужно допол­нить следующим образом:

ffmpeg -i film.mkv -b 1200k -r 16 film.mp4

После выполнения команды в каталоге появится файл film.mp4, мак­симальный битрейт которого равен 1200 kb/s, а частота кадров — 16 fps.
Преоб­разование к меньшей частоте происходит путем изъятия «лишних» кадров. Преобразование к большей частоте, надо полагать — путем дублирования со­седних кадров. Как Вы понимаете, на качество такое преобразование не влияет, а вот на размер — очень даже.
И еще одна базовая операция: изменение размера кадра. Такое изменение возможно путем масштабирования или обрезки каждого кадра. Здесь я рассмот­рю только масштабирование.
Ситуация: наш фильм имеет размер кадра 640 × 480. Ваш мобильный телефон воспроизводит только формат MP4 и имеет размер экрана 320 × 240. Для того, чтобы изменить размер каждого кадра фильма, предыду­щую команду нужно изменить следующим образом:

ffmpeg -i film.mkv -b 1200k -r 16 -s 320x200 film.mp4

В каталоге появится файл film.mp4 с максимальным битрейтом 1200 kb/s, частотой кадров 16 fps и размером кадров 320 × 240 точек. Увеличивать размер кадров не стоит по тем же причинам, что и их частоту.
Таким образом можно установить любой размер кадра, даже не кратный исходному (это приведет к деформации изображения, но возможно). Большинство же фильмов и роликов имею стандартные размеры. Например, 320 × 240, 640 × 480, 1024 × 768, 1600 × 1200 и так далее. Для большинства из них (воз­можно и для всех) существуют буквенные обозначения. Так предыдущая команда может быть записана в виде:

ffmpeg -i film.mkv -b 1200k -r 16 -s qvga film.mp4

Результат совершенно аналогичный. Запомнить форматы (во всяком слу­чае, основные) довольно просто. Например, 640 × 480 — это, как Вам известно, VGA; 320 × 240 — это QVGA (то есть, четверть VGA). Почему четверть? Мыс­ленно проведите на поле VGA две линии, делящие их по вертикали и горизонта­ли пополам. Получится четыре прямоугольника, размерами 320 × 240. Вот поэтому четверть VGA. Буквенные обозначения приведены ниже. Список форматов не полон, но остальные размеры кадра просто сумасшедшие и редко встречаются. Вы можете узнать о них из справочной страницы FFmpeg, хотя вряд ли они Вам когда-нибудь понадобятся.

sqcif - 128 × 96
qqvga - 60 × 120
uxvga - 1600 × 1200
qcif - 176 × 144
qvga - 320 × 240
qxga - 2048 × 1536
cif - 352 × 288
vga - 640 × 480
sxga - 1280 × 1024
4cif - 704 × 576
svga - 800 × 600
qsxga - 2560 × 2048
16cif - 1408 × 1152
xvga - 1024 × 768
hsxga - 5120 × 4096


Как вы думаете, что произойдет, если дать системе команду:

ffmpeg -i film.mkv film.mp3

Совершенно верно: произойдет копирование звуковой дорожки в файл film.mp3. Вот так просто можно отделить видео от звука.
Часто возникает необходимость преобразовать видео файл к формату, пригодному для записи на стандартный носитель (например, диск DVD). Такие носители имеют специальную структуру и некоторые ограничения. Просто за­писать файл на диск не достаточно. Чтобы учесть все это нам пришлось бы со­общать FFmpeg массу параметров, многие из которых ни Вы ни я даже не зна­ем. К счастью авторы программы позаботились об этом. Достаточно указать один параметр, а остальные выставляются автоматически. Так для подготовки к записи файла film.mkv на DVD-диск нужно дать команду:

ffmpeg -i film.mkv -target dvd film.mpg

Как всегда в каталоге появляется конечный файл, готовый для записи на диск. Список распространенных форматов (их имя нужно подставить в команду вместо dvd) можно узнать на справочной странице программы. Наиболее рас­пространенными из них являются vcd, svcd, dvd, dv, dv50, pal- vcd, ntsc-svcd. Эти обозначения можно непосредственно подставлять в поле -target последней команды. Если Ваша операционная система не чувстви­тельна к расширению (у Вас Linux, например), расширение файла не имеет зна­чения.
Можно задать формат выходного файла не зависимо от расширения. Для этого нужно дать команду:

ffmpeg -f mp4 -i film.mkv -b 1200k -r 16 -s qvga film

В каталоге появится файл film без расширения, однако имеющий фор­мат MP4. Названия форматов совпадают с расширениями для файлов этих фор­матов.
В статье упоминались кодеки и форматы файлов. Можно узнать, какие из них доступны именно вам. Для это нужно дать команды:

ffmpeg -codecs
ffmpeg -formats


Первая команда выведет список доступных кодеков, вторая — список до­ступных форматов (включая аудио).
Вот и все. Базовый курс работы с программой FFmpeg Вы успешно про­шли. Теперь Вы сможете выполнить большинство задач по конвертированию файлов и тех, с которыми сталкиваеся среднестатистический пользователь. Если у Вас возникли вопросы, задавайте их по адресу mailto:mna-norn@mail.ru с темой «FFmpeg». Письма с не знакомых адресов без этой темы буду удалять, не читая. На этом статья окончена. Спасибо за внимание.
Теги:
Хабы:
Всего голосов 15: ↑15 и ↓0+15
Комментарии2

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань