FFmpeg - набор библиотек и утилит командной строки, позволяющих производить практически все основные операции редактирования и преобразования файлов видео и звуковых файлов. Ниже шпаргалка из основных команд для работы с FFmpeg, которые могут пригодиться при редактировании видео. Особенно обратим внимание на недеструктивное без потери качества редактирование файлов видео и звуковых файлов. Лицензия: GNU LGPL и GNU GPL. Сайт: http://ffmpeg.org
Съёмка видеороликов в цифровых форматах с помощью смартфонов, фотоаппаратов и прочих цифровых приспособлений стала распространённым явлением. Само собой возникает необходимость как-то редактировать снятые видеоролики, - например, для размещения на «Ютубе». То есть видеоролики часто нужно обрезать, заменять или удалять звуковую дорожку, изменить размер формат видео, а потом всё склеивать в единый файл видео.
Для этого массового занятия создаётся немало программ. Взять хотя бы поставлявшийся ранее в системы Windows видеоредактор MoveMaker. Мы же рассмотрим набор утилит и библиотек для редактирования и преобразования медиафайлов под названием FFmpeg.
Файлы FFmpeg доступны по общественной лицензии. То есть исходный код свободно открыт для изучения, модификации и распространения. И сами программы практически бесплатны, как книги в общественной библиотеки.
Как и характерно для общественных программ, FFmpeg распространяется для всех популярных операционных системах - GNU/Linux, Windows, MacOS.
Программы FFmpeg являются консольными, редактировать файлы мультимедиа можно прямо из командной строки. Что делает утилиты FFmpeg незаменимыми для автоматизации обработки файлов видео и звуковых файлов в различного рода скриптах и сценариях - например, на веб-сайтах.
FFmpeg имеет собственную библиотеку с поддержкой большого количества кодеков для различных форматов мультимедийных файлов - практически на все случаи жизни. Плюс можно собирать FFmpeg с возможностью подключения сторонних кодеков.
Соответственно для консольных утилит можно создавать и программные оболочки, похожие, например, на MoveMaker, где операции делаются не через командную строку, а с помощью графического интерфейса и манипулятора «мышь». В силу общественной лицензии чего компоненты FFmpeg можно найти практических в большинстве программ для перекодирования и редактирования видео.
FFmpeg для работы позволяет редактировать многие видеоролики без потери качества. У обычного потребителя возможности снимать несжатое или lossless-видео обычно нет, ролики уже получаются сжатыми и дальнейшее редактирование с перекодированием ещё больше добавит артефактов на видеоизображение. Поэтому возможность недеструктивного без пережатия редактирования видеофайлов никому не помешает.
Так же следует отметить, что FFmpeg имеет альтернативу - форк Libav . Синтаксис параметров команд одинаков в обоих случаях.
Коротко нужно сказать в качестве нелирического отступления о форматах файлов видео и звуковых файлов. Понимание этого нужно для того, чтобы команды этого набора утилит и библиотек не выглядели как магические заклинания.
Обычно файл видео представляет собой контейнер. Это что-то наподобие архива, созданного архиватором zip или tar, в котором содержаться множество файлов. По сути, в таком контейнере имеются файлы видеоданных, одна или несколько звуковых дорожек, могут быть текстовые файлы субтитров, могут быть и ещё какие-нибудь данные. Обычно эти входящие в контейнер файлы называются потоками.
Распространёнными форматами контейнеров для видео являются 3gp, MP4, MOV, MPEG, AVI, MKV ("Матрёшка"), WEBM и др. FFmpeg работает с большим количеством таких форматов контейнеров.
Формат звуковых файлов - MP3, OGG Vorbis, WAV и др. - обычно содержит аудиотрек и текстовые метаданные о жанре, авторе, исполнителе и т.п.
Непосредственно видеоданные в контейнерах «упакованы» в виде различных форматов, которые определяются кодеками - программами для кодирования и декодирования видео. Наиболее популярными кодеками являются кодеки H.264 и H.265 для контейнера MP4, V8 и V9 для контейнера WEBM.
FFmpeg работает с большим количеством кодеков, включая экзотические. Узнать список возможных кодеков в FFmpeg можно запустив команду ffmpeg с параметром -codecs .
Ffmpeg -codecs
Основными параметрами видеоданных являются:
Для аудиоданных важными параметрами являются:
Но параметров на самом деле больше. Узнать параметры контейнера видео и входящих в него данных видео и аудио легко сделать с помощью команды fmpeg с параметром -i, которому передаётся путь и имя мультимедийного файла
Ffmpeg -i video.mp4
Но начать использование FFmpeg можно не только из командной строки. К FFmpeg существуют и графические оболочки – программы, в которых основные команды и операции можно производить с помощью графического интерфейса и манипулятора «мышь».
Примером такой очень простой графической оболочки является очень простенькая программа VidCutter. Она позволяет в графическом интерфейсе задействовать производить обрезку видеофайлов без перекодирования, то есть без потери качества.
Работа в этой программе состоит из одной операции - выделить начало и конец фрагмента и нажать кнопку обрезки видео. Но в большинстве случаев нужно больше, чем просто обрезать видеофайлы.
Linux. Утилиты FFmpeg обычно входят во все репозитории дистрибутивов Linux и легко устанавливаются штатными менеджерами пакетов этих дистрибутивов. Также можно скачать с официального сайта готовые бинарные сборки ffmpeg и запускать их прямо из домашней папки. Или же собрать из исходников.
Для Windows и Mac OS можно скачать с официального сайта архив с готовые бинарными сборками FFmpeg, распаковать их в любой каталог. Нужные утилиты обычно находятся в папке bin. Запускать их нужно из командной строки, задавая путь к этим утилитам, непосредственно в командной строке или через добавление пути к утилитам через глобальные системные переменные.
Основных утилит в наборе FFmpeg две:
Допустим, у нас есть несколько дорогих нам файлов видео, сделанные когда-то каким-нибудь старым «Кэноном», или «Никоном», или камкордером. Нам хотелось обрезать лишнее в этих видео, убрать из них фоновый звук и наложить какую-нибудь музычку. Потом всё склеить в единый файл без перекодирования и потери качества.
Положим эти файлы в отдельную папочку и заходим в эту папку из командной строки для редактирования файлов видео с помощью команд ffmpeg.
Так же нужно держать правильный порядок и группировку параметров командной строки утилиты ffmpeg:
Пример строки команды
Для многих операций редактирования файлов видео,- например для склейки видео, - эти файлы нужно привести к единому формату.
Основное предназначение FFmpeg - это перекодирование файлов мультимедиа из одного формата в другой. И перекодирование в FFmpeg может делаться очень легко.
Как самый минимум для перекодирования в другой формат нужно задать в выходном файле нужное расширение файла. И всё. По этому расширению утилита подберёт нужный кодек и перекодирует входной файл согласно параметрам по умолчанию для этого кодека, исходя из параметров входного файла. Например, следующая команда перекодирует входной файл формата MP4 video.mp4 в файл контейнера WEBM video.webm
Fmpeg -i video.mp4 video.webm
Но параметры по умолчанию обычно являются базовыми и могут не обеспечить как желаемое качество или возможность дальнейшего редактирования. Поэтому параметры формата можно задавать явно. Перечислим основные опции для блока параметров видео и блока звука.
Опции ffmpeg для параметров видео:
Опции ffmpeg для параметров звука:
Например, перекодируем входной файл формата MP4 video.mp4 в файл контейнера WEBM video.webm с некоторыми явно заданными параметрами
В результате этой команды запустится процесс перекодирования потоков видео и аудио с помощью выбранных кодеков согласно новым параметрам. В зависимости от параметров файлов мультимедиа и мощности компьютера этот процесс перекодирования может быть довольно длительный по времени.
Перекодирование будет произведено, естественно, и если просто задать новое разрешение для видео с помощью глобальной опции -s
Ffmpeg -i video.mp4 -s 320х240 video.webm
Теперь о преобразование видео из одного формата в другой без потери качества. Для некоторых операций возможно редактирование без перекодирования звука и видео, без потери качества, когда потоки внутри файла контейнера остаются нетронутыми и просто копируются как есть из одного файла в другой. Для этого для опций -vcodec и -acodec используется параметр copy . Например «перельём» видеопоток и аудиопоток из файла формата MP4 video.mp4 в файл контейнера TS video.ts:
В результате новый файл контейнер video.ts будет содержать нетронутое перекодированием видео и звук из файла контейнера video.ts.
Обрезка видеофайла производится при помощи опций -ss и -t . Опция -ss задаёт начало обрезки, а опция -t задаёт продолжительность дальнейшего фрагмента. Время задаётся в формате "часы:минуты:секунды". Для недеструктивного редактирования содержимого видеофайла используйте параметр copy .
Обрезка без перекодирования происходит очень быстро и не отнимает много компьютерной мощности.
Что бы склеить, соединть видеофайлы с помощью ffmpeg, они должны быть одного формата, в том числе одинаковыми и по параметрам потоков видео и звука этого формата. Если это не так, то нужно произвести предварительное перекодирование файлов видео к единому формату.
Для многих форматов соединение файлов в ffmpeg происходит при помощи оператора concat , которому после двоеточия передаётся последовательность входных файлов, разделённых символом вертикальной черты. Пример склейки одинаковых и однотипных по формату файлов file1.avi и file2.avi без перекодирования:
Ffmpeg -i "concat:file1.avi|file2.avi" -vcodec copy -acodec copy output.avi
Следует учитывать при соединении фрагментов видео в единый файл, что видеопотоки и аудиопотоки фрагментов складываются по отдельности, а потом объединяются в один контейнер. Поэтому если в одном из фрагментов звуковая дорожка короче по времени чем видеопоток, то звуковые дорожки остальных фрагментов сдвинутся к концу этой короткой звуковой дорожки и произойдёт рассинхронизация звука. Это надо учитывать.
Видеофайлы в контейнере MP4 нельзя соединить с помощью оператора concat . Но можно предварительно преобразовать эти файлы в контейнер, например, MPEG-TS без перекодирования видео и звука:
Ffmpeg -i vid1.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts vid1.ts ffmpeg -i vid2.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts vid2.ts
А потом эти файлы уже можно соединить при помощи оператора concat в итоговый файл mp4:
Ffmpeg -i "concat:vid1.ts|vid2.ts" -vcodec copy -acodec copy out.mp4
Часто из видеофайла нужно удалить звуковой поток, чтобы потом заменить на какой-нибудь другой. Делается это с помощью опции -an (audio not).
Ffmpeg -i zvuk.mpg -vcodec copy -an bezzvuka.mpg
Добавить звуковой поток в файл видео нужно с помощью дополнительной опции -i которой в качестве параметра передаётся путь звуковому файлу.
Выше мы увидели пример многократного использования для ffmpeg опции -i , если обрабатываются, соединяются, мультиплексируются несколько входных файлов мультимедиа. Также выше было сказано, что файлы-контейнерыа могут содержать в себе несколько мультимедийных потоков видео, звука и данных. FFmpeg имеет специальную опцию -map , с помощью которой можно указать конкретный входной мультимедийный поток или внутренний поток в контейнере для обработки, копирования или вставки.
Потоки обозначаются двойным номером, разделённых двоеточием - «0:0», «0:1», «1:0», «2:1» и т.д. Первая цифра до двоеточия - это номер по порядку каждого входного файла, задаваемого опцией -i , начиная с нуля. А номер после двоеточия обозначает номер потока внутри файла.
Рассмотрим опцию -map на конкретных примерах
Номера потоков в каждом видеофайле можно определить через вывод команды ffmpeg -i , который будет иметь приблизительно такой формат:
Ffmpeg -i video.mkv ... Stream #0:0(und): Video ... Stream #0:1(ger): Audio ... Stream #0:2(eng): Audio ... Stream #0:3(rus): Subtitle …
То есть 0 перед двоеточием означает, что это первый по порядку входной файл для ffmpeg - в примере выше это файл video.mkv. А номера после двоеточия означают номера внутренних потока этого файла. Для обработки конкретного потока опции -map нужно передать конкретный номер этого потока. Пример команды с опцией -map , которая демультиплексирует, то есть сохраняет одну из звуковых дорожек контейнера в отдельный файл:
Ffmpeg -i video.mkv -map 0:2 sound.wav
Теперь рассмотрим пример добавления нескольких звуковых дорожек в видеофайл с помощью FFmpeg. Для этого опять используем опцию -map .
Допустим у нас есть чистый видеофайл video.avi и мы подобрали к нему несколько звуковых дорожек zvuk1.mp3 и zvuk2.mp3 - например разная музыка или комментарии на разных языках. Теперь используем опцию "-map" для мультиплексации, то есть соединения этих файлов в единый файл контейнер:
Ffmpeg -i video.avi -i zvuk1.mp3 -i zvuk2.mp3 -map 0:0 -map 1:0 -map 2:0 out.avi
Как видите, для входных файлов после опций -i в опциях -map используются номера перед двоеточием. И мы получили выходной видеофайл с двумя звуковыми дорожками внутри, между которыми можно переключаться во многих плеерах - например, в плеере mpv переключение между звуковыми дорожками делается через "#" (Shift+2).
Естественно можно было добавить параметры кодирования для нового видефайла. Например опции -c:v copy -c:a copy позволили бы в примере выше сложить новый файл out.avi чистым копированием без перекодирования входных файлов video.avi, zvuk1.mp3 и zvuk2.mp3.
Таким образом с помощью FFmpeg можно добавить в видеофайл субтитры. Главное не запутаться в номерах входных потоков и потоков внутри контейнера.
Выше в статье рассказано в стиле шпаргалки про основные команды FFmpeg для начинающих. За рамками статьи оказалось много синтаксических вохзожностей командной строки ffmpeg, так и - много функциональных возможностей этой программы. Например, не рассказано про фильтры FFmpeg. Более успешное использование FFmpeg требует в дальнейшем знакомства с полной документацией программы и с документацией нужных форматов мультимедиа.
Статья в дальнейшем может быть дополнена новыми примерами использования FFmpeg. Но у всех всегда под рукой есть руководство и справочник на английском языке.
Ffmpeg -h full > ffmpeg_help.txt
Это программа (набор медиа-библиотек с исполняемым файлом), дающая неограниченную власть над видео и позволяющая сэкономить кучу времени.
Не однажды любой сталкивался с ситуацией, когда надо было:
И каждый раз, можно поспорить, начинались поиски, где бы украсть какой софт, чтобы это сделать. Так вот, всё это умеет делать FFmpeg, который не стоит при этом ни копейки (хотя желательно подкинуть пацанам немного помощи).
А ещё некоторые довольно известные видео-редакторы являются по сути лишь графической надстройкой поверх FFmpeg, вот так-то. Но никто не говорит, что это плохо, например XviD4PSP - прекрасный конвертер. Просто зачем использовать тяжёлый GUI, когда всё то же самое можно делать изящно и быстро.
Некоторые операции над видео выполняются без перекодирования ( -vcodec copy -acodec copy ), некоторые требуют перекодирования (не вникая в детали, можно ставить в таких случаях опцию -crf 18 ).
Самая основная команда, будет нужна как предваряющая для многих других.
Выполняется очень просто:
ffprobe.exe 1 .mp4
Результат будет примерно такой:
Среди кучи инфы можно найти, что видео идёт две минуты ( Duration: 00:02:00.07 ) и в контейнере две дорожки:
Эта команда вырежет из файла 1.mp4 начиная с 00:03:05 видеофрагмент продолжительностью 66 секунд ( 00:01:06 ) и сохранит его в файл под именем cut.mp4 .
Смотрим информацию по файлу:
ffprobe.exe 1 .mp4
Помимо прочей информации видим, например, такое:
Duration: 01:52 :52.80 , start: 0.000000 , bitrate: 2768 kb/ s Stream #0:0: Video: mpeg4 (XVID / 0x44495658), yuv420p, 704x384 Stream #0:1: Audio: ac3 ( / 0x2000), 48000 Hz, 5.1(side), s16, 448 kb/s Stream #0:2: Audio: ac3 ( / 0x2000), 48000 Hz, 5.1(side), s16, 448 kb/s
ffmpeg -i 1 .avi -map 0 :0 -map 0 :2 -ss 01:37 :34 -t 63 -vcodec copy -acodec copy cut.avi
Тут есть нюанс. Если дорожка в AC3, то изломается CodecID (был раньше такой косяк контейнера AVI, но возможно его исправили), и звук играться не будет. Однако, можно сложить всё в MKV:
ffmpeg -fflags genpts -i 1 .avi -map 0 :0 -map 0 :2 -ss 01:37 :34 -t 63 -vcodec copy -acodec copy cut.mkv
Сначала смотрим информацию по файлу (как в примере выше), определяем номер дорожки и:
ffmpeg -i 1 .mkv -map 0 :2 1 .ass
Это же подходит для извлечения аудиодорожек. Ну и видео тоже. Короче, вообще для любого потока из контейнера. Естественно, расширение выходного файла надо задавать в соответствии с потоком.
Например, вы записывали летсплей, но в углу экрана палится ваш ник и надо закрыть его чёрным прямоугольником. Или другая ситуация: хочется закопирайтить что-то и налепить в углу какой-нибудь свой логотип.
Делается это так:
ffmpeg.exe -i 1 .mp4 -vf "movie=logo.png ; overlay=16:16" -crf 18 2 .mkv
Тут необходимо перекодирование, потому надо задать параметры кодировки, что и выполняет опция -crf 18 . Ватермарка лежит в том же каталоге под именем logo.png . Параметр 16:16 - координаты позиционирования верхнего левого угла ватермарки.
В основном, с целью уменьшить размер файла. Например, видеозапись с цифровика или захваченное видео Fraps.
Я видел команды на несколько строк, где расписывались битрейты, квантификаторы, фигнификаторы и прочий хардкор, но я же в этом ничего не понимаю, хотелось бы что-то попроще. И оно такое есть, проще некуда:
ffmpeg.exe -i 1 .avi -crf 18 out.mp4
Параметр CRF является некоторым уровнем качества и принимает значения от 0 до 51, где:
FFmpeg - это набор библиотек для обработки видео и аудио файлов. FFmpeg сконвертирует mov в mp4, наложит водяной знак, склеит несколько видео файлов в один, поменяет разрешение, перекодирует потоковое видео, создаст поток сам. FFmpeg полезен для тех, кто профессионально работает с видео, разрабатывает медиа приложения или просто обрабатывает домашние записи.
FFmpeg не имеет графического интерфейса и управляется командами из консоли. Многие пользователи работают с ним, копируя нужные команды из интернета, не понимая, что значит тот или иной флаг. Научимся осознанно работать с FFmpeg на примере нескольких полезных команд.
Сегодня мы пройдем путь от получения информации о файле до применения нескольких фильтров одновременно, решая задачи, с которыми часто сталкиваешься при работе с видео. Установим ffmpeg и вперед!
Тут все просто, вводим путь к файлу, получаем информацию о нем: кодеки, количество дорожек, разрешение, битрейт и фреймрейт. Мы указываем пути к файлам флагом -i (input):
I file1.mp4 -i file2.mp4 .
Допустим у нас есть сайт, на котором видео проигрывалось через Flash плеер. Мы хотим поменять его на HTML5 Video. Для этого конвертируем видео файлы на сервере из flv формата в mp4.
Список поддерживаемых вашим ffmpeg кодеков можно получить через ffmpeg -codecs .
Вместо -vcodec встречается запись -codec:v и -c:v . Если не указать кодеки для конвертации ffmpeg -i flashvideo.flv output.mp4 , то ffmpeg установит дефолтные кодеки для формата файла на выходе .
При конвертации задают не только кодеки. Увеличим число настроек:
Ffmpeg -i flashvideo.flv -b:v 700k -r 25 -pix_fmt yuv420p -vcodec libx264 \ -b:a 128k -ar 44100 -acodec libvo_aacenc -y output.mp4
Мы установили битрейт для видео -b:v и аудио -b:a в 700 и 128 кб/c. Битрейт можно обозначить другими флагами: -vb и -b для видео или -ab для аудио.
Оставшиеся три параметра - это фреймрейт -r 25 в кадрах в секунду, цветовая модель YUV равная обычному значению yuv420p и частота дискретизации звука 44100 Гц. Флаг -y нужен для перезаписи файла, если он уже существует.
Флагом -ss указываем с какого момента исходного видео обрезаем, -t - продолжительность. На выходе мы получим двадцати секундное видео, которое начнется с десятой секунды исходного. Запись -ss 00:00:10.250 -t 00:00:20.120 пригодится для указания более точного промежутка времени. До версии 2.1 FFmpeg в обоих случаях обрезал видео по ближайшему ключевому кадру . В новых версиях итоговое видео максимально близко к указанному интервалу.
Мы добавили -vcodec copy -acodec copy , чтобы сохранить кодеки исходного видео. Иначе ffmpeg перекодировал бы их в кодеки по умолчанию. Сейчас видео не перекодируется и команда выполнится быстро. Дальше упростим эту запись флагом -c copy .
Если расположить флаги -ss и -t после входящего видео, то итоговое видео будет таким же, но команда будет выполняться дольше. Флаги будут относиться к итоговому видео и FFmpeg будет декодировать фрагмент видео до -ss . В первом случае эта часть будет проигнорирована.
Флаг -t можно заменить на -to , указав вместо продолжительности конечную точку. Этот флаг нельзя применить к входящему видео:
Ffmpeg -ss 10 -i source_video.mp4 -to 30 -c copy result.mp4
Команда дала нам другой результат: тридцати секундное видео с десятой секунды исходного. Это произошло, потому что -to использовал временную шкалу result.mp4 , тридцатая секунда на котором равна сороковой секунде source_video.mp4 . Чтобы использовать исходную шкалу добавим флаг -copyts . Так мы получим такое же видео, как от первой команды:
Ffmpeg -ss 10 -i source_video.mp4 -to 30 -copyts -c copy result.mp4
Один из самых мощных инструментов ffmpeg - фильтры. Они могут добавлять эффекты, накладывать разные видео друг на друга, сшивать несколько файлов в один. Увидеть список установленных фильтров мы можем по команде ffmpeg -filters . Изменим с их помощью разрешение видео:
Ffmpeg -i source_video.avi -vf scale=640:480 source_preview.avi
Мы использовали флаг -vf , указав фильтр scale и разрешение 640:480 . Этот фильтр может сохранять пропорции и вычислять разрешение динамически .
Мы объединили несколько фильтров в один флагом filter_complex и получили ускоренный в два раза файл. Чтобы разобраться применим фильтры по одиночке.
Ffmpeg -i source_video.mp4 -vf setpts=0.5*PTS accelerated_video.mp4
Мы ускорили воспроизведение видео дорожки фильтром setpts . Однако аудиодорожка не изменилась, и файл получится той же продолжительности что и был: видео проиграется в 2 раза быстрее, а последний кадр будет висеть всю вторую половину файла. Если убрать аудио дорожку флагом -an , то длительность итогового файла будет определяться по видео дорожке и будет в два раза меньше исходной.
Наоборот, если нужна только ускоренное аудио без видео, воспользуемся фильтром atempo , а флагом vn уберем видео дорожку.
Ffmpeg -i source_video.mp4 -af atempo=2.0 -vn accelerated_audio.mp3
Добавив filter_complex и применив оба фильтра, мы ускорили файл целиком.
Выполним ту же операцию другим методом:
Ffmpeg -f concat -i list.txt -c copy output.mp4
В FFmpeg есть элементы, которые читают или записывают медиа в определенных форматах. Они называются демультиплексор и мультиплексор . -f concat - это демультиплексор, который принимает текстовый файл, со списком медиа файлов и склеивает их в один. Посмотреть другие элементы можно командой ffmpeg -formats .
Содержимое list.txt:
File "input1.mp4" file "input2.mp4"
Такой метод удобен, если у нас много файлов и надо склеить их друг за другом. Он не перекодирует видео и работает быстрее первого метода.
Но первый метод применяется чаще. Во-первых, он может принять на вход видео с разными кодеками. Во-вторых, дает большую гибкость. Например, если нужна только часть первого видео, мы можем воспользоваться флагами -ss и -t . Обратите внимание, эти флаги действуют только на первый файл input1.mp4 .
Ffmpeg -ss 5 -t 2 -i input1.mp4 -i input2.mp4 \ -filter_complex " concat=n=2:v=1:a=1 [v] [a]" \ -map "[v]" -map "[a]" -y result.mp4
Последний пример, который мы рассмотрим - это наложение водяного знака. Фильтр overlay принимает на вход координаты расположения водяного знака на итоговом видео.
Расположим водяной знак по центру. Зная размер исходного видео и png картинки, можно вычислить координаты самим. Например при видео 1280×720 и водяном знаке 200×200, положение по горизонтали x = (1280 - 200) / 2 = 540 и по вертикали y = (720 - 200) / 2 = 260 . Соответственно значение фильтра "overlay=540:260" . Однако удобнее написать универсальную команду, чтобы ffmpeg посчитал все за нас. Размер видео получим из параметров main_w и main_h , а водяного знака из overlay_w и overlay_h . Далее ту формулу, по которой мы вычисляли координаты запишем в значение фильтра "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" . Готово, мы получили команду для наложения водяного знака по центру:
Ffmpeg -i source_video.mp4 -i watermark.png \ -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" \ -codec:a copy video_protected.mp4
Твитнуть
Ffmpeg — инструмент, который может помочь вам конвертировать практически любой аудио и видео файл из командной строки. В этой статье написаны некоторые полезные команды ffmpeg, которые вы должны для этого знать. Программа Ffmpeg является чрезвычайно мощным и универсальным инструментом командной строки для конвертации аудио и видео файлов. Программа бесплатная и доступна для Windows, и Mac и Linux машин. Хотите ли вы объединить два видео файла, извлечь аудио компоненты из видео файлов, конвертировать видео в анимированный GIF, ffmpeg’а может сделать всё это и даже больше.
Программа Ffmpeg поддерживает все популярные аудио и видео форматы. Или вы можете выполнив команду ./ffmpeg -formats чтобы получить список каждого формата, поддерживаемый вашей установленной версией ffmpeg. Если вы только начали, вот несколько команд, которые дадут вам хорошее представление о возможностях этого инструмента.
Вы можете использовать разницу во времени параметра (-SS), чтобы указать начальную метку времени в формате ЧЧ:мм:СС.мс Формат а-т параметра для указания фактической продолжительности клипа в секундах.
Если вы хотите разделить большой видео файл на несколько небольших клипов без повторного кодирования, ffmpeg может помочь. Эта команда будет разделять исходное видео на 2 части — одна заканчивается на 50s от начала. а другая, начинается с 50s и заканчивается в конце входного видеосигнала.
Вы можете использовать параметр vcodec, чтобы указать кодировку формата, который будет использоваться для вывода видео. Кодирование видео занимает много времени, но вы можете ускорить процесс, заставляя заготовку хотя бы ухудшить качество выходного видео.
Ffmpeg -i youtube.flv -c:v libx264 filename.mp4 ffmpeg -i video.wmv -c:v libx264 -preset ultrafast video.mp4
Если у вас есть несколько аудио или видео файлов, закодированных с помощью тех же кодеков, вы можете объединить их в один файл используя команды ffmpeg. Создайте входной файл со списком всех исходных файлов, которые вы хотите объединить, а затем выполните эту команду.
Ffmpeg -f concat -i file-list.txt -c copy output.mp4
Используйте этот параметр, чтобы отключить звуковую часть видеопотока.
Ffmpeg -i video.mp4 -an mute-video.mp4
Переключатель vn извлекает аудиодорожку из видео, и мы используем — AB переключатель, чтобы сохранить звук в качестве 256кбит / MP3 аудио файл.
Ffmpeg -i video.mp4 -vn -ab 256 audio.mp3
Ffmpeg — это отличный инструмент для конвертирования видео файлов в анимированные GIF файлы, и качество получается довольно не плохое. Используйте шкалу фильтра, чтобы задать ширину изображения GIF, параметр — t для конкретной длительности, а параметр r задает частоту кадров (fps).
Ffmpeg -i video.mp4 -vf scale=500:-1 -t 10 -r 10 image.gif
Эта команда извлечёт видеокадр на 15s и сохранит его в качестве 800px в ширину изображения в формате JPEG. Вы можете также использовать параметр s (400×300) указав точные размеры изображения в файл, хотя он, вероятно, создаст растягивающееся изображение, если размер изображения не соответствует пропорции оригинального видео-файла.
Ffmpeg -ss 00:00:15 -i video.mp4 -vf scale=800:-1 -vframes 1 image.jpg
Вы можете использовать ffmpeg для автоматического извлечения изображения кадров из видео каждый ‘N’ секунд и сохранять изображения в последовательности. Эта команда сохраняет изображения кадра через каждые 4 секунды.
Ffmpeg -i movie.mp4 -r 0.25 frames_%04d.png
Вы можете также указать кратчайший переключатель для завершения кодирования, когда заканчивается самый короткий клип.
Ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4 ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental -shortest output.mp4
11. Изменить размер видео
Используйте переключатель размер (-ы) для изменения размера видео, сохраняя при этом его пропорции.
Ffmpeg -i input.mp4 -s 480x320 -c:a copy output.mp4
Эта команда служит для создания видео слайд-шоу с использованием серии картинок, которые названы как img001.png, img002.png, и т. д. Каждое изображение будет иметь продолжительность 5 секунд (-r 1/5).
Ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p slideshow.mp4
Вы можете добавить изображение в аудио файл, а длина выходного видео будет той же, что и у входного аудиопотока. Это может пригодиться для загрузки mp3-файлов на YouTub.
Ffmpeg -loop 1 -i image.jpg -i audio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
Используйте параметр t для указания длительности видео.
Ffmpeg -loop 1 -i image.png -c:v libx264 -t 30 -pix_fmt yuv420p video.mp4
Эта команда создаст субтитры с файлами.srt . Ffmpeg может также выполнить декодирование наиболее распространенных форматов субтитров.
Ffmpeg -i movie.mp4 -i subtitles.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mkv
Это позволит создать 30-секундный звуковой файл, начиная с 90 секунды из исходного аудио файла без перекодировки.
Вы можете использовать фильтр объёма для изменения объёма медиа-файла используя команду ffmpeg. Эта команда будет наполовину уменьшат громкость аудио файла.
Ffmpeg -i input.wav -af "volume=0.5" output.wav
Эта команда будет поворачивать видео на 90° по часовой стрелке. Вы можете установить транспонировку на 2, чтобы повернуть видео на 90° против часовой стрелки.
Ffmpeg -i input.mp4 -filter:v "transpose=1" rotated-video.mp4
Эта команда будет поворачивать видео на 180° против часовой стрелки.
Ffmpeg -i input.mp4 -filter:v "transpose=2,transpose=2" rotated-video.mp4
Вы можете изменить скорость видео при использовании фильтра setpts (в электронном виде штамп времени). Эта команда сделает видео 8х (1/8) быстрее или используя setpts=4*PTS сделает видео в 4x медленнее.
Ffmpeg -i input.mp4 -filter:v "setpts=0.125*PTS" output.mp4
Для изменения скорости аудио, используйте аудио фильтр atempo. Эта команда будет выполнять двойную скорость звука. Для аудио, Вы можете использовать любое значение между 0,5 и 2,0.
Ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
Чтобы вы начали работать с ffmpeg, Вы должны также проверить официальную документацию на сайте ffmpeg.org и узнать обо всех возможных вещях, которые вы можете сделать с помощью ffmpeg.
ffmpeg — набор библиотек с широкими возможностями. С его помощью можно в том числе конвертировать аудио и видеозаписи в различные форматы. В комплекте есть libavcodec для кодирования аудио и видео. Как же пользоваться ffmpeg?
Для начала его надо скачать. Свежая сборка для Windows есть , пакеты для Debian — . В посте будет описана работа с ffmpeg в Windows.
После загрузки архива из него нужно распаковать содержимое папки bin в какое-нибудь удобное место. Там три файла — ffmpeg.exe, ffplay.exe, ffprobe.exe. Вероятнее всего, вам понадобится только ffmpeg.exe. ffplay — простой плеер с возможностью использования библиотек ffmpeg, ffprobe — инструмент для анализа потока.
Чтобы было удобнее — положите файл, который надо перекодировать, в папку рядом с файлом ffmpeg.exe (или наоборот, переместите исполняемый файл ffmpeg к видеофайлу). Теперь нужно запустить командную строку в файле — для этого нажимайте Shift+ПКМ (правая кнопка мыши), в контекстном меню выбирайте «Открыть командную строку здесь» («Open command window here»).
На этом подготовка закончена, в запущенную командную строку требуется ввести команду для запуска кодирования.
Во всех командах, показанных ниже, под IN будем понимать входной файл, а под OUT — выходной.
Результат будет примерно таким:
При этом цифра в команде определяет профиль формата:
Кстати, местами возможно просто написать входной файл, и необходимый формат выходного файла. Например, так:
Ffmpeg -i IN.avi OUT.mpg
Дорожка будет сохранена в формате MP3.
Ffmpeg -i IN.mov -vn -ar 44100 -ac 2 -ab 192 -f mp3 OUT.mp3
Добавить в видео свой звук тоже можно:
Ffmpeg -i AUDIO.wav -i IN.avi OUT.mpg
Вообще говоря, с помощью google можно найти команду почти на любой случай. А еще можно прочесть мануалы и разобраться, как эти самые команды составляются — там все совсем не сложно.
Следует иметь ввиду, что кодирование видео зачастую отнимает много ресурсов процессора.