Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Ffmpeg как склеить файлы


Понимаем FFmpeg

Арсений Васильев, 20 Марта 2016

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.

ffmpeg -i flashvideo.flv -vcodec libx264 -acodec libvo_aacenc output.mp4 

По сравнению с предыдущей командой добавилось три поля.

  • output.mp4 — путь к сконвертированному файлу.
  • -vcodec libx264 — указываем какой видео кодек хотим получить. В нашем случае это h364, который поддерживается большинством браузеров.
  • -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 "[0:v]setpts=0.5*PTS;[0:a]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 и применив оба фильтра, мы ускорили файл целиком.

Граф фильтров применяет последовательность из нескольких фильтров к исходному файлу. Мы указали ускорение setpts для видео дорожки [0:v] и atempo для аудио [0:a]. С помощью комбинаций фильтров мы можем решить большинство задач по редактированию видео.

Склеиваем файлы в один

ffmpeg -i input1.mp4 -i input2.mp4 \ -filter_complex "[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]" \ -map "[v]" -map "[a]" -y output.mp4 

Мы видим новый флаг map. Он указывает ffmpeg какие дорожки хотим получить в итоговом файле. Если в наших исходных видео файлах гарантировано одна видео и аудио дорожка, и столько же мы хотим получить на выходе, то флаг map не нужен. Другие примеры использования Map можно посмотреть на сайте ffmpeg.

Выполним ту же операцию другим методом:

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 "[0:0] [0:1] [1:0] [1:1] 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 — мощный инструмент для работы с видео. Решение других задач с его помощью можно посмотреть в статье 19 команд ffmpeg для всех нужд.

Как склеить несколько видео с помощью ffmpeg без потери качества? — Хабр Q&A

Я хочу сделать видео из картинок, потом склеить с ним еще несколько видео записей.
Код для создания слайдшоу:
# для каждой картинки создаем видео # длительность всего слайдшоу равна dur dur = 12 for num, pic in enumerate(os.listdir(path)): os.system('ffmpeg -loop 1 -i %s -r %s -vf scale=%s:%s -t %s -y %s.ts' % (path+pic, fps, w,h, dur/len(os.listdir(path)), num)) # соединяем временные файлы со слайдами в один slides = [i for i in os.listdir('.')] command = 'ffmpeg -i concat:"' + '|'.join(slides) + '" -vf scale={}:{} -framerate {} -y '.format(w,h,fps) + 'slideshow.mp4' os.system(command)

После этого склеиваю с остальными видео:

videos = ['vids/begin.mp4', 'slideshow.mp4', 'vids.mp4'] command = 'ffmpeg -i concat:"' + '|'.join(videos) + '" -vf scale={}:{} -framerate {} -y '.format(w,h,fps) + 'result.mp4' os.system(command)

Файл slideshow.mp4 получается в хорошем качестве, begin.mp4 и end.mp4 - тоже в хорошем качестве, а вот конечный файл result.mp4 в плохом. В чем причина и как склеить видео без потери качества?

ffmpeg видео

Содержание статьи:

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

ffmpeg -ss 01:10:35 -i video.mp4 -c copy -t 00:15:10 output.mp4

Эта команда вырежет отрезок из video.mp4 начиная с 01:10:35 длительностью 15 минут 10 секунд и сохранит его в файл output.mp4

Нарезать видео на ролики одинаковой длины

ffmpeg -i video.mp4 -c copy -map 0 -segment_time 15 -reset_timestamps 1 -f segment output_%05d.mp4

Нарезаем video.mp4 на ролики длительностью 15 секунд.

Склеить видео

ffmpeg -i video1.mov -i video2.webm -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mkv

Объединяем два видео разных форматов с перекодировкой - это процесс небыстрый.

ffmpeg -i video1.mov -i video2.mp4 -i video3.webm -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4

Объединяем три видео разных форматов с перекодировкой. Далее по аналогии.

Если у наших видео одинаковый формат, то можно сильно ускорить процесс и не потерять в качестве - объединить видео без перекодирования.
Если у нас видео в формате mp4 или в чем-то похожем, то для начала предварительно преобразуем видео в формат .ts

ffmpeg -i video1.mp4 -c copy -bsf:v h364_mp4toannexb -f mpegts tmp1.ts
ffmpeg -i video2.mp4 -c copy -bsf:v h364_mp4toannexb -f mpegts tmp2.ts

И затем склеиваем эти видео без перекодировки

ffmpeg -i "concat:tmp1.ts|tmp2.ts" -vcodec copy -acodec copy output.mp4


Если у нас видео в форматах .m2ts или .mts, то сначала их необходимо перевести в формат .mkv

