В прошлом посте я рассказал как установить .

В данном посте я рассмотрю базовые команды, которые существенно облегчат работу с FFMpeg. Огромное количество информации содержится в мануалах, они как известно рулез, так что если какая-то информация оказалась за пределами поста, «man ffmpeg» вам в помощь.

Для понимания, более простых конструкций, например такой:

Ffmpeg -ss 5 -i a.mp4 -aspect 4:3 -f image2 -r 1 -vframes 300 a%2d.jpg

чуть ниже я перечислю наиболее часто используемые опции.

Опции ffmpeg

Рассмотрим некоторые полезные опции (в скобках примеры). Если какие-то из опций не будут указаны, то FFmpeg подставит их из значений по умолчанию:

-i — задает имя исходного (входного) файла.
-threads — числовое значение, определяет количество ядер процессора. Что, естественно, отражается на скорости кодирования и операций над файлами. Число 0 устанавливает автоматическое определение доступного числа ядер (-threads 2 ).
-t — задает длительность кодируемого видео в целых секундах или же в формате чч:мм:сс.
-ss — указывает позицию в видеофайле с которой будет начинаться кодирование. Формат в целых секундах или чч:мм:сс.
-fs — числовое значение в байтах, килобайтах (k), мегабайтах (M). Регистр приставки важен. Ограничивает размер конечного файла. Полезно для экспериментов над небольшим кусочком видеофайла, чтобы не кодировать весь файл (-fs 5M ).
-y — эта опция перезаписывает уже существующие файлы без запроса на подтверждение.
Видео опции:
-vcodec — видеокодек, которым будет осуществляться кодирование видео (-vcodec mpeg4 ).
-vpre — выбираем предустановку для видеокодека. Сначала FFmpeg ищет файлы предустановок в ~/.ffmpeg, затем в /usr/share/ffmpeg или /usr/local/share/ffmpeg, в зависимости от пути установки. Посмотреть самим, какие присутствуют файлы предустановок, можно по этим же путям.
-f — force, указываем принудительно формат конечного файла (-f avi ).
-b — битрейт видеопотока. По умолчанию: 200kb/s (-b 1500 ).
-bt — толерантность битрейта. По умолчанию: 4000k. При двухпроходном кодировании указывает как далеко в первом проходе можно отклониться от указанного среднего битрейта. Значение не связано с минимальным/максимальным битрейтом. Слишком сильное снижение этого параметра оказывает негативное влияние на качество.
-r — количество кадров в секунду. По умолчанию: 25 (-r 15 ).
-s — размер фрейма, то есть разрешение выходного видеофайла. По умолчанию определяется размером файла-источника. Может быть задано буквенными сокращениями, например svga означает размер 800×600. Просмотреть все доступные сокращения можно в man ffmpeg . (-s 640×480 или -s vga ).
-aspect — числовые значения, определяет соотношение сторон выходного файла (-aspect 4:3 или -aspect 1.3333 ).
-croptop
-cropbottom
-cropleft
-cropright — обрезка кадров сверху, снизу, слева, справа. Значения указываются в пикселях. Может использоваться, например, для удаления черных полос (-croptop 15 ). В некоторых версиях ffmpeg данные опции могут быть удалены и вместо них используется опция -vf crop=width:height:x:y . Подробнее о ней в соответствующем разделе ниже.
-pass — количество проходов при кодировании, 1 или 2 (-pass 2 ).
-g — размер группы кадров, после которой следует ключевой кадр. Например -g 300 устанавливает по одному ключевому кадру каждые 10 секунд, при скорости исходного видеофайла 29.97fps. 30 кадров в секунду * на 10 секунд = значение опции 300 (примерное значение для рипа DVD-файла). Чем меньше битрейт и количество кадров в секунду, тем меньше должно быть это значение.
-deinterlace — удаление «гребенки».
Аудио опции:
-ar — устанавливает частоту дискретизации звука. По умолчанию: 44100Гц (-ar 22050 ).
-ab — битрейт звуковой дорожки. По умолчанию: 64kb (-ab 256k ).
-ac — число каналов звуковой дорожки. По умолчанию, для входящих потоков это значение равно 1, для исходящих равно числу каналов исходного файла. Другими словами, если вы делаете захват звука, то число каналов по умолчанию 1, а если берете звук из видеофайла, например, то число каналов по умолчанию будет равно исходнику (-ac 2 ).
-an — кодирование видео без звуковой дорожки.
-acodec — аудиокодек, которым будет осуществляться кодирование звука (-acodec flac ).
-apre — набор предустановок для аудиокодека.

Наиболее часто используемые конструкции:
1. Получение информации о видеофайле

Ffmpeg -i video.avi

2. Превратить набор картинок в видео

Ffmpeg -f image2 -i image%d.jpg video.mpg

Эта команда преобразует все картинки из текущей директории (названные image1.jpg, image2.jpg и т.д.) в видеофайл video.mpg


Ffmpeg -r 12 -y -i "image_%010d.png" output.mpg


здесь задаётся frame rate (12) для видео, формат «image_%010d.png» означает, что картинки будут искаться в виде image_0000000001.png, image_0000000002.png и тд, то есть, в формате printf)

3. Порезать видео на картинки

Ffmpeg -i video.mpg image%d.jpg

Эта команда создаст файлы image1.jpg, image2.jpg и т.д., поддерживаются так же форматы PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.
4. Конвертировать видео в формат iPod/iPhone

Ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

Пояснения:

  • Источник: source_video.avi
  • Аудио кодек: aac
  • Битрейт аудио: 128kb/s
  • Видео кодек: mpeg4
  • Битрейт видео: 1200kb/s
  • Размер видео: 320 на 180 пикселей
  • Полученное видео: final_video.mp4

5. Конвертировать видео в формат PSP

Ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

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

На первый взгляд, может показаться что это очень сложно. В какой-то мере это действительно так. Но у вас открываются широчайшие возможности настройки и очень большая гибкость. Графические инструменты часто сбоят, они могут не поддерживать тот или иной формат. Библиотека ffmpeg поддерживает все существующие форматы и работает практически всегда.

Она может вас спасти, когда другие программы зайдут в тупик. В этой статье мы рассмотрим полезные команды ffmpeg, которые пригодятся вам в повседневной работе с видео.

ffmpeg - это один из лучших мультимедийных фреймворков, который содержит различные инструменты, для решения разных задач. Например, ffplay - портативный медиа плеер, утилита ffmpeg может использоваться для обработки и инвертирования файлов, ffserver - для потоковой передачи данных, а ffprobe может анализировать мультимедийный поток.

В набор ffmpeg, кроме утилит, входят такие библиотеки: libavutil libavcodec libavformat libavdevice libavfilter libavresample libswscale libswresample libpostproc. Из-за своей архитектуры, этот набор инструментов очень безопасный, и с помощью него вы можете сделать почти все что угодно с видео или аудио. В этой статье мы будем рассматривать в основном утилиту ffmpeg. Давайте рассмотрим ее синтаксис:

[опции источника] -i [источник] [основные опции] [кодеки] [преемник]

  • Опции источника - указывают параметры чтения файла, настройки и так далее;
  • Источник - опция -i задает источник, откуда будет читаться файл, источников может быть несколько и это может быть не только файл, но и устройство;
  • Основные опции - задают параметры работы всей утилиты;
  • Кодеки - кодек, который будет использоваться для сохранения видео и аудио;
  • Преемник - файл или устройство, куда будут записаны данные.

Сейчас мы не будем подробно рассматривать опции, рассмотрим их потом, уже в самих командах.

Полезные команды ffmpeg

Как я уже сказал, утилита ffmpeg поддерживает большинство аудио и видео форматов. Чтобы проверить какие форматы поддерживаются вы можете выполнить:

Если вы новичок в использовании этого инструмента, то вот некоторые команды, которые могут вам очень сильно помочь. Дальше вы узнаете как пользоваться ffmpeg.

1. Получить информацию о видео

Чтобы получить доступную информацию о видео, достаточно просто указать файл источника. Выполните такую команду:

ffmpeg -i video.mp4 -hide_banner

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

ffmpeg -i video.mp4

2. Разбить видео на кадры

Чтобы разбить видео на изображения подойдет такая команда:

ffmpeg -i video.mp4 image%d.jpg

Утилита сгенерирует изображения с именами image1.jpg, image2.jpg, image3.jpg и так далее. После завершения вы найдете очень большое количество изображений в папке с видео.

3. Собрать видео из изображений

Вы можете взять полученный набор картинок и собрать все обратно в видео. Для этого выполните:

ffmpeg -f image2 -i image%d.jpg imagestovideo.mpg

Опция -f задает формат входного файла, вы можете использовать jpeg, png, jpg и другие картинки. И вы уже знаете как посмотреть поддерживаемые форматы ffmpeg.

4. Вытянуть звук из видео

Чтобы конвертировать видео в mp3 выполните команду:

ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 audio.mp3

Вот описание новых опций:

  • -vn - не обрабатывать видео, вся видео информация будет отброшена;
  • -ar - частота дискретизации, измеряется в герцах, чем больше, тем лучше качество звука;
  • -ab - устанавливает битрейт аудио;
  • -ac - устанавливает количество каналов;
  • -f - указывает формат полученного файла.

5. Конвертировать flv в mpg

