FFmpeg

от
Soft   ffmpeg, ffplay, ffprobe, video

FFmpeg — набор библиотек и программа для конвертирования медиаформатов, а также записи и стриминга аудио и видео.

FFmpeg может помочь как в различных повседневных операциях, как то обрезка видео, получение аудио из видео, конвертирование из avi в mp4, так и в ситуациях посложнее, например, стабилизация видео, кеинг, наложение изображения или другого видео в углу текущего, добавление эффектов и многое многое другое.
Также есть ffplay — плеер, позволяющий "на лету" применить эффект при воспроизведении, и ffprobe — программа для получения детальной информации о формате, пригодится разработчикам.

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


Установка
На официальном сайте, в разделе Download есть инструкция по установке. Для Windows нужно скачать архив и распаковать его в любую удобную папку.
Я рекомендую либо распаковать в Windows/System32, либо в другую папку и затем добавить её в переменную PATH. Это нужно для того, чтобы в командной строке был доступ к программе из любого места.


Основная команда для конвертирования
Основная команда для конвертирования выглядит так:
  1. ffmpeg -i входной_файл результирующий_файл
Ключ -i служит для указания входного файла. В самом конце указывается результирующий.

ffmpeg понимает форматы по расширению. Если нужно сконвертироть avi в mp4, то команда будет выглядеть так:
  1. ffmpeg -i input.avi result.mp4
Конвертировать можно и музыку:
  1. ffmpeg -i input.wav result.mp3
И изображения:
  1. ffmpeg -i input.png result.jpg
  2. ffmpeg -i input.mp4 result.gif
Последние версие ffmpeg даже поддерживают конвертирование psd и рендер svg файлов.
  1. ffmpeg -i input.psd result.png
  2. ffmpeg -i input.svg result.png

О том, как сконвертировать видео в полноцветную gif-анимацию без дизеринга, смотрите тут.


Изменение параметров видео
Убрать аудио: -an
Убрать видео: -vn
  1. ffmpeg -i input.mkv -an result.mp4
  2. ffmpeg -i input.mkv -vn result.mp3
Сохранить оригинальные кодеки: -c copy, -c:v copy - сохранить только видеокодеки, -c:a copy - сохранить только аудиокодеки.
  1. ffmpeg -i input.mkv -c:v copy result.mp4
  2. ffmpeg -i input.mkv -c:a copy result.mp4
Изменить битрейт аудио: -b:a
Изменить битрейт видео: -b:v
  1. ffmpeg -i input.mkv -vn -b:a 320k result.mp3
  2. ffmpeg -i input.flac -b:a 128k result.mp3
  3. ffmpeg -i input.mkv -b:v 16M result.mp4
  4. ffmpeg -i input.mkv -b:v 16M -b:a 192k result.mp4
Изменить количество кадров в секунду: -r
  1. ffmpeg -i input.mp4 -r 25 result.mp4
Изменить разрешение (размер) видео: -s
  1. ffmpeg -i input.mp4 -s 1280x720 result.mp4


Обрезка по времени
С помощью ffmpeg можно обрезать часть аудио или видео. Делается это при помощи ключей
  -t — для указания длительности полученного результата
  -ss — для указания начальной позиции, откуда будет вырезана часть
  -sseof — для указания позиции с конца.
Параметры -ss и -sseof следует указывать до входного файла.
Получить первые 40 секунд видео:
  1. ffmpeg -i input.mp4 -t 40 result.mp4
Пропустить первые 15 секунд и взять остальное:
  1. ffmpeg -ss 12 -i input.mp4 result.mp4
Вырезать видео, начиная с 3 часов 22 минут 28 секунд:
  1. ffmpeg -ss 03:22:28 -i input.mp4 result.mp4
Вырезать 10 минут аудио, начиная с 42 минуты:
  1. ffmpeg -ss 00:42:00 -i input.mp3 -t 10*60 result.mp3
Получить последние 30 секунд видео:
  1. ffmpeg -sseof 30 -i input.mp4 result.mp4


Обрезка части видео или изображения
Для обрезки применяется фильтр crop: -vf crop=ширина:высота:x:y
Также могут помочь константы:
  in_w - ширина исходного видео
  in_h - высота исходного видео

Вырезать верхний левый угол видео, размером 800x450:
  1. ffmpeg -i input.mp4 -vf crop=800:450:0:0 result.mp4
  2. ffmpeg -i input.mp4 -vf crop=800:450 result.mp4
Нижний правый угол:
  1. ffmpeg -i input.mp4 -vf crop=800:450:in_w-800:in_h-450 result.mp4
Центр:
  1. ffmpeg -i input.mp4 -vf crop=800:450:in_w/2-400:in_h/2-225 result.mp4


Ускорить или замедлить видео
Для это используется фильтр setpts: -vf setpts=коэффициент_скорости*PTS
Если коэффициент скорости больше единицы, то видео замедлится, если меньше — ускорится.

Ускорить видео в 4 раза:
  1. ffmpeg -i input.mp4 -an -vf setpts=0.5*PTS result.mp4
Ускорить видео в 20 раз:
  1. ffmpeg -i input.mp4 -an -vf setpts=1/20*PTS result.mp4
Замедлить видео в 5 раз:
  1. ffmpeg -i input.mp4 -an -vf setpts=5*PTS result.mp4


Поворот и отражение
Бывают случаи, когда видео, допустим, 1280x720 снято повёрнутым на 90 градусов. Чтобы его повернуть и получить при этом видео 720x1280 используется фильтр transpose.
  -vf transpose=0 - поворот на 90 градусов против часовой стрелки и отражение видео
  -vf transpose=1 - поворот на 90 градусов по часовой стрелке
  -vf transpose=2 - поворот на 90 градусов против часовой стрелке
  -vf transpose=3 - поворот на 90 градусов по часовой стрелке и отражение видео
  1. ffmpeg -i input.mp4 -vf transpose=0 result.mp4

Если же нужно просто повернуть содержимое видео, оставив при этом разрешение 1280x720, то следует использовать фильтр rotate: -vf rotate=угол_в_радианах или -vf rotate=угол_в_градусах*PI/180
С его помощью можно поворачивать содержимое на произвольный угол.
Повернуть видео на 45 градусов по часовой стрелке:
  1. ffmpeg -i input.mp4 -vf rotate=45*PI/180 result.mp4
Повернуть видео на 30 градусов против часовой стрелке:
  1. ffmpeg -i input.mp4 -vf rotate=-30*PI/180 result.mp4

Для того, чтобы отразить видео по-горизонтали или по-вертикали, используются фильтры -vf hflip и -vf vflip соответственно.
Можно применить сразу оба:
  1. ffmpeg -i input.mp4 -vf hflip,vflip result.mp4


Встраивание субтитров (hardsub)
Если есть внешний файл субтитров (srt, ass), то можно воспользоваться фильтром -vf subtitles=file.srt для встраивания их непосредственно в видео, либо фильтром ass=file.ass для встраивания субтитров в формате SSA/ASS.

  1. ffmpeg -i input.mp4 -vf subtitles=1.srt result.mp4
  2. ffmpeg -i input.mp4 -vf ass=dat.ass result.mp4


Наложение логотипа
FFmpeg позволяет наложить на исходное видео изображение или другое видео. Для этого используется фильтр overlay=x:y
Однако, его нужно применять, используя два потока видео и ключ -filter_complex:
  1. ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=0:0" result.mp4

Доступны константы:
  main_w - ширина исходного видео
  main_h - высота исходного видео
  overlay_w - ширина накладываемого видео или изображения
  overlay_h - высота накладываемого видео или изображения

Поместить логотип logo.png в нижний правый угол видео, отступив 20 пикселей снизу и справа:
  1. ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-20:main_h-overlay_h-20" result.mp4


Стабилизация видео
В ffmpeg есть простой стабилизацтор видео, фильтр deshake
  1. ffmpeg -i input.mp4 -vf deshake result.mp4

Есть параметр edge с четырьмя параметрами, влияющими на способ обработки границ:
  0 или blank — очищает всё, что за краями
  1 или original — помещает оригинальное видео под стабилизированное
  2 или clamp — расширяет края
  3 или mirror — отзеркаливает края (используется по умолчанию)

  1. ffmpeg -i input.mp4 -vf deshake=edge=0 result.mp4
  2. ffmpeg -i input.mp4 -vf deshake=edge=original result.mp4


ffplay
Вместе с ffmpeg поставляется и плеер ffplay. Чтобы каждый раз не преобразовывать видео, подбирая параметры для фильтра, можно сразу задать их в ffplay:
  1. ffplay -i input.mp4 -vf deshake=edge=0

Воспроизводить можно не только видео, но и аудио, анимации и статичные изображения. Также можно воспроизводить файлы из интернета или из потокового вещания.


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

ffprobe поддерживает форматы xml,csv,json, которые можно указать при помощи ключа -print_format или -of

Чтобы убрать из вывода всё лишнее, можно воспользоваться ключом -v, указав ему параметр error или quiet.

  1. ffprobe video.mp4 -v error -show_format
  1. [FORMAT]
  2. filename=video.mp4
  3. nb_streams=2
  4. nb_programs=0
  5. format_name=mov,mp4,m4a,3gp,3g2,mj2
  6. format_long_name=QuickTime / MOV
  7. start_time=0.000000
  8. duration=114.312000
  9. size=11582762
  10. bit_rate=810606
  11. probe_score=100
  12. TAG:major_brand=isom
  13. TAG:minor_version=512
  14. TAG:compatible_brands=isomiso2avc1mp41
  15. TAG:encoder=Lavf56.40.101
  16. [/FORMAT]

  1. ffprobe video.mp4 -v error -show_streams -print_format json
Вывод

  1. ffprobe -v error -show_format -show_streams -of json result.wav
Вывод

Пример скрипта, который использует ffprobe, можно посмотреть здесь.
+4   4   0
147

  © aNNiMON (Melnik Software)
Онлайн: 25 (2/23)
 
Яндекс.Метрика