ffmpeg -i video1.mts -acodec copy -vcodec copy -sn video1.mkv
ffmpeg -i video2.mts -acodec copy -vcodec copy -sn video2.mkv

И затем склеить без перекодировки

mkvmerge -o output.mkv video1.mkv + video2.mkv


Если хотим вставить другую аудиодорожку, то сначала убираем прежнюю,

ffmpeg -i video.mp4 -c copy -an deaf.mp4

обрезаем новую аудиодорожку до длины ролика,

ffmpeg -i long-sound.mp3 -ss 00:00:00 -t 00:05:13 -acodec copy sound.mp3

добавляем к видео звук

ffmpeg -i deaf.mp4 -i sound.mp3 -vcodec copy output.mp4

Захват видео

Запись в видео файл того, что происходит на рабочем столе

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 output.mp4

где 1024x768 - размер записываемой области,
25 - количество кадров в секунду,
100,200 - отступ в пикселях от левого верхнего угла экрана.
Для окончания записи видео переходим в окно терминала и нажимаем Ctrl+C

Видео из картинок

Кладем необходимое количество изображений в директорию и называем их image001.png, image002.png, image003.png и т.д., затем выполняем команду

ffmpeg -framerate 1/5 -i image%03d.png -c:v libx264 -r 25 -pix_fmt yuv420p output.mp4

где -framerate 1/5 время в секундах, которое будет показываться каждая картинка,
-r 25 - количество кадров в секунду в получившемся видео.
Разрешение видео будет равно разрешению первого изображения в серии.
Если видео надо создать из картинок в формате .jpg, а не .png, то в директорию кладем image001.jpg и т.д. и в команде image%03d.png меняем на image%03d.jpg
Если необходимо видео более чем из 999 картинок, то необходимо называть изображения image0001.png и т.д. и в команде image%03d.png заменить на image%04d.png

Видео с плавным переходом из image001.png в image002.png

ffmpeg -loop 1 -i image001.png -loop 1 -i image002.png -filter_complex "[0:0]format=rgba,trim=duration=10,fade=in:st=0:d=1:alpha=1,fade=out:st=4:d=1:alpha=1[a];[1:0]format=rgba,trim=duration=10,fade=in:st=5:d=1:alpha=1,fade=out:st=9:d=1:alpha=1[b];[a][b]overlay=[out1]" -map [out1] -qscale 25 output.mp4


Видео из одного изображения длительностью 10 секунд

ffmpeg -loop 1 -i image0001.png -c:v libx264 -t 10 -pix_fmt yuv420p output.mp4

Пережать webm в mp4

ffmpeg -i video.webm video.mp4


То же самое, но используя пресеты: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower and veryslow.

ffmpeg -i video.webm -preset veryfast video.mp4

Где ultrafast самое быстрое и наименее качественное сжатие, а veryslow - наоборот. Как показывает практика, разницы в качестве видео между slow и veryslow практически нет, а разница во времени сжатия очень ощутимая.

То же самое, но с указанием crf

ffmpeg -i video.webm -crf 26 video.mp4

Значение crf может находиться в диапазоне от 0 до 51, где 51 - самое плохой качество видео. Если crf не указывать явно, то его значение будет равно 23.


Пережать mp4 в webm

ffmpeg -i video.mp4 -b:v 6203.788829380261k -crf 40 -aq-mode 1 -threads 4 -f webm output.webm

Где -threads 4 указывает, что процесс сжатия надо проводить в 4 потока. Количество потоков лучше устанавливать равным количеству физических ядер вашего процессора.

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

ffmpeg -i video.mp4 -vf crop=1280:720 -b:v 3000K output.mp4

Обрезаем до размера 1280x720 пикселей и сжимаем с битрейтом 3000 килобайт в секунду.

Повернуть видео

Повернуть видео можно двумя способами. Первый способ - изменение метаданных видео (перекодировки не происходит), но плейер должен поддерживать этот способ.

ffmpeg -i input.mp4 -metadata:s:v rotate="90" -codec copy output.mp4

Второй способ - с перекодировкой видео - подходит для всех видеоплейеров.

ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

Значения transpose:
0 - на 90 градусов против часовой стрелки и вертикальное отзеркаливание
1 - на 90 градусов по часовой стрелке
2 - на 90 градусов против часовой стрелки
3 - на 90 градусов по часовой стрелке и вертикальное отзеркаливание

Для вращения видео на 180 градусов -vf "transpose=2,transpose=2"

Уменьшить частоту кадров

ffmpeg -y -i video.mp4 -r 25

Где -r 25 указывает, что частота кадров в секунду будет урезана до 25.
Если мы не указываем в конце команды название итогового файла, то будет перезаписан исходный файл.
Ключ -y указывает на то, что существующие файлы надо перезаписывать без подтверждения.

Устранение чересстрочности - "гребенки"

ffmpeg -i video.avi -vf w3fdif -c:v libx264 -preset slow -crf 12 -pix_fmt yuv420p -c:a aac -b:a 320k output.mp4

Где -vf w3fdif указывает алгоритм устранения чересстрочности. Всего существует четыре алгоритма: w3fdif bwdif kerndeint yadif.

Стабилизация видео

ffmpeg -i video.mp4 -vf deshake output.mp4

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

Картинки из видео

ffmpeg -ss 00:00:28 -i video.mp4 -t 10 -q:v 2 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 0 image%03d.jpg

Сохранить из видео все ключевые кадры, начиная с 28-ой секунды и в течение 10 секунд.

Посмотреть информацию о ролике

ffmpeg -i video.mp4

Сжать видео

ffmpeg -i video.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy out.mp4

Воспроизвести видео

ffplay video.mp4

ffmpeg — Как объединить аудио и видео файл в ffmpeg

Объединение видео и аудио с повторным кодированием звука

См. этот пример, взятый из этой записи в блоге но обновляется для нового синтаксиса. Это должно быть чем-то вроде:

ffmpeg -i video.mp4 -i audio.wav \ -c:v copy -c:a aac -strict experimental output.mp4 

Здесь мы предполагаем, что видеофайл еще не содержит никакого аудиопотока и что вы хотите иметь тот же формат вывода (здесь, MP4) в качестве формата ввода.

Вышеупомянутая команда перекодирует аудио, поскольку MP4 не могут передавать аудиопотоки PCM. Вы можете использовать любой другой желаемый аудиокодек, если хотите. Подробнее см. Руководство по кодированию AAC .

Если ваш аудио- или видеопоток длиннее, вы можете добавить параметр -shortest, чтобы ffmpeg остановил кодировку после завершения одного файла.

Копирование аудио без повторного кодирования

Если ваш выходной контейнер может обрабатывать (почти) любой кодек, например MKV, то вы можете просто скопировать как аудио, так и видеопотоки:

ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv 

Замена аудиопотока

Если ваше входное видео уже содержит аудио, и вы хотите его заменить, вам нужно сообщить ffmpeg, какой аудиопоток взять:

ffmpeg -i video.mp4 -i audio.wav \ -c:v copy -c:a aac -strict experimental \ -map 0:v:0 -map 1:a:0 output.mp4 

Параметр map делает только ffmpeg использовать первый видеопоток с первого входа и первый аудиопоток со второго входа для выходного файла.

Как правильно склеить видео в ffmpeg? — Хабр Q&A

Добрый день, встала задача склеить несколько видео в одно (количество видео всегда разное (т.е. возможно 1, возможно 2, возможно n), собственно нагуглил такой вот пример:
ffmpeg -i new_1.mp4 -i new_2.mp4 -i new_3.mp4 -i new_4.mp4 -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v output.mp4

в данном примере идет склейка 4-х видео, но не совсем понимаю, возможно ли вместо upperright - писать позицию видео?

пример. положим что канва на которой работает будет 1280 на 768 и у нас есть 6 видео(все видео одинакового размера, но имеют разную продолжительность, положим что размер одного видео 1024 на 768). Пробуем разместить их в две строки, по три видео на строку. получаем следующие размеры для видео:
ширина: 1280/3 = 426 пикселей
высота: 768 / 2 = 384, где 2 - количество строк

собственно вопросы:
1) могу ли я задавать позицию видео не так [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];
а вот так например:
[0:v] setpts=PTS-STARTPTS, scale=426x384 [0,384];
[1:v] setpts=PTS-STARTPTS, scale=426x384 [426,384];

или как-то по другому? как правильно сделать сетку в ffmpeg?

2) в случае с видео, которые разные по времени, по истечению самого короткого видео картинка дальше тормозиться, но звуковая дорожка идет, как решить данные вопрос? подогнать короткое видео по таймингу к самому длинному? тогда как это делается? нечто вроде заполняем 4-ми кадрами остаток?

спасибо за помощь.

Как пользоваться ffmpeg | Losst

Если вы часто работаете с видео в операционной системе 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: объединение / объединение нескольких видео mp4 не работает, вывод содержит только первое видео

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
.

FFMPEG: вырезать определенные части видео и объединить их в один файл

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант
.

Как слить видео по avconv?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

c ++ - Как объединить список видео с указанием порядка кадров с помощью ffmpeg?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Смотрите также