Для конвертирования flv в mpg выполните:

ffmpeg -i video.flv video.mpg

6. Преобразовать видео в gif

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

ffmpeg -i video.flv animated.gif

Мы не указываем кодеки ffmpeg и формат, потому что программа может их сама определить по расширению.

7. Преобразовать mpg в flv

Чтобы конвертировать видео mpg в flv выполните:

ffmpeg -i video.mpg -ab 26k -f flv video1.flv

Здесь мы уже задали битрейт и формат.

8. Преобразовать avi в mpeg

Для этого выполните команду:

ffmpeg -i video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 video.mpeg

Использованные опции:

  • -target pal-dvd - формат исходящего файла;
  • -ps 2000000000 - максимальный размер полученного файла;
  • -aspect 16:9 - соотношение сторон экрана.

9. Конвертировать видео в CD или DVD формат

Чтобы выполнить конвертирование ffmpeg видео в формат DVD, нужно задать ваш формат с помощью опции -target. Доступны такие форматы: vcd, svcd, dvd, dv, pal-vcd или ntsc-svcd. Чтобы создать VCD выполните:

ffmpeg -i video.mpg -target vcd vcd_video.mpg

10. Склеить аудио и видео вместе

Вы можете собрать видео и звуковой файл в одну дорожку с помощью команды:

ffmpeg -i audio.mp3 -i video.avi video_audio_mix.mpg

11. Увеличить/уменьшить скорость видео

Чтобы увеличить скорость воспроизведения видео мы будем использовать фильтры, с помощью опции -vf. За скорость отвечает фильтр setpts. Например:

ffmpeg -i video.mpg -vf "setpts=4*PTS" highspeed.mpg

А так можно уменьшить скорость:

ffmpeg -i video.mpg -vf "setpts=0.5*PTS" lowerspeed.mpg -hide_banner

12. Вырезать прямоугольник из видео

Для того чтобы вырезать определенный участок кадра из видео тоже используются фильтры. На этот раз фильтр crop:

ffmpeg -i in.mp4 -vf "crop=out_w:out_h:x:y" out.mp4

  • out_w - ширина нужного прямоугольника;
  • out_h - высота нужного прямоугольника;
  • x,y - задают координаты прямоугольника от начала видео.

Например, обрежем прямоугольник размером 80х60 от позиции 100х200:

ffmpeg -i in.mp4 -vf "crop=80:60:200:100" video.mp4

Кроме этих опций, здесь можно задавать кодеки ffmpeg и форматы, чтобы параллельно выполнить кодирование ffmpeg.

13. Обрезать видео

Тут уже фильтры нам не помогут, но зато мы можем указать опциями из какого момента нужно начать и где завершить, например:

ffmpeg -i video.mp4 -ss 00:01:00 -t 00:01:00 -c copy video_clip.mp4

Начинаем от минуты и пишем еще минуту:

  • -ss задает время на видео, из которого стоит начать запись;
  • -t задает время когда запись нужно завершить относительно ss;
  • задает кодеки для аудио и видео, в нашем случае просто копировать файлы, ничего не перекодируя.

14. Склеить два видео

Чтобы склеить два видео используйте команду:

ffmpeg -i concat:"video1.mpg|video2.mpg" -c copy video.mpg

15. Проиграть видео

Вы можете быстро проиграть видео, чтобы оценить его качество, для этого есть команда:

ffplay video.mp4

Программа открывает и видео, и аудио.

16. Фото-баннер для аудио

Вы можете добавить фото баннер к вашей аудио записи с помощью следующей команды:

ffmpeg -loop 1 -i image.jpg -i Bryan\ Adams\ -\ Heaven.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4

Рассмотрим опции:

  • -loop - задает, что нужно всегда повторять оду и ту же картинку;
  • -i - задают входящие файлы, картинку и аудиофайл;
  • -с:v - задает видеокодек, эквивалентно -vc;
  • -c:a - задает аудиокодек, эквивалентно -ac;
  • -b:a - задает битрейт аудио, эквивалентно -ab;
  • -strict experimental - кодек aac для ffmpeg экспериментальный, поэтому чтобы его использовать нужна эта опция.

17. Добавить субтитры к видео

Если у вас есть отдельный файл субтитров, например с именем subtutle.srt, вы можете использовать такую команду, чтобы добавить его к видео:

ffmpeg -i video.mp4 -i subtitles.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast video-output.mkv

Выводы

Это все полезные команды ffmpeg, которые сегодня были рассмотрены. Но вы можете найти еще больше команд и еще больше возможностей просмотрев официальную документацию утилиты. Если вы знаете другие очень интересные и полезные команды ffmpeg, напишите в комментариях!

На десерт видео по теме, что такое видеокодеки, кодеры, а также описание основных форматов видео:

