Ffmpeg для чего нужен
Укрощаем мультимедиа с помощью ffmpeg
Внезапно ваш диск под завязку забит фотографиями и видео, а впереди новые поездки. Что делать, покупать новый, арендовать дисковое пространство на облаке, или может лучше сжать видео файлы через ffmpeg?
Впрочем зачем себя ограничивать экономией дискового пространства? Предлагаю узнать удивительные возможности обработки фотографий, аудио и видео данных, утилитами командной строки.
Библиотека ffmpeg и обработка видео
Библиотека с открытым исходным кодом ffmpeg скорее всего уже установлена на вашей операционной системе. Если же нет, установите его штатной программой управления пакетами, это не займет много времени.
Конвертировать один формат аудио и видео файлов в другой
Уменьшаем видео, записанное на фотоаппарате:
То же самое, но с контролем качества.
Указать кодек
Поменять контейнер файла
Возьмем теперь такой юзкейс случай. Встроенный плеер вашего телевизора поддерживает формат mkv, но не поддерживает m4v. Для того, чтобы поменять контейнер воспользуемся следующей командой.
Если же нужно поменять только звук, а видео оставить как есть, запускаем эту команду. Почему-то телевизоры Филипс понимают только форматы звука AAC/AC3.
Добавить звуковую дорожку
Просто перечисляем файлы ввода и задаем вывод.
Извлечь звуковую дорожку
Если нужно просто извлечь звук, то можно так.
Задаем формат извлекаемой звуковой дорожки.
Указывает приемлемый битрейт, по умолчанию будет записано 128k.
Делаем слайд-шоу из картинок
Тот самый случай, когда гладко было на бумаге. На практике приходится ходить по граблям, продираясь через разнобой форматов, кодеков, размеров и ориентации фотографий.
Требуются некоторые пояснения.
Изменить видеопоток
Допустим, вам нужен не весь видео файл, а лишь часть его. Данная команда вырежет 10 секунд видео, начиная с первой минуты.
Захват экрана
Бонусная дорожка
Для автоматической обработки фотографий удобно работать с программой ImageMagick. Поменять размер всех фотографий в папке.
Аккуратное повышение резкости изображения, наподобие Smart Sharpen с помощью Perl скрипта, использующего convert и composite из набора утилит ImageMagick.
Своя видео-платформа — ffmpeg и качество кодирования видео. Part 2
Lenna любит хорошо выглядеть — фотомодель в конце концов. Ходят легенды, что добавление её в заголовок статьи, связанной с обработкой визуальных данных даёт +5 к шансу на плюсы.
Продолжаю раскрывать особенности работы видео сервисов. Сегодня заметки про параметры кодирования и их выбор.
Большинство кодеков предлагают достаточно сбалансированные значения по умолчанию, позволяя получить нормальный результат без долгого подбора параметров. Однако, когда речь идёт о большом архиве видеоматериала, об ограничениях на битрейт, соображениях совместимости с оборудованием клиента и разумном желании сохранить качество оригинала, всё становится интереснее.
К сожалению, волшебной кнопки «скодировать совсем хорошо» не предусмотрено. Как и аналога caniuse для параметров кодирования. Придётся разбираться в особенностях работы кодеков.
Вводная часть: профили
Настроек и параметров у H264 такое количество, что сами разработчики для того, чтобы в них не запутаться, решили сделать список профилей — «хороших» конфигураций для разных целей. Стандартных профилей определили много; дополнительно, устанавливая собственные параметры кодирования, вы, фактически, создаёте собственный профиль, запутывая всех окончательно. Так что, к сожалению, получилось как всегда.
Изначально профили создавались для определения, будет ли проигрываться итоговое видео на нужном типе устройств, однако сейчас какого-то однозначного разделения проигрывателей по типам устройств и профилям нет.
На практике я бы выделил, по уровню ресурсоёмкости декодирования, три группы параметров:
Теперь к отдельным параметрам.
Цветовое пространство
Выбор цветового пространства практически не влияет на эффективность кодирования; этот параметр можно было бы оставить на выбор кодека (он важен при обработке сырых, некодированных данных), если бы не одна особенность: многие плееры весьма специфически обрабатывают информацию о цветовом пространстве, так что у большой части пользователей видео может отображаться с искажениями цвета (в основном зелёного).
Чтобы сохранить цвета для большинства плееров, разные H264 видео нужно кодировать в разных пространствах:
Фреймрейт
Если ваш источник — не стримы игр или экшн-видео, то имеет смысл ограничить верхнее значение фреймрейта 25-30 кадрами — чем их меньше, тем больше остаётся данных для описания отдельного кадра. Уменьшать это значение лучше кратно — так, чтобы пропуск кадров был равномерным, иначе от видео может возникнуть ощущение подтормаживания.
Есть ещё такая вещь, как переменная частота кадров. Работать с VFR неудобно по двум причинам: во-первых, это даёт пики битрейта на участках с высокой частотой, которые мгновенно опустошают буфер; во-вторых, VFR усложняет составление плана конвертации, заставляя использовать Q-параметры (о них я писал в первой статье).
GOP size
Группы изображений — блоки, в пределах которых одни изображения могут ссылаться на данные других. Увеличение размера GOP повышает эффективность кодека в обмен на повышение требований к памяти. Большие значения особо эффективны для файлов с однотипными, циклическими движениями (вы же понимаете, о чём я). Также, при больших значениях могут возникнуть проблемы с перемоткой видео, т.к. нужно будет восстановить больший объём данных.
Название параметра, также, как и единицы измерения, могут отличаться от кодека к кодеку — смотрите документацию.
Slices
Для ускорения декодирования (и кодирования) видео можно разделить на части более низкого разрешения. Идея в том, что обработать четыре видео с разрешением, например, 1280×720 проще, чем одно, но 2560×1440. Имеет смысл при разрешениях выше FHD. Чем больше частей, тем ниже эффективность кодека. Также, использование такого разделения упрощает многопоточную обработку.
Анаморфные пиксели
35%!), либо вообще получить что-то сплющенное по горизонтали.
Контроль битрейта
Есть три основных режима работы кодеков, связанных с битрейтом:
Для онлайн проигрывания (да и для стриминга) хорошо подходит constrained VBR, т.к. он даёт лучшее, чем CBR, качество и позволяет уместить поток в интернет-канал.
Выбор maxrate/minrate зависит от канала клиента, разброс больше 20% лучше не делать.
Многопроходное кодирование
Распределение данных по файлу в VBR-режиме предсказать сложно, кодекам приходится угадывать, что получается не всегда. В многопроходном режиме кодек сперва составляет карту требующегося битрейта, а потом кодирует. Таким способом улучшается качество видео в сложных и динамических сценах (пример. Обратите внимание на количество «муарных» элементов и количество переходов между сценами). Так как при первом проходе кодек только анализирует исходный файл, вопреки распространённому мнению, обработка в таком режиме требует времени больше не в два раза, а только на 10-15%.
Для разных типов исходного материала подготовлено несколько пресетов, подстраивающих некоторые базовые параметры кодирования — такие, как уровни деблокинг-филитра, параметры психовизуальной оптимизации. Использование этих пресетов улучшает восприятие видео и хорошо работает, если вы заранее знаете тип источника, или у вас структурированный набор видео (в случае массовой обработки).
Формат пикселей
Формат и битность сильно влияют на то, как сжимаются и разжимаются файлы, в каком виде теряется качество. Основные параметры, которые описывает пиксельный формат:
Чересстрочность
Чересстрочность придумали для удвоения воспринимаемой частоты кадров минимальными затратами — битрейт и разрешение те же, а частота выше. Однако, при быстром движении становятся заметны зубцы — строки предыдущего кадра. Избавиться от эффекта, не отбрасывая кадры и не уменьшая вертикальное разрешение, можно фильтрами, но они уменьшат чёткость. Если видео будет проигрываться в браузере, чересстрочность лучше отфильтровать при кодировании, т.к. реалтайм-фильтрация на клиенте даст не лучшие визуальные результаты.
Собираем всё вместе
Разумеется, в одной статье всё охватить не получилось, но уверен, этого материала будет достаточно для улучшения качества многих видео.
Читайте документацию и экспериментируйте.
В дополнение к примеру из прошлой статьи, я узнал о ещё одной инсталяции моего кода — клик. Примеры в статье постарался брать с этих сайтов, но не смотря на это:
*Я не имею прямого отношения к авторам упоминаемых сайтов и могу не разделять их взгляды и мнение. Решения о том, кому и как предоставляется доступ к коду я комментировать не могу.
Электрический блогнот
мои заметки на полях
ffmpeg для начинающих
В данной статье попробуем «на пальцах» объяснить, что такое FFmpeg для начинающих пользователей Linux (да и Windows тоже). FFmpeg популярный набор программ и библиотек среди multimedia и web разработчиков. На базе FFmpeg сделано множество программ по конвертированию видео из одного формата в другой. Популярность этой программы крайне высока. Почему он так популярен? Для чего его чаще используют? Как установить и как запустить?
Итак, основные фишки FFmpeg, которые могут привлечь внимание неискушенного Linux пользователя, только-только начавшего изучать Ubuntu:
FFmpeg доступен на Linux, Windows, Mac Os. И везде работает одинаково. Так что, если вы научились работать с FFmpeg под Windows, то точно так же его надо запускать и в Linux и наоборот.
FFmpeg абсолютно самодостаточен. Для того чтобы посмотреть фильм нет необходимости искать в сети, скачивать и устанавливать кодеки. Достаточно всего лишь одного файла (ffplay.exe), все кодеки содержатся внутри этого файла.
FFmpeg — бесплатный софт (лицензии GPL 2.0 и LGPL 2.1) и вы можете использовать его код в своих проектах, как в коммерческих, так и в свободно-распространяемых.
Из чего состоит FFmpeg
Как было уже сказано, FFmpeg — это набор программ. Что значит “набор программ”? Нужно все программы качать или можно по отдельности? Что там внутри? На эти вопросы мы сейчас и постараемся ответить.
Но для начала определимся с термином FFmpeg — это сокращенное от Fast Forward Mpeg. Когда говорим о FFmpeg, как о наборе программ, то первые две буквы «F» должны быть большие (FF).
Итак, FFmpeg состоит из следующих инструментов (tools): ffmpeg, ffplay, ffserver, ffprobe (заметьте, все с маленькой буквы). Для Windows это обычные exe файлы. Причем размер у них очень внушительный. Все дело в том, что все видео и аудио кодеки уже находятся внутри них. Если вам нужно посмотреть фильм, то просто скачайте из сети ffplay.exe, больше ничего не потребуется. Никаких инсталляторов, никаких кодеков, права Administrator не нужны. Скачали, разархивировали, можете приступать к просмотру фильма.
FFmpeg в Windows, размер каждого файла 38-39Mb, все кодеки скомпилированы и прилинкованы «внутрь» исполняемого файла.
ffmpeg
С помощью этой программы можно конвертировать видео из одного формата в другой. Склеивать несколько видеороликов в один. Разбирать видео на отдельные кадры (изображения), а потом склеивать обратно. Ускорять/замедлять, масштабировать, добавлять субтитры и несколько звуковых дорожек. И еще 100500 полезных действий.
Список доступных опций этой команды занимает 203 страницы:
Впечатляет, не так ли?
ffplay
Используется для просмотра фильмов. Если вы начинаете знакомство с FFmpeg с просмотра фильмов, то ffplay, то что вам нужно. На начальном этапе весь пакет FFmpeg для начинающих сводится к использованию лишь этой программы.
ffserver
Если вам вдруг захотелось создать свой видео хостинг похожий на YouTube, то используйте ffserver.
ffprobe
Волшебная программа, расскажет вам все о фильме, который вы скачали (формат, продолжительность, сколько звуковых дорожек и многое другое). Выдаст на экран столько информации о фильме, что потребуется полдня, чтобы все это прочитать.
Помимо четырех программ в пакет FFmpeg входит еще и набор свободно-распространяемых библиотек (из которых вышеприведенные программы и собраны):
В принципе, из-за этих библиотек весь проект FFmpeg и затевался, а программы уже так, бонусом пошли 🙂
Используя эти библиотеки вы можете создавать свои приложения по работе с мультимедиа контентом и даже потом продавать их. Написать свой видеоплеер или видеоконвертер не составит труда. В сети полно руководств и инструкций по использованию библиотек FFmpeg.
История
История развития FFmpeg так же богата, как и его содержимое. Начавшись в 2000 году она претерпела сильное потрясение в 2011, когда часть разработчиков решила создать свою собственную библиотеку по работе с медиа контентом, назвали они ее — Libav. Свое желание уйти из проекта они объяснили недовольством организацией проекта FFmpeg, где по сути вся власть находилась в руках одного человека и все решения принимал только он сам.
Сейчас Libav идет своим путем и никого не слушает. Код обновляется не так часто, как FFmpeg. Каждое обновление тщательно проверяется.
FFmpeg в долгу не остался и исправно, каждые два дня, забирает к себе в норку изменения в коде, сделанные командой Libav:-)
В настоящее время FFmpeg продолжает активно развиваться, как доказательство скриншот репозитария исходных кодов:
Установка
Пакет FFmpeg настолько популярен, что включен во многие дистрибутивы Linux по умолчанию. Если вы по какой-то причине не установили его сразу, то это можно сделать потом с помощью менеджера пакетов. Установка FFmpeg для начинающих не должна вызвать особых проблем. В зависимости от дистрибутива Linux, нужно будет выполнить ряд стандартных команд.
Ubuntu
CentOS
openSuSe
Windows
Самые свежие версии FFmpeg для Windows можно скачать с:
Два типа FFmpeg
Есть два вида в которых FFmpeg приходит на ваш компьютер:
1) static-build — в этом случае все кодеки, фильтры и утилиты вкомпилированы «внутрь» ffmpeg.exe (ffprobe.exe, ffplay.exe) и вам достаточно скачать только один из этих файлов, чтобы начать смотреть киношку (ffplay.exe). В этом случае размер исполняемого модуля сильно раздувается (до 39Mb). Зато очень удобно.
2) shared-build — здесь кодеки, фильтры и другие вспомогательные программки являются самостоятельными отдельными файлами, которые FFmpeg находит и по мере надобности подгружает. В этом случае размер исполняемого модуля всего 190Kb.
Если вы устанавливаете FFmpeg в Linux, то с вероятностью 99.9% будет установлен shared-build.
Лично я, предпочитаю static-build (не надо думать о других библиотеках). Чтобы получить static-build под Linux нужно собрать FFmpeg самому из исходников. Для начинающих пользователей Linux это может оказаться сложно.
А как смотреть кино?
Все понятно, но как фильмы-то смотреть? Как говорилось выше, ffplay (ffplay.exe — под Windows) является консольной программой, то есть у нее нет графического интерфейса. Для просмотра видео необходимо выполнить в командной строке:
после чего сразу начинает воспроизводиться фильм:
Для начинающего пользователя такой способ запуска фильма может показаться необычным. Но в этом-то вся и мощь ffplay. У него такое же огромное количество опций, как и у ffmpeg, которы помогут настроить картинку для самых взыскательных ценителей кино.
Если вы чувствуете себя неуверенно при работе с командной строкой Windows, то можете воспользоваться следующим способом. Захватите фильм мышкой и перетащите его на ffplay.exe, кино сразу же станет воспроизводиться.
Контроль за воспроизведением (краткий список команд):
q, ESC — выход,
f — полный экран (двойной клик левой кнопкой мыши),
p — поставить на паузу,
m — звук вкл/выкл,
9, 0 — звук прибавить/убавить,
t — переключение субтитров,
c — cycle program
s — покадровое перемещение по фильму,
стрелка влево/вправо — перемещение на 10 сек назад/вперед,
стрелка вниз/вверх — перемещение на 1 мин назад/вперед,
page down/page up — перемещение на 10 мин назад/вперед.
Графический интерфейс проигрывателя ffplay выглядит довольно аскетичным, вернее сказать его вообще нет. Отсутствуют привычные ползунки, кнопочки, менюшки присущие media player’ам с графическим интерфейсом. При работе с ffplay вы видите только сам фильм и какие-то непонятные цифры и слова мелькающие в окне терминала, как в фильме «Матрица». На самом деле управлять фильмом с клавиатуры просто и понятно, через несколько просмотров пальцы сами запомнят какие кнопки нужно нажимать.
Несколько примеров запуска ffplay с различными опциями:
Уменьшить изображение в 4 раза по ширине
Почистить видео от шума
Ускорение в 2 раза
А как перекодировать?
Перевести mpg в avi
Извлечь звук из видео и записать в формате MP3
Склеить звук и видео
Извлечь видеодорожку (без звука)
Изменить размер видео
Выбросить первые 45 секунд видео и оставить участок длительностью 40 секунд
Перекодировать WAV в MP3
Разложить видео на кадры (изображения)
Сделать видео из набора изображений
Заключение
Данная статья имеет целью познакомить читателя с мощнейшим набором программ FFmpeg. Дается краткое описание пакета FFmpeg. Приводятся примеры его использования для просмотра видео и для обработки (ковертиования) аудио и видео материалов.
Перечислена только малая часть возможностей пакета FFmpeg. Для первого ознакомления я думаю достаточно. Остались за кадром такие FFmpeg фичи, как многопроходное кодирование, фильтры и цепочки фильтров, связка с Avisynth, сборка FFmpeg со сторонними кодеками.
Задачей данной статьи было показать, что FFmpeg для начинающих пользователей Linux должен быть незаменимым инструментом при работе с media контентом. Не нужно бояться отсутствия GUI. Работа с аудио и видео из консоли тоже может быть очень эффективной.
Как пользоваться ffmpeg
Если вы часто работаете с видео в операционной системе Linux, то наверное, слышали об утилите и наборе библиотек ffmpeg. Это мощная кроссплатформенная библиотека, которая позволяет делать почти любые действия с видео. Вы можете склеивать, кодировать, изменять, обрезать видео, но все это через терминал.
На первый взгляд, может показаться что это очень сложно. В какой-то мере это действительно так. Но у вас открываются широчайшие возможности настройки и очень большая гибкость. Графические инструменты часто сбоят, они могут не поддерживать тот или иной формат. Библиотека ffmpeg поддерживает все существующие форматы и работает практически всегда.
Она может вас спасти, когда другие программы зайдут в тупик. В этой статье мы рассмотрим полезные команды ffmpeg, которые пригодятся вам в повседневной работе с видео. В этой статье мы разберемся как пользоваться ffmpeg для обработки видео.
Что такое ffmpeg?
В набор ffmpeg, кроме утилит, входят такие библиотеки: libavutil libavcodec libavformat libavdevice libavfilter libavresample libswscale libswresample libpostproc. Из-за своей архитектуры, этот набор инструментов очень безопасный, и с помощью него вы можете сделать почти все что угодно с видео или аудио. В этой статье мы будем рассматривать в основном утилиту ffmpeg. Давайте рассмотрим ее синтаксис:
Сейчас мы не будем подробно рассматривать опции, рассмотрим их потом, уже в самих командах.
Как пользоваться ffmpeg
Как я уже сказал, утилита ffmpeg поддерживает большинство аудио и видео форматов. Чтобы проверить какие форматы поддерживаются вы можете выполнить:
Если вы новичок в использовании этого инструмента, то вот некоторые команды, которые могут вам очень сильно помочь. Дальше вы узнаете как пользоваться ffmpeg.
1. Получить информацию о видео
Чтобы получить доступную информацию о видео, достаточно просто указать файл источника. Выполните такую команду:
2. Разбить видео на кадры
Чтобы разбить видео на изображения подойдет такая команда:
Утилита сгенерирует изображения с именами image1.jpg, image2.jpg, image3.jpg и так далее. После завершения вы найдете очень большое количество изображений в папке с видео.
3. Собрать видео из изображений
Вы можете взять полученный набор картинок и собрать все обратно в видео. Для этого выполните:
4. Вытянуть звук из видео
Чтобы конвертировать видео в mp3 выполните команду:
Вот описание новых опций:
5. Конвертировать flv в mpg
Для конвертирования flv в mpg выполните:
6. Преобразовать видео в gif
Таким же самым образом можно переделать видео в анимированную gif картинку:
Мы не указываем кодеки ffmpeg и формат, потому что программа может их сама определить по расширению.
7. Преобразовать mpg в flv
Чтобы конвертировать видео mpg в flv выполните:
Здесь мы уже задали битрейт и формат.
8. Преобразовать avi в mpeg
Для этого выполните команду:
9. Конвертировать видео в CD или DVD формат
10. Склеить аудио и видео вместе
Вы можете собрать видео и звуковой файл в одну дорожку с помощью команды:
11. Увеличить/уменьшить скорость видео
А так можно уменьшить скорость:
12. Вырезать прямоугольник из видео
Для того чтобы вырезать определенный участок кадра из видео тоже используются фильтры. На этот раз фильтр crop:
Например, обрежем прямоугольник размером 80х60 от позиции 100х200:
Кроме этих опций, здесь можно задавать кодеки ffmpeg и форматы, чтобы параллельно выполнить кодирование ffmpeg.
13. Обрезать видео
Тут уже фильтры нам не помогут, но зато мы можем указать опциями из какого момента нужно начать и где завершить, например:
Начинаем от минуты и пишем еще минуту:
14. Склеить два видео
Чтобы склеить два видео используйте команду:
15. Проиграть видео
Вы можете быстро проиграть видео, чтобы оценить его качество, для этого есть команда:
Программа открывает и видео, и аудио.
16. Фото-баннер для аудио
Вы можете добавить фото баннер к вашей аудио записи с помощью следующей команды:
17. Добавить субтитры к видео
Если у вас есть отдельный файл субтитров, например с именем subtutle.srt, вы можете использовать такую команду, чтобы добавить его к видео:
Выводы
Это все полезные команды ffmpeg, которые сегодня были рассмотрены и теперь вы будете знать достаточно про использование ffmpeg. Но вы можете найти еще больше команд и еще больше возможностей просмотрев официальную документацию утилиты. Если вы знаете другие очень интересные и полезные команды ffmpeg, напишите в комментариях!
На десерт видео по теме, что такое видеокодеки, кодеры, а также описание основных форматов видео: