Если вы часто работаете с видео в операционной системе Linux, то наверное, слышали об утилите и наборе библиотек ffmpeg. Это мощная кроссплатформенная библиотека, которая позволяет делать почти любые действия с видео. Вы можете склеивать, кодировать, изменять, обрезать видео, но все это через терминал.
На первый взгляд, может показаться что это очень сложно. В какой-то мере это действительно так. Но у вас открываются широчайшие возможности настройки и очень большая гибкость. Графические инструменты часто сбоят, они могут не поддерживать тот или иной формат. Библиотека ffmpeg поддерживает все существующие форматы и работает практически всегда.
Она может вас спасти, когда другие программы зайдут в тупик. В этой статье мы рассмотрим полезные команды ffmpeg, которые пригодятся вам в повседневной работе с видео. В этой статье мы разберемся как пользоваться ffmpeg для обработки видео.
Содержание статьи
Что такое ffmpeg?
ffmpeg - это один из лучших мультимедийных фреймворков, который содержит различные инструменты, для решения разных задач. Например, ffplay - портативный медиа плеер, утилита ffmpeg может использоваться для обработки и инвертирования файлов, ffserver - для потоковой передачи данных, а ffprobe может анализировать мультимедийный поток.
В набор ffmpeg, кроме утилит, входят такие библиотеки: libavutil libavcodec libavformat libavdevice libavfilter libavresample libswscale libswresample libpostproc. Из-за своей архитектуры, этот набор инструментов очень безопасный, и с помощью него вы можете сделать почти все что угодно с видео или аудио. В этой статье мы будем рассматривать в основном утилиту ffmpeg. Давайте рассмотрим ее синтаксис:
$ ffmpeg [опции источника] -i [источник] [основные опции] [кодеки] [преемник]
- Опции источника - указывают параметры чтения файла, настройки и так далее;
- Источник - опция -i задает источник, откуда будет читаться файл, источников может быть несколько и это может быть не только файл, но и устройство;
- Основные опции - задают параметры работы всей утилиты;
- Кодеки - кодек, который будет использоваться для сохранения видео и аудио;
- Преемник - файл или устройство, куда будут записаны данные.
Сейчас мы не будем подробно рассматривать опции, рассмотрим их потом, уже в самих командах.
Как пользоваться ffmpeg
Как я уже сказал, утилита ffmpeg поддерживает большинство аудио и видео форматов. Чтобы проверить какие форматы поддерживаются вы можете выполнить:
ffmpeg -formats
Если вы новичок в использовании этого инструмента, то вот некоторые команды, которые могут вам очень сильно помочь. Дальше вы узнаете как пользоваться 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. Но вы можете найти еще больше команд и еще больше возможностей просмотрев официальную документацию утилиты. Если вы знаете другие очень интересные и полезные команды ffmpeg, напишите в комментариях!
На десерт видео по теме, что такое видеокодеки, кодеры, а также описание основных форматов видео:
Как можно с помощью ffmpeg конвертировать видео в формат apple prores?
https://noteskeeper.ru/590/
Сделайте пожалуйста подобный гайд для работы с PDF, может обзор консольных утилит для работы с PDF.
Уже есть, используйте поиск.
Подкажите, как писать через vaapi с pulseaudio?
Вот что наколдовал, но звука нет.
ffmpeg -vaapi_device /dev/dri/renderD128 -f x11grab -video_size 1920x1080 -i $DISPLAY -r 59 -f pulse -ac 2 -i default
-f alsa -i default
-vf 'format=nv12,hwupload' -map 0:0 -threads 4 -aspect 16:9
-y -vcodec h264_vaapi -c:a flac test.mkv
лишнее приписал
-f alsa -i default
Удалось сделать звук, после прочтения как работать с -map
ffmpeg
-vaapi_device /dev/dri/renderD128
-hwaccel vaapi
-hwaccel_output_format vaapi
-f x11grab -video_size 1920x1080 -i $DISPLAY
-f pulse -ac 2 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
-vf 'format=nv12|vaapi,hwupload' -map 0:0 -map 1:0 -threads 4 -aspect 16:9
-y
-c:v h264_vaapi
-c:a libmp3lame
-r 60
test.mp4
Спасибо за хороший обзор.
Добавьте пожалуйста, что concat работает не для всех контейнеров. Например, mp4 склеить таким образом не удастся, приходится перекодировать в avi с параметром -qscale 0 чтобы не потерять в качестве, склеивать avi и склеенное возвращать в mp4 с тем же параметром.
И может быть кому-то интересно, что с помощью ffmpeg можно поворачивать и отзеркаливать видео (бывает нужно, если снимаешь видео на телефон):
ffmpeg -i file.avi -vf transpose=1 file1.avi
Опции transpose:
0 — против часовой стрелки на 90° и зеркально;
1 — по часовой стрелке на 90°;
2 — против часовой стрелки на 90°;
3 — по часовой стрелке на 90° и зеркально
Также ffmpeg имеет фильтр реверса.
Для видео без звука:
ffmpeg -i video.mp4 -vf reverse reversed.mp4
Для видео со звуком:
ffmpeg -i video.mp4 -vf reverse -af areverse reversed.mp4
Фильтр очень тяжёлый и энерго-памятнозатратный, поэтому длинные ролики желательно разделить на фрагменты, а потом склеить.
Попробуйте ввести ради прикола: ffmpeg -h full
Вариант 17. Добавить субтитры к видео, это только для 1 изображения, или так можно добавить 5, или 10, и прокручивать их в определенном интервале ? Или лучше для этого использовать другой алгоритм ?