Это программа (набор медиа-библиотек с исполняемым файлом), дающая неограниченную власть над видео и позволяющая сэкономить кучу времени.

Описание

Не однажды любой сталкивался с ситуацией, когда надо было:

  • разрезать видео на части или наоборот, склеить из двух;
  • вырезать звук из клипа, заменить звуковую дорожку в фильме (выкинуть бубляж, вставить оригинал);
  • наложить субтитры;
  • обрезать по кадру (crop);
  • сконвертировать для iPhone/PSP/ещёчо;
  • и прочее подобное.

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

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

Некоторые операции над видео выполняются без перекодирования ( -vcodec copy -acodec copy ), некоторые требуют перекодирования (не вникая в детали, можно ставить в таких случаях опцию -crf 18 ).

Получение информации по файлу

Самая основная команда, будет нужна как предваряющая для многих других.

Выполняется очень просто:

ffprobe.exe 1 .mp4

Результат будет примерно такой:

Среди кучи инфы можно найти, что видео идёт две минуты ( Duration: 00:02:00.07 ) и в контейнере две дорожки:

  1. Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1389 kb/s, 29.97 fps
  2. Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s

Вырезать фрагмент видео

Эта команда вырежет из файла 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, где:

  • 0 - наилучшее качество;
  • 51 - наихудшее качество. Если выбрать больше 51, например 54 или 9000 - будет браться всё равно 51.

А теперь порядок действий при установке ffmpeg на Denwer :

  • Создать папку ffmpeg в директории /usr/bin .
  • Скопировать в созданную папку следующие файлы: ffmpeg.exe , SDL.dll , pthreadGC2.dll .
  • Скопировать библиотеку php_ffmpeg.dll в директорию /usr/local/php5/ext .
  • Все остальные файлы скопировать в директорию WINDOWS/system32 .
  • Открыть файл /usr/local/php5/php.ini .
  • Найти строку: "extension=php_bz2.dll ".
  • Сразу за найденной строкой добавить строку: "extension=php_ffmpeg.dll ".
  • Сохранить и закрыть php.ini .
  • Перезапустить сервер.

Всё! Установка ffmpeg на Denwer завершена! Однако, необходимо убедиться в этом. Для этого напишите такой скрипт:

if (extension_loaded("ffmpeg")) echo "Всё работает!";
else echo "Увы, модуль не подключён"; ?>

Запустите этот скрипт, и если вдруг у Вас вывелось "Увы, модуль не подключён ", то внимательно просмотрите: точно ли всё по пунктам Вы сделали. Каждый шаг имеет огромное значение. Также будьте внимательны данная версия ffmpeg работает под PHP5.3 . Не факт, что она запустится под другой версией PHP .

FFmpeg - это набор библиотек для обработки видео и аудио файлов. FFmpeg сконвертирует mov в mp4, наложит водяной знак, склеит несколько видео файлов в один, поменяет разрешение, перекодирует потоковое видео, создаст поток сам. FFmpeg полезен для тех, кто профессионально работает с видео, разрабатывает медиа приложения или просто обрабатывает домашние записи.

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

Сегодня мы пройдем путь от получения информации о файле до применения нескольких фильтров одновременно, решая задачи, с которыми часто сталкиваешься при работе с видео. Установим ffmpeg и вперед!

Получаем информацию о файле

ffmpeg -i file.mp4

Тут все просто, вводим путь к файлу, получаем информацию о нем: кодеки, количество дорожек, разрешение, битрейт и фреймрейт. Мы указываем пути к файлам флагом -i (input):

I file1.mp4 -i file2.mp4 .

Конвертируем в mp4

Допустим у нас есть сайт, на котором видео проигрывалось через Flash плеер. Мы хотим поменять его на HTML5 Video. Для этого конвертируем видео файлы на сервере из flv формата в mp4.

  • output.mp4 - путь к сконвертированному файлу.
  • -vcodec libx264 - указываем какой видео кодек хотим получить. В нашем случае это H264, который поддерживается большинством браузеров .
  • -acodec libvo_aacenc - аудио кодек AAC .

Список поддерживаемых вашим 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 нужен для перезаписи файла, если он уже существует.

Вырезаем фрагмент видео

ffmpeg -ss 10 -t 20 -i source_video.mp4 -vcodec copy -acodec copy result.mp4

Флагом -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 . Этот фильтр может сохранять пропорции и вычислять разрешение динамически .

Объединение фильтров. Ускоряем воспроизведение

ffmpeg -i source_video.mp4 \ -filter_complex "setpts=0.5*PTS;atempo=2.0" accelerated.mp4

Мы объединили несколько фильтров в один флагом 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

Твитнуть




Close