Конвертер аудио / видео файлов FFmpeg
2окт
2011
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 и дать команду:
1 |
ffmpeg -i film.mkv film.mp4 |
В том же каталоге появится файл film.mp4. Просто, правда? Большая часть настроек установлена «по умолчанию». Форматы файлов определены автоматически. Но делать так не советую и вот почему: современные видео данные имеют очень хорошее качество. Оно зависит от многих параметров, но, на мой взгляд, определяющими являются три: битрейт, частота кадров и кодек.
Битрейт — это количество информации в битах, которое необходимо обработать в секунду той программе, которая будет показывать Ваш фильм или воспроизводить Ваш звук. По умолчанию битрейт устанавливается равным 200 kb/s. Даже если на звуковую дорожку приходится 64 kb/s, а частота кадров — 15 fps (15 кадров в секунду), значит на один кадр приходится примерно 9 kb или около килобайта. Даже с современными технологиями сжатия видео не о каком качестве не может быть и речи.
От битрейта, как Вы понимаете, напрямую зависит размер конечного файла. В каждом конкретном случае битрейт подбирается индивидуально и общих рекомендаций здесь дать нельзя. Чтобы задать максимальный битрейт, команду нужно дополнить следующим образом:
1 |
ffmpeg -i film.mkv -b 1200k film.mp4 |
Теперь максимальный битрейт в 6 раз больше, чем установленный «по умолчанию» и качество изображения очень заметно повысится.
Частота кадров — это количество кадров, которое проходит на экране за секунду. Стандартная телевизионная частота — 24 fps, т. е. за одну секунду воспроизводится 24 кадра. Каждый кадр — это по сути картинка. Стандартная частота для цифрового видео — 15-16 fps. Таким образом, можно увеличить битрейт, но выиграть в размере файла за счет снижения частоты кадров. Для человеческого глаза это будет почти не заметно, а размер видео уменьшится примерно в полтора раза.
Чтобы установить частоту кадров, предыдущую команду нужно дополнить следующим образом:
1 |
ffmpeg -i film.mkv -b 1200k -r 16 film.mp4 |
После выполнения команды в каталоге появится файл film.mp4, максимальный битрейт которого равен 1200 kb/s, а частота кадров — 16 fps.
Преобразование к меньшей частоте происходит путем изъятия «лишних» кадров. Преобразование к большей частоте, надо полагать — путем дублирования соседних кадров. Как Вы понимаете, на качество такое преобразование не влияет, а вот на размер — очень даже.
И еще одна базовая операция: изменение размера кадра. Такое изменение возможно путем масштабирования или обрезки каждого кадра. Здесь я рассмотрю только масштабирование.
Ситуация: наш фильм имеет размер кадра 640 × 480. Ваш мобильный телефон воспроизводит только формат MP4 и имеет размер экрана 320 × 240. Для того, чтобы изменить размер каждого кадра фильма, предыдущую команду нужно изменить следующим образом:
1 |
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 и так далее. Для большинства из них (возможно и для всех) существуют буквенные обозначения. Так предыдущая команда может быть записана в виде:
1 |
ffmpeg -i film.mkv -b 1200k -r 16 -s qvga film.mp4 |
Результат совершенно аналогичный. Запомнить форматы (во всяком случае, основные) довольно просто. Например, 640 × 480 — это, как Вам известно, VGA; 320 × 240 — это QVGA (то есть, четверть VGA). Почему четверть? Мысленно проведите на поле VGA две линии, делящие их по вертикали и горизонтали пополам. Получится четыре прямоугольника, размерами 320 × 240. Вот поэтому четверть VGA. Буквенные обозначения приведены ниже. Список форматов не полон, но остальные размеры кадра просто сумасшедшие и редко встречаются. Вы можете узнать о них из справочной страницы FFmpeg, хотя вряд ли они Вам когда-нибудь понадобятся.
03 |
uxvga - 1600 × 1200<br> |
06 |
qxga - 2048 × 1536<br> |
09 |
sxga - 1280 × 1024<br> |
12 |
qsxga - 2560 × 2048<br> |
13 |
16cif - 1408 × 1152<br> |
Как вы думаете, что произойдет, если дать системе команду:
1 |
ffmpeg -i film.mkv film.mp3 |
Совершенно верно: произойдет копирование звуковой дорожки в файл film.mp3. Вот так просто можно отделить видео от звука.
Часто возникает необходимость преобразовать видео файл к формату, пригодному для записи на стандартный носитель (например, диск DVD). Такие носители имеют специальную структуру и некоторые ограничения. Просто записать файл на диск не достаточно. Чтобы учесть все это нам пришлось бы сообщать FFmpeg массу параметров, многие из которых ни Вы ни я даже не знаем. К счастью авторы программы позаботились об этом. Достаточно указать один параметр, а остальные выставляются автоматически. Так для подготовки к записи файла film.mkv на DVD-диск нужно дать команду:
1 |
ffmpeg -i film.mkv -target dvd film.mpg |
Как всегда в каталоге появляется конечный файл, готовый для записи на диск. Список распространенных форматов (их имя нужно подставить в команду вместо dvd) можно узнать на справочной странице программы. Наиболее распространенными из них являются
1 |
vcd, svcd, dvd, dv, dv50, pal- vcd, ntsc-svcd |
. Эти обозначения можно непосредственно подставлять в поле
последней команды. Если Ваша операционная система не чувствительна к расширению (у Вас Linux, например), расширение файла не имеет значения.
Можно задать формат выходного файла не зависимо от расширения. Для этого нужно дать команду:
1 |
ffmpeg -f mp4 -i film.mkv -b 1200k -r 16 -s qvga film |
В каталоге появится файл film без расширения, однако имеющий формат MP4. Названия форматов совпадают с расширениями для файлов этих форматов.
В статье упоминались кодеки и форматы файлов. Можно узнать, какие из них доступны именно вам. Для это нужно дать команды:
Первая команда выведет список доступных кодеков, вторая — список доступных форматов (включая аудио).
Вот и все. Базовый курс работы с программой FFmpeg Вы успешно прошли. Теперь Вы сможете выполнить большинство задач по конвертированию файлов и тех, с которыми сталкиваеся среднестатистический пользователь. Если у Вас возникли вопросы, задавайте их по адресу mailto:mna-norn@mail.ru с темой «FFmpeg». Письма с не знакомых адресов без этой темы буду удалять, не читая. На этом статья окончена. Спасибо за внимание.