Ffmpeg команды для windows

Время на прочтение3 мин

Количество просмотров581K

От переводчика:
Многие знают, что ffmpeg — это сила, но не все знают, какая именно. Он многогранен и безграничен, а его man объёмен и местами малопонятен, лишь немногие постигли дао профессиональной работы с ним. И тем не менее, этот инструмент может быть полезен почти всем, кто хоть иногда работает с видео и звуком, даже на бытовом уровне. О некоторых полезных консольных командах ffmpeg и пойдёт речь в статье. В некоторых местах я взял на себя смелость вставить ссылки на поясняющие статьи.

ffmpeg — это кроссплатформенная open-source библиотека для обработки видео- и аудиофайлов. Я собрал 19 полезных и удивительных команд, покрывающих почти все нужды: конвертация видео, извлечение звуковой дорожки, конвертирование для iPod или PSP, и многое другое.

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

Пояснения:

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

6. Извлечь звуковую дорожку из видео и сохранить в mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192K -f mp3 sound.mp3

Пояснения:

  • Источник: source_video.avi
  • Битрейт аудио: 192kb/s
  • Выходной формат: mp3
  • Полученный аудиофайл: sound.mp3

7. Конвертировать wav в mp3

ffmpeg -i son_origine.wav -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

8. Конвертировать .avi в .mpg

ffmpeg -i video_origine.avi video_finale.mpg

9. Конвертировать .mpg в .avi

ffmpeg -i video_origine.mpg video_finale.avi

10. Конвертировать .avi в .gif (без сжатия)

ffmpeg -i video_origine.avi gif_anime.gif

11. Добавить звук к видео

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12. Конвертировать .avi в .flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

13. Конвертировать .avi в .dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

или

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14. Конвертировать .avi в mpeg для DVD-плееров

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

Пояснения:

  • Выходной формат: pal-dvd
  • Максимальный размер для выходного файла: 2000000000 (2 Gb)
  • Широкоэкранный формат: 16:9

15. Сжать .avi в DivX

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

16. Сжать OGG Theora в mpeg DVD

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_termin.mpg

17. Сжать .avi в SVCD mpeg2

Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

Формат PAL:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

18. Сжать .avi в VCD mpeg2

Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

Формат PAL:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

19. Многопроходное кодирование с помощью ffmpeg

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

Примечание переводчика:
Предлагаю в комментариях привести и другие полезные команды ffmpeg, их ведь гораздо больше, чем 19. ;)

Базовые команды для FFmpeg

Ярослав Семёнов

Итак, после установки ffmpeg (инструкция для win, mac) можно творить магию в командной строке) Минимальным набором инструкций будет:

ffmpeg -i <source.mov> <final.mp4>

Эта команда сконвертирует source.mov в final.mp4 (mov и mp4 я указал для примера). Исходный файл может быть практически любого формата, ffmpeg понимает почти всё, что придумало человечество, кроме raw форматов.

-i <source.mov> — «-i» говорит ffmpeg-у, что сейчас будет исходный файл, вместо <source.mov> — должен быть полный путь до вашего файла (можно просто перетащить файл в окно терминала).

Обратите внимание! Скобочки <> ставить не надо! Команда должна выглядеть примерно так, только с вашими путями:

ffmpeg -i D:\Source\source.mov D:\Source\final.mp4

<final.mp4> — соответственно, полный путь до конечного файла. Можно опять же перетащить исходный файл, чтобы подставился нужный путь, и чутка его подредактировать.

По умолчанию при выборе финального контейнера mov или mp4 ffmpeg сконвертирует файл в кодек H.264, сохранив размер кадра, fps, и цветовую субдискретизацию.

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

1. Перепаковка

ffmpeg -i <source.mkv> -c copy <final.mov>

Одна из самых важных и полезных фишек ffmpeg — это возможность быстро перепаковать файл из одного контейнера в другой. Например, вам внезапно принесли фильм в формате mkv со словами «вот тут очень подходящий момент есть, надо его вставить». А монтажка ну ни в какую mkv импортировать не хочет, хотя внутри — тот же самый H.264. Поэтому можно просто перепаковать аудио и видео потоки в контейнер mov, который с лёгкостью импортируется в монтажку.

2. Перекодирование в монтажный кодек

ffmpeg -i <source.mp4> -c:v prores -c:a pcm_s16le <final.mov>

Эта команда конвертирует исходник в монтажный кодек ProRes с несжатым аудио. Файлы в монтажном кодеке гораздо меньше нагружают компьютер, и в целом повышают производительность при монтаже.

3. Обрезка

ffmpeg -i <source.mp4> -ss hh:mm:ss.mss -to hh:mm:ss.mss -c copy <cut.mp4>

-ss — точка входа, -to — точка выхода, формат времени часы:минуты:секунды:миллисекунды

В принципе, довольно простой синтаксис, но таки обрезать видео легче с графической оболочкой, да и формат времени используется не самый привычный, и недавно я наткнулся на прекрасную кроссплатформенную оболочку для этого: https://github.com/mifi/lossless-cut

Полезные параметры для кодирования

Следующие флаги можно вставить между <source.mov> и <final.mp4>

1) Качество картинки (для кодирования в H.264)

-crf 20

CRF — это довольно абстрактные цифра отвечает за качество изображения. То есть при кодировании в H.264 энкодер будет самостоятельно выбирать необходимый битрейт, чтобы поддерживать это выбранное качество. Изменяется в пределах от 0 до 51 (для 8-битных файлов). Чем ближе к 0 — тем будет выше качество и выше битрейт, чем ближе к 51, тем ниже битрейт и более шакалистый результат, по умолчанию этот параметр равен 23. При значениях 17-18 результат визуально практически неотличим от оригинала. Значение 35 хорошо подходит для прокси.

2) Совместимость (для кодирования в H.264)

-pix_fmt yuv420p

Этот фильтр полезен для совместимости. Если вы кодируете высококачественный материал в прокси, то по умолчанию ffmpeg постарается сохранить формат цветовой субдискретизации пикселей, но такой формат может быть не совместим с некоторыми плеерами или девайсами. Например QuickTime плеер не поддерживает в файлах H264 других форматов цветовой субдискретизации, кроме как 4:2:0 в цветовом пространстве YUV.

3) Деинтерлейсинг

-vf yadif

Хороший и относительно быстрый фильтр для деинтерлейсинга

4) Масштабирование картинки

-s 1280:720

Обратите внимание, что этот фильтр не сохраняет пропорции картинки, так что следите за этим самостоятельно. Естественно, цифры могут быть не только 1280 и 720)

-vf scale=1280:-1 

Можно воспользоваться этим фильтром, тут есть сохранение пропорций.

В обоих случаях учтите, что не все кодеки поддерживают нечётное количество пикселей по любой из сторон.

5) Поворот картинки

-c copy -metadata:s:v:0 rotate=90

Эта команда повернёт картинку без перекодировки, используя флаг в метадате.

-vf "transpose=2" 

Если вам надо повернуть картинку вместе с перекодировкой, то надо использовать этот фильтр. Цифру в конце можно поменять в зависимости от ваших нужд:

0 = 90 против часовой + отражение 
1 = 90 по часовой 
2 = 90 против часовой 
3 = 90 по часовой + отражение

Если вам необходимо повернуть картинку более, чем на 90 градусов, допишите еще один (или два) transpose через запятую:

-vf "transpose=2,transpose=2" 

6) Оптимизация для WEB

-movflags +faststart

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

7) Спрятать баннер

-hide_banner

Когда долго работаешь с FFmpeg, то текст, который каждый раз выводит ffmpeg в начале кодирования, начинает раздражать) Этой командой его можно скрыть.

Вступайте в наш чат: https://t.me/ru_montage

Информация для тех, кто хотел бы научиться на своём компьютере/ноутбуке редактировать записи вебинаров через специальную программу!

Программа FFMPEG предназначена для конвертирования видео и аудио файлов через специальные команды в командной строке Вашего компьютера/ноутбука, благодаря которым возможно самостоятельно:

1. Изменить формат и качество записи;
2. Изменить разрешение и битрейт для видео и аудио;
3. Нарезать фрагменты записи на отдельные записи;
4. Замедлить и ускорить воспроизведение видео и аудио;
5. Склеить видео и аудио в единый файл;
6. Удалить аудио из видео, а также извлечь аудио из видео.

(Более подробную информацию см. в шаге №5).


С ЧЕГО НАЧАТЬ?

Шаг №1. Скачиваем программу на Windows

Для начала Вам необходимо перейти на официальный сайт разработчиков и скачать файл программы. Ссылка на скачивание программы: https://yadi.sk/d/_ybZxA8VN2pBmQ

Шаг №2. Установка программы

Этот шаг требует особого внимания, так как работа с FFMPEG происходит через командную строку, поэтому разберём по пунктам алгоритм установки FFMPEG:

1. Вы скачали архивный файл и Вам необходимо его открыть;
2. Открываем скачанный архивный файл и находим папку «bin», внутри которой располагается файл-приложение «ffmpeg.exe»;

Примечание! Если у Вас нет архиватора для открытия файла, то можно скачать архиватор WinRar на официальном сайте разработчиков.
Ссылка на скачивание: https://winrar-pro-download.com

pymxzcqr6dy

zgakvfxg9la

3. Извлекаем файл «ffmpeg.exe» в заранее созданную папку «ffmpeg» на корневом диске (как правило, это диск «C»);

fmdibh4iqxe

y81jsa6nx-m

4. Далее заходим в проводник (иконка «лупа») и находим «Мой компьютер». Нажимаем на него правой кнопкой мыши и выбираем «свойства», после чего появится следующее окно:

y8h_zk7bq_m

%d0%b1%d0%b5%d0%b7%d1%8b%d0%bc%d1%8f%d0%bd%d0%bd%d1%8b%d0%b9

5. Нажимаем на «Дополнительные параметры системы» и заходим в «переменные среды»;

6. Находим в окошке «системные примененные» пункт «Path», нажимаем «изменить»;

7. В появившемся окне нажимаем на кнопку «создать» и указываем путь к файлу ffmpeg. Для этого переходим в папку с ffmpeg и кликаем на строчку, выделенную красным (см. на картинке), после чего нажмите сочетание клавиш Ctrl+C;

tsw5ewb0cv0

8. После того, как нажали клавишу «Создать» (1), вставляем скопированное в строку (2) и нажимаем на «Ок» (3).


Шаг №3. Запускаем программу

1) Если вы используете ОС Windows10, то вам достаточно нажать на значок «поиск»(лупа) и ввести английскими буквами «cmd»:

(Прим. Если же Вы используете более ранние версии Windows (7,8), то Вам нужно зайти в меню «пуск» и строка «поиск» будет в самом низу).

2) Далее, заходим в командную строку и проверяем – работает ли программа. Для этого вводим: ffmpeg, после чего нажимаем кнопку Enter. Если Вы всё сделали правильно, у Вас будет примерно следующий отклик в командной строке:

aqd8fvhao8w

(Прим. Если же у Вас появляются строки красного цвета, то вероятно – Вы сделали что-то не так. Попробуйте повторить алгоритм по новой).


Шаг №4. Используемые файлы

Для начала работы с видео-файлом необходимо, чтобы файл находился в директории доступных дисков. Например: имеется видео-файл «Testovii File.mp4». Я расположил его прямо на диск D.

adewyi-9jq

Таким же образом разместите остальные файлы, с которыми вы собираетесь работать в ffmpeg.

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

(Прим. Рекомендуется использовать английские буквы в названии файлов, с которыми собираетесь работать)

Теперь с файлами можно работать.

Запускаем командную строку. Как правило, по умолчанию в командной строке указан путь к корневой папке, например:

mtnqxyasbxi

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

После чего нажимаем Enter и видим, что теперь у нас отображается Диск D:

5ru6wyjoyvu

0c4bdd1ycay

Теперь мы можем начать работать с файлами. Любая команда начинается со слова ffmpeg в строке:

yfzwtulib1g

Далее будет представлен ряд простых команд, где input.mp4 – название исходного видео-файла; input.mp3 – название исходного аудио-файла; output.format – название полученного файла; а ключ «–i» -это то, что необходимо прописывать перед обрабатываемым файлом (input.mp4/input.mp3).

Шаг №5. Основные команды

1) Для того, чтобы перевести видео в другой видеоформат:

ffmpeg –i Z\input.avi output.mp4

(Прим. – Z\ — путь к файлу input.avi, пример: выбираем нужный файл в папке (1), кликаем на него, затем кликаем на строку с его расположение (2), и копируем правой кнопкой мышки; также следует помнить, что при попытке форматирования из более легкого файла(Mp4) в более тяжелый(avi) – полученный файл будет в более плохом качестве)

2) Для того, чтобы перевести видео в аудио:

ffmpeg –i Z\input.mp4 output.mp3

(Прим. – Если появляется красная строка при нажатии ENTER, то попробуйте поместить input.mp4 в Кавычки – «input.mp4»)

3) Для того, чтобы вырезать фрагмент из видео:

Способ : 1 – обрезать концовку.

ffmpeg -i input.mp4 –t 00:00:00 output.mp4

(Прим. -t 00:00:00 – указывается время продолжительности видео от начала)

Способ : 2 – вырезать кусок из любой точки.

ffmpeg -ss 00:00:00 -i input.mp4 -t 00:00:00 output.mp4

(Прим. –ss 00:00:00 – указывается время начала желаемого куска; -t 00:00:00 – указывается время продолжительности желаемого куска;

Если появляется красная строка, то попробуйте поместить input.mp4 в Кавычки – «input.mp4»)

P.S Применимо как к видео, так и к аудио файлам!

4) Команда для склеивания пустого видео файла и аудио файла:

ffmpeg -i input.mp3 -i input.mp4 output.mp4

(Прим. Если вы используете разные по длительности файлы, то у них вседа будет совпадать начало, а длительность конечного файла будет равна самому длинному исходному файлу, пример:

Аудиофайл.mp3 – длительность 00:05:00 + Видеофайл.mp4 – длительность 00:03:00 = финальный файл.mp4 – длительность 00:05:00)

5) Команда для удаления аудио из видео:

ffmpeg -i input.avi -vcodec copy –an output.avi

6) Команда для ускорения/замедления видео:

ffmpeg –i input.avi -vf setpts=X*PTS output.avi

(Прим. X больше 1 – замедление; X меньше 1 — ускорение)

7) Команда для ускорения/замедления аудио:

Ffmpeg –I input.mp3 -filter:a «atempo=X» –vn output.mp3

(Прим. X значение больше нуля – ускорение; X значение меньше нуля (0.5;0.8) – замедление)

8) Команда для ускорения/замедления файла с аудио и видео:

ffmpeg -i input.mp4 -filter_complex «[0:v]setpts=X*PTS[v];[0:a]atempo=Y[a]» -map «[v]» -map «[a]» output.mp4

(Прим. X больше 1 – замедление; X меньше 1 – ускорение;

Y значение больше нуля – ускорение; Y значение меньше нуля (0.5;0.8) – замедление)

9) Для того, чтобы изменить параметр «качество»:

Для AVI:

ffmpeg -i input.avi -q X output.avi

(Прим. X от 23 до 50, где 50 – минимальное качество; данная опция помогает уменьшить размер файла)

Для Mp4:

ffmpeg -i input.mp4 -crf X output.mp4

(см. Прим. Выше)

10) Для того, чтобы изменить Битрейт:

Для аудио: ffmpeg -i input.mp4 -b:a 128k output.mp4

(Прим. Где 128k– цифра, обозначающая размер битрейта)

Для видео: ffmpeg -i input.mp4″ -b:v 1000k output.mp4

11) Для того, чтобы изменить разрешение видео:

ffmpeg -i input.mp4 -s X output.mp4

(Прим. X – разрешение, например: «-s 800×600»)

Для общего сжатия видео:

13) ffmpeg -i input.mp4 -codec:a copy -vcodec libx264 -preset fast -crf 32 output.mp4

В заключении:

В этой статье были рассмотрены:

— Способ установки ffmpeg для Windows

— Была представлена выжимка из самых распространённых команд, которая позволит использовать программу «ffmpeg» для решения, пусть не самых сложных, но всё-же возникающих задач.

Команды в программе ffmpeg не ограничиваются тем списком, что был представлен в данной статье. Как было сказано выше, в интернете существует более 200 страниц со всевозможными командами, призванными проводить манипуляции с видео\аудио-файлами, которыми, как правило, пользуются продвинутые пользователи.

Мы же предоставили краткий мануал по основным возможностям, и надеемся, что этот материал окажется полезным для наших пользователей!

FFmpeg – продвинутый конвертер видео и аудио файлов. У него нет графического интерфейса, управляется командами из консоли, зато функционал программы и качество итогового материала превосходят другие конвертеры.

Базовые возможности FFmpeg:

  • конвертация файлов (со сжатием или без потерь качества);
  • изменение разрешения;
  • кадрирование;
  • обрезка и склейка файлов;
  • замена, добавление, извлечение аудиодорожек и субтитров;
  • наложение водяного знака;
  • кодирование или стриминг потокового видео.

FFmpeg выручит и там, где не справятся другие программы. Например, при конвертации видео из устаревшего DV в современный HD формат, FFmpeg преобразует чересстрочное (25i) видео в прогрессивное (50p), повысит частоту кадров, увеличит разрешение с 720×576 до 1920×1080 и при этом сохранит оригинальное качество картинки.

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

Подробности о FFmpeg читайте на Wikipedia или ffmpeg.org, а ниже рассмотрим как установить конвертер, основные команды и примеры использования.

FFmpeg распространяется в исходных кодах, но на официальном сайте есть ссылки на собранные бинарники для MaxOS и Windows.

Как установить FFmpeg в Windows

Скачайте сборку FFmpeg для Windows.

Разархивируйте содержимое скачанного архива, например в Program Files/ffmpeg (или в другую папку, например, где у вас хранятся портативные программы).

В PowerShell выполните следующую команду.

c:\"program files"\ffmpeg\bin\ffmpeg.exe -version

Для cmd немного модифицированная команда.

"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -version

Если в консоли появилось сообщение о версии FFmpeg, значит программа работает.

FFmpeg в PowerShell

Чтобы каждый раз не вводить длинный путь к программе C:\Program Files\ffmpeg\bin\ffmpeg.exe рекомендую добавить ее в системную переменную Path, для этого:

  • перейдите в параметры Windows, в поиске введите Панель управления
  • перейдите в Панель управления – Система и безопасность – Система;
  • выберите пункт Дополнительные параметры системы;
  • нажмите кнопку Переменные среды;
  • в поле Системные переменные выберите значение Path и нажмите кнопку Изменить, чтобы добавить новое значение;
  • укажите путь к папке с FFmpeg содержащую ffmpeg.exe;
  • перезагрузите компьютер.
Переменная Path

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

ffmpeg

Как установить FFmpeg в MacOS

Самый простой способ установить FFmpeg на MacOS, это Homebrew.

brew install ffmpeg

Либо можно поставить FFmpeg вручную. Для этого, скачайте сборку FFmpeg для MacOS.

Перейдите в папку с загрузками, распакуйте скачанный архив, а затем переместите исполняемый файл ffmpeg в папку /usr/local/bin

sudo cp /путь/до/ffmpeg /usr/local/bin

Далее введите пароль и FFmpeg будет скопирован в директорию к остальным бинарникам.

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

ffmpeg -version

Если в консоли появилось сообщение о версии FFmpeg, значит программа работает.

Как установить FFmpeg в Linux

Для Linux можно самостоятельно собрать FFmpeg из исходников, либо установить его, используя менеджер пакетов входящий в состав операционной системы.

Например, для Ubuntu это можно сделать через репозиторий mc3man ppa, поддерживаемый сообществом Ubuntu.

sudo apt-get install -y software-properties-common
add apt-repository ppa:mc3man/trusty-media
apt-get update
apt-get dist-upgrade
apt-get install ffmpeg

В Debian 9 FFmpeg доступен в официальном репозитории, поэтому для установки достаточно одной команды.

apt install ffmpeg

CentOS не предоставляет официальный репозиторий для FFmpeg, поэтому, как и в случае с Ubuntu, его можно установить с помощью стороннего репозитория.

yum install epel-release -y
yum update -y

В CentOS 7 и RHEL 7 используйте следующую команду:

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

В CentOS/RHEL 6/5 команда отличается.

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm

Далее установите FFmpeg.

yum install ffmpeg ffmpeg-devel -y

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

ffmpeg -version

Если в консоли появилось сообщение о версии FFmpeg, значит программа работает.

FFmpeg: быстрый старт

После установки FFmpeg можно творить магию преобразования видео в консоли.

ffmpeg -i input.avi output.mp4

Указанная команда сконвертирует видео из файла input.avi в output.mp4. По умолчанию для файлов mov и mp4 используется кодек H.264. Размер кадра и fps будут взяты из исходного файла.

В примере выше параметры по умолчанию могут не обеспечить желаемые качество или результат. Поэтому параметры можно задавать явно. Однако не обязательно указывать все, в этом случае FFmpeg возьмет их из исходного файла (например частоту кадров) или значение используемое по умолчанию.

Ниже перечислены основные параметры FFmpeg:

  • -i имя исходного файла, который предстоит сконвертировать, если файлов несколько перед каждым из них нужно указать -i;
  • -y ответит Да (yes) на все вопросы от FFmpeg, если они возникнут в процессе кодирования, например при для перезаписи файла, если тот уже существует;
  • -vcodec или кратко c:v – параметры видеокодека, либо copy (если перекодирование не требуется), либо пустой параметр (по умолчанию);
  • -f – формат контейнера;
  • -b:v (-vb, -b) – битрейт видео в килобитах или мегабитах в секунду задаётся буквой K или M;
  • -aspect – соотношение сторон картинки (4:3, 16:9, 1.3333, 1.7777);
  • -r – частота кадров;
  • -s – разрешение, поддерживаются как числовые значения (например, 640×480, 1920×1080), так и буквенные обозначения (например, qcif, qvga);
Обозначение размеров:

sqcif – 128 × 96
qqvga – 60 × 120
uxvga – 1600 × 1200
qcif – 176 × 144
qvga – 320 × 240
qxga – 2048 × 1536
cif – 352 × 288
vga – 640 × 480
sxga – 1280 × 1024
4cif – 704 × 576
svga – 800 × 600
qsxga – 2560 × 2048
16cif – 1408 × 1152
xvga – 1024 × 768
hsxga – 5120 × 4096
  • -vf (или -filter:v) — опция со списком фильтров, которые будут применены к видео;
  • -c:a (или -acodec) – параметры аудиокодека, либо copy (если аудио дорожку нужно оставить как есть), либо пустой параметр (по умолчанию);
  • -f – формат аудио;
  • -af (или -filter:a) — опция со списком фильтров, которые будут применены к аудио;
  • -ab (или -b:a) – битрейт аудио;
  • -ar – частота дискредитации;
  • -ac – количество каналов.

Для примера рассмотрим следующую команду.

ffmpeg -y -i input.avi -c:v libx264 -preset medium -b:v 17000K -aspect 16:9 -r 25 -c:a aac -b:a 256K output.mp4

Данная команда перекодирует файл input.avi в output.mp4. В случае если в конечной папке будет содержаться файл output.mp4, он будет перезаписан (опция -y). В качестве кодека будет использован libx264 со среднем соотношением скорость/качество (-preset medium). Конечный битрейт 17000kbps, соотношение сторон картинки 16:9, частота 25 кадров в секунду. В качестве аудиокодека будет использован AAC с битрейтом 256kbps.

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

ffmpeg -i input.mkv -vcodec copy -acodec copy output.mov

или аналогичная (сокращенная запись)

ffmpeg -i input.mkv -c copy output.mov

Это может оказаться полезным, когда устройство, на котором вы хотите воспроизвести видео, не поддерживает исходный формат. Или, например программа видеомонтажа не умеет работать с каким либо форматом и не хочет импортировать его в проект (например Adobe Premiere не работает с mkv, хотя внутри – все тот же H.264). С помощью перепаковки проблема решиться.

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

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

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

ffmpeg -i video.mp4

Каждый раз при запуске ffmpeg, программа показывает информацию о себе. С помощью опции -hide_banner лишнюю информацию можно скрыть.

ffmpeg -i video.mp4 -hide_banner

Чтобы получить информацию о ключах и параметрах FFmpeg.

ffmpeg -help

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

ffmpeg -formats

Список поддерживаемых кодеков.

ffmpeg -codecs

Обрезка видео

ffmpeg -i input.mp4 -ss 00:00:05 -t 00:05:15 -c copy output.mp4

Выше уже был пример с перепаковкой файла, когда исходный поток остается не тронутым. Добавив пару опций, можно без пересжатия и потери качества обрезать или нарезать видео на фрагменты. Опция -ss задаёт начало обрезки, а опция -t продолжительность фрагмента. Время задаётся в формате «часы:минуты:секунды».

Склейка видео

ffmpeg -i "concat:file1.avi|file2.avi" -vcodec copy -acodec copy output.avi

Для склейки используется оператор concat. После двоеточия ему передаются входные файлы, разделённые вертикальной чертой. Соединяемые файлы обязательно должны быть одного формата (видео и аудио), их параметры должны совпадать. Если это не так, то предварительно нужно произвести перекодирование файлов к единому формату.

Файлы mp4 нельзя объединить напрямую с помощью concat, но можно предварительно преобразовать, например, MPEG-TS без перекодирования видео и звука.

ffmpeg -i video1.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts video1.ts
ffmpeg -i video2.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts video2.ts

А уже затем объединить в итоговый файл mp4.

ffmpeg -i "concat:video1.ts|video2.ts" -vcodec copy -acodec copy out.mp4

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

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

file /home/sk/myvideos/part1.mp4
file /home/sk/myvideos/part2.mp4
file /home/sk/myvideos/part3.mp4
file /home/sk/myvideos/part4.mp4

Команда для объединения будет выглядеть следующим образом.

ffmpeg -f concat -i join.txt -c copy output.mp4

Если получите ошибку.

[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4'
join.txt: Operation not permitted

Попробуйте добавить опцию -safe 0.

ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4

Конвертация видео

При конвертации видео контейнер выходного файла определяется его расширением (avi, mkv, mp4, mov и тд). По умолчанию кодек для кодирования, определяется автоматически, в зависимости от выбранного контейнера (например H.264 для mp4 и mkv, MPEG-2 для mpg). Однако вы можете изменить его, исходя из своих требований или стандартов.

Для видео популярные и широко поддерживаемые видеокодеки H.264, H.265, VP9, а самые известные аудио кодеки — это AAC и MP3.

Кодек и его параметры задаются опциями -c:v для видео, и -c:a для аудио. Для некоторых форматов (MPEG и DV) вместо указанных, используется опция -target.

Пример конвертации h.264 в h.265 без изменения аудиодорожки.

ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 -c:a copy output.mp4

Пример использования libx265 для видео и aac для аудио.

ffmpeg -i input.avi -c:v libx265 -c:a aac -b:v 15000k -b:a 320k output.mp4 

Пример использования libx264 для видео и aac для аудио.

ffmpeg -i input.avi -c:v libx264 -c:a aac -b:v 15000k -b:a 320k output.mp4

Пример использования vp9 для видео и mp3 для аудио.

ffmpeg -i input.avi -c:v vp9 -c:a libmp3lame -b:v 7000k -b:a 256k output.mp4

Вслед за кодеком указывается битрейт для видео и аудио потоков (опции -b:v и -b:a). Чем выше битрейт, тем выше качество, однако и больше размер файла.

Вместо битрейта можно указать опцию -crf (кофициент качества).

ffmpeg -i input.avi -c:v libx264 -preset medium -c:a aac -crf 15 output.mp4

Изменяется в пределах от 0 до 51. Чем ниже значение -crf, тем выше качество будет у выходного файла, однако, как и в случае с высоким битрейтом, увеличится его размер. При значениях 14-17 результат визуально почти неотличим от оригинала. Значение -crf равное 0, будет означать кодирование без потери качества.

У каждого кодека могут быть свои специфические параметры. Например, у H.264 и H.265 часто используется опция -preset влияющая на соотношение скорость кодирования/качество. Значения -preset могут быть: ultrafast, superfast, veryfast, faster, fast, medium (по умолчанию), slow, slower, veryslow. Для чернового варианта можно использовать «быстрые настройки» из категории fast, а для продакшена рекомендуется не ниже slow.

Для VP9 кодирование без потери качества задается опцией -lossless 1.

ffmpeg -i input.mp4 -c:v vp9 -lossless 1 output.webm

Подробнее с настройками кодеков H.264, H.265 и VP9 и можно ознакомится в документации.

Аппаратное ускорение

Владельцы видеокарт NVIDIA могут повысить скорость кодирования в H.264 за счет ресурсов GPU. Для этого попробуйте использовать кодек h264_nvenc.

ffmpeg -i input.mp4 -c:v h264_nvenc -c:a copy output.mp4

Сборка FFMpeg должна поддерживать кодек h264_nvenc и быть совместима с драйвером видеокарты.

Двухпроходное кодирование

При двухпроходном кодировании, на первом проходе кодек анализирует видео и пишет log-файл, а на втором сжимает видеозапись, используя полученную на первом проходе информацию. На простые (статические) сцены выделяется минимальное количество битрейта, а на сложные (динамические) — максимальное. Такой подход дает оптимальное распределение битрейта и соответственно лучшее качество картинки в сравнении с однопроходным кодированием.

Чтобы выполнить первый проход используйте следующую команду (с опцией -pass 1).

ffmpeg -y -i input.avi -c:v libx264 -b:v 17000K -pass 1 -f mp4 /dev/null

На первом проходе файл не создается, поэтому вместо него указанно /dev/null (или NULL если работаете в Windows).

На втором проходе (-pass 2), пример команды будет иметь следующий вид.

 ffmpeg -y -i input.avi -c:v libx264 -b:v 17000K -pass 2 -f mp4 -c:a aac -b:a 256K output.mp4

Двухпроходное кодирование удобно выполнять, используя скрипт. Примеры скриптов приведены в конце заметки, в разделе Пакетная обработка FFmpeg.

Конвертация для MPEG-совместимых устройств

Для устройств, работающих с форматом MPEG, параметры выходного файла рекомендуется задавать опцией -target. Значения могут быть следующими: vcd, svcd, pal-vcd, ntsc-svcd и должны иметь префикс pal-, ntsc- или film-. В этом случае битрейт, кодек и размер кадра будут подобраны автоматически в соответствии с указанным стандартом. При необходимости можно указать соотношение сторон экрана (опция -aspect), как правило 16:9 или 4:3.

Пример для DVD плееров.

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

Опция -ps 2000000000 задает здесь максимальный размер конечного файла.

Пример для VCD (pal и ntsc).

ffmpeg -i input.avi -target pal-vcd output.mpg
ffmpeg -i input.avi -target ntsc-vcd output.mpg

Пример для SVCD (pal и ntsc).

ffmpeg -i input.avi -target pal-svcd output.mpg
ffmpeg -i input.avi -target ntsc-svcd output.mpg

Конвертация AVI в DV

Как и в случае с форматом MPEG, параметры для DV файла рекомендуется задавать опцией -target. Значения могут быть следующими: dv, dv50 и должны иметь префикс pal-, ntsc- или film-. В этом случае битрейт, кодек и размер кадра будут подобраны автоматически в соответствии со стандартом.

ffmpeg -i input.avi -target pal-dv output.dv

Однако параметры можно указать и явно.

ffmpeg -i input.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 output.dv

Конвертация в MJPEG

Если при монтаже привыкли использовать формат MJPEG, то следующая команда преобразует в него исходное видео. Опция -qscale 1 означает, что видео будет закодировано с максимальным качеством.

ffmpeg -i input.mp4 -vcodec mjpeg -qscale 1 -an output.avi

Конвертация AVI в DivX

Пример для некогда популярного формата DivX (mpeg4v2). Может пригодиться владельцам старых устройств.

ffmpeg -i input.avi -s 320x240 -vcodec msmpeg4v2 output.avi

Конвертация видео в формат PSP

ffmpeg -i input.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac output.mp4

Изменение разрешения и кадрирование

Чтобы изменить разрешение конечного видео можно воспользоваться опцией -s.

ffmpeg -i input.mp4 -s 1280x720 output.mp4

Однако использование фильтра scale даст более качественный результат.

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

Преобразовать 4K в 1080:

ffmpeg -i input4kvid.mp4 -vf scale=1920:1080 -c:a copy output1080vid.mp4

Для кадрирования изображения предназначен фильтр crop. Его параметры имеют следующий вид crop=w:h:x:y, где w — ширина прямоугольника, который нужно вырезать из исходного видео, h — высота прямоугольника, x и y — x координаты точки начала обрезки.

$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4

Команда выше вырежет из кадра прямоугольник шириной 640 и высотой 480 пикселей, начиная с позиции (200,150).

Но мне привычна, другая запись.

ffmpeg -i input.mp4 -vf crop=in_w-2*2:in_h-2*4 output.mp4

В данном примере видео будет обрезано на 4 пикселя сверху и снизу, а так же на 2 пикселя слева и справа.

Фильтры можно комбинировать.

ffmpeg -i input.mp4 -vf crop=in_w-2*2:in_h-2*4,scale=1280:720 output.mp4

Соотношение сторон

Соотношение сторон устанавливаются опцией -aspect.

ffmpeg -i input.mp4 -aspect 16:9 output.mp4

Еще пример.

ffmpeg -i input.mp4 -aspect 16:9 -vf scale=1280:720 output.mp4

Самые популярные соотношения сторон:

  • 16:9
  • 4:3
  • 16:10
  • 5:4
  • 2:21:1
  • 2:35:1
  • 2:39:1

Деинтерлейсинг

Для деинтерлейсинга в FFmpeg есть фильтр yadif (yet another deinterlacing filter).

ffmpeg -i input.mp4 -vf yadif output.mp4

По умолчанию, фильтр преобразует чересстрочное видео в прогрессивное, создавая полные кадры из соседних полукадров. Дает хороший результат, однако при таком преобразовании частота кадров снижается вдвое. Это заметно при воспроизведении видео, поэтому я предпочитаю способ, описанный ниже.

Преобразование 25i в 50p

Чтобы не терять кадры при деинтерлейсинге и чересстрочное видео осталось таким же плавным как в оригинале, рекомендуется способ, при котором частота кадров удваивается, а недостающие строки в каждом поле восстанавливаются при помощи интерполяции. Видео 25i фактически будет преобразовано в 50p (30i в 60p соответственно).

Для преобразования используется уже знакомый фильтр yadif.

ffmpeg -i input.avi -vf yadif=1:-1:0 -r 50 output.mp4

Параметры 1:-1:0 переданные yadif выполнят деинтерлейсинг по методу описанному выше.

Полностью команда для преобразования чересстрочного широкоэкранного DV видео 25i в прогрессивное HD 50p будет выглядеть следующим образом.

ffmpeg -i input.dv -c:v libx264 -preset slow -b:v 20000K -aspect 16:9 -vf yadif=1:-1:0,crop=in_w-2*0:in_h-2*4,scale=1920:1080 -r 50 -c:a aac -b:a 256K output.mp4

Небольшое пояснение: crop я здесь использую, потому что во многих моих исходниках на DV видео есть артефакт в виде полоски внизу, от которой я избавляюсь, обрезая видео на 4 пикселя снизу и сверху.

Потоки

Для обращения к потокам (видео, аудио, субтитрам) используется опция -map.

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

ffmpeg -i video.mp4

Среди прочей информации о файле будет выдано примерно следующее:

Stream #0:0(und): Video …
Stream #0:1(ger): Audio …
Stream #0:2(eng): Audio …
Stream #0:3(rus): Subtitle …

Потоки обозначаются двойным номером, через двоеточие — 0:0, 0:1, 1:0, 2:1 и т.д. Цифра до двоеточия — номер по порядку каждого выходного файла, нумерация ведется с нуля. А номер после двоеточия обозначает номер потока внутри файла.

В примере выше, 0 перед двоеточием означает, что это первый по порядку файл — video.mp4. А номера после двоеточия означают номера внутренних потоков этого файла. 0:0 — видео дорожка, 0:1 — первая аудиодорожка на немецком языке, 0:2 — вторая аудиодорожка на английском языке, 0:3 — дорожка с русскими субтитрами.

Конвертация аудиодорожек

Если аудиодорожка одна, изменить ее формат (битрейт/качество аудио по желанию), без перекодирования видео можно следующей командой:

ffmpeg -i input.mkv -c:v copy -c:a ac3 -b:a 320k output.mkv

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

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v:0 copy -c:a:0 copy -c:a:1 copy -c:a:2 ac3 -b:a 320k output.mkv

Пояснение: в примере -map 0:0 это видеодорожка, к ней будет применена опция -c:v:0 copy, что означает, что видео не будет перекодироваться. -map 0:1 -map 0:2 -map 0:3 это 3 аудиодорожки. К первым двум будут применены -c:a:0 copy -c:a:1 copy, что означает, что дорожки останутся в оригинальном формате. А к 3 дорожке будет применена опция -c:a:2 ac3 -b:a 320k, что означает, что она будет сконвертирована в формат AC3 с битрейтом 320k.

Если какие-то дорожки не нужны, просто не указывайте к ним обращение. Например, чтобы убрать аужиодорожки с 4 по 6 из 7 доступных, воспользуйтесь примером ниже.

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:7 -c:v:0 copy -c:a:0 ac3 -c:a:1 ac3 -b:a 320k -c:a:2 ac3 -b:a 320k -c:a:3 ac3 -b:a 320k -c:a:7 ac3 -b:a 320k output.mkv

Добавление, извлечение и удаление и аудио

Чтобы добавить звуковую дорожку в видеофайл используйте опцию -i, в которой укажите путь к аудиофайлу.

ffmpeg -i noaudio.mpg -i audio.acc -vcodec copy -acodec copy output.mpg

Удалить из видеофайла звуковую дорожку можно с помощью опции -an (audio not).

ffmpeg -i input.mpg -vcodec copy -an noaudio.mpg

Сохранить аудиодорожку из видеофайла.

ffmpeg -i input.mpg audio.wav

Если требуется сохранить дорожку в определенный формат, укажите параметры явно, как в примере ниже.

ffmpeg -i input.avi -vn -ar 44100 -ac 2 -ab 192K -f mp3 audio.mp3

Опция -ar указывает частоту дискретизации, -ac — количество каналов, -ab — битрейт.

Опция -vn означает, что видео информация будет отброшена, а опция -f указывает формат полученного файла (в примере — это mp3). В новых версиях FFmpeg эти две опции можно не указывать, FFmpeg разберется сам.

Если звуковых дорожек несколько, чтобы сохранить отдельную звуковую дорожку из видеофайла (демультиплексация) воспользуйтесь опцией -map и укажите ее идентификатор потока.

ffmpeg -i input.avi -map 0:2 audio.wav

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

ffmpeg -i video.avi -i audio1.mp3 -i audio2.mp3 -map 0:0 -map 0:1 -map 0:2 output.mkv

Так как в примере выше только один выходной файл, 0 перед двоеточием можно опустить.

ffmpeg -i video.avi -i audio1.mp3 -i audio2.mp3 -map 0 -map 1 -map 2 output.mkv

Изменение громкости

Для изменения громкости в FFmpeg существует аудиофильтр volume.

Следующая команда в половину уменьшит громкость.

$ ffmpeg -i input.mp3 -af 'volume=0.5' output.mp3

Аналогично, громкость можно увеличить (в примере ниже в полтора раза).

$ ffmpeg -i input.mp4 -c:v copy -af 'volume=1.5' output.mp4

Конвертация аудиофайлов

Аудио файлы можно конвертировать независимо от видео.

ffmpeg -i input.wav -ar 44100 -ac 2 -ab 192K -f mp3 output.mp3

Изменение скорости воспроизведения

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

Чтобы увеличить или уменьшить скорость видео, используется видеофильтр «setpts».

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

Команда выше удвоит скорость видео.

Не очевидно, но чтобы замедлить видео, нужно использовать множитель больше 1. Команда ниже замедлит исходное видео в 4 раза.

ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4

Чтобы увеличить или уменьшить скорость аудио, используется аудиофильтр «atempo». Следующая команда удвоит скорость звука.

ffmpeg -i input.mp4 -af "atempo=2.0" -vn output.mp4

Допустимы значения от 0.5 до 2.0.

Чтобы одновременно удвоить скорость воспроизведения для видео и аудио придется скомбинировать оба фильтра.

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4

Добавление субтитров

Ниже приведен пример добавления субтитров для файла формата MKV.

ffmpeg -i input.mp4 -i subtitles.srt -c copy -c:s copy output.mkv

В примере, к исходному видеофайлу video.mp4 будут добавлены субтитры из файла subtitles.srt. Опция -c copy означает, что видео и аудио потоки из video.mp4 будут скопированы как есть (без пересжатия), опция -c:s copy, означает, что титры будут вставлены без изменений.

Если нужно вставить несколько дорожек субтитров команда может выглядеть так.

ffmpeg -i input.mp4 -i ru_subtitles.srt -i en_subtitles.srt -map 0:0 -map 1:0 -map 2:0 -c:v copy -c:a copy -c:s copy output.mkv

Формат MKV, может использовать субтитры форматов srt, subrip, ssa или ass, за исключением mov_text.

ffmpeg -i input.mp4 -i subtitles.ass -map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy -c:s copy output.mkv

В свою очередь MP4 поддерживает только один формат субтитров — mov_text. Прочие форматы можно использовать в качестве исходных, но обязательно укажите кодек для субтитров, чтобы на выходе сконвертировать их в mov_text (-c:s mov_text).

ffmpeg -i input.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4

Пример для нескольких потоков субтитров.

ffmpeg -i input.mp4 -i ru_subtitles.srt -i en_subtitles.srt -map 0:0 -map 1:0 -map 2:0 -c copy -c:s mov_text output.mp4

FFmpeg умеет конвертировать субтитры из одного формата в другой.

ffmpeg -i subtitles.srt subtitles.ass

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

ffmpeg -i input.avi -txt_format text output.srt

А если необходимо удалить субтитры используйте опцию -sn.

ffmpeg -i input.mkv -c copy -sn output.mkv

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

Следующая команда разобьет видео на кадры с именами image1.jpg, image2.jpg, image3.jpg и т.д.

ffmpeg -i video.mp4 image%d.jpg

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

ffmpeg -i video.mp4 -f image2 image%d.jpg

После выполнения в конечной папке окажется огромное количество файлов изображений. Чтобы уменьшить их можно, понизить частоту кадров (опция -r).

ffmpeg -i video.mp4 -r 1 image%d.png

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

Операция обратная предыдущей. В некоторых случаях, рекомендуют явно указывать входной формат (опция -f image2 для изображений).

ffmpeg -r 12 -f image2 -i image%d.jpg output.mpg

Создание превью

Следующая команда создаст графический файл в формате JPEG, взяв один кадр на 30 секунде.

ffmpeg -i video.mp4 -an -ss 30 -vframes 1 -s 340x180 -y -f mjpeg screenshot.jpg

А ниже приведен пример создания анимированного превью в формате GIF.

ffmpeg -i input.avi -an -pix_fmt rgb24 -ss 30 -vframes 64 -s 340x180 -loop_output 0 -f gif screenshot.gif

Опция -loop_output задает количество повторов, по умолчанию равен 1. Если указать 0, то анимация будет бесконечной.

Конвертировать FLV в видео (и наоборот)

Чтобы конвертировать флеш-ролик в видео, воспользуйтесь следующей командой.

ffmpeg -i video.flv video.mpg

Конвертацию можно выполнить и в обратную сторону.

ffmpeg -i video.mpg video.flv

Параметры можно указать явно.

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

Или более конкретно.

ffmpeg -i video.mpg -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video.flv

Преобразовать видео в GIF

Чтобы сконвертировать видео в гифку (без сжатия).

ffmpeg -i input.avi output.gif

Флеш-ролики тоже можно конвертировать.

ffmpeg -i input.flv output.gif

Оптимизация для WEB

Для потоковой передачи видео, может оказаться полезным перенести moov-атомы в начало файла. Это позволит при передачи по сети декодировать видео частями, и начать показ ролика, не заставляя пользователя ждать, пока он скачается целиком.

ffmpeg -i input.avi -c:v libx264 -c:a aac -movflags +faststart output.mp4

Пакетная обработка FFmpeg

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

Написание скриптов, тема для отдельной статьи, здесь же приведу примеры для Windows и MacOS, с помощью которых за раз можно сконвертировать всю папку с файлами.

Примеры скриптов FFmpeg для Windows

Создайте текстовый файл, с расширением .bat, поместите в него содержимое указанное ниже и скорректируйте по своему усмотрению.

Чтобы воспользоваться скриптом, потребуется указать путь до папки с файлами, которые хотите сконвертировать, расширение исходных файлов, выходной формат и расширение (контейнер) выходных файлов.

@Echo off
Pushd "C:\folder\"
for %%f in (*.avi) do (
  ffmpeg -y -i "%%~f" -c:v libx264 -b:v 17000K -pass 1 -f mp4 NULL
  ffmpeg -y -i "%%~f" -c:v libx264 -b:v 17000K -pass 2 -f mp4 -c:a aac -b:a 256K "%%~nf.mp4"
)
PopD
Pause

Скрипт из примера возьмет все файлы из папки ( C:\folder\ ) с расширением .avi и сконвертирует их (используя двухпроходное кодирование) в формат mp4, расширение выходных файлов так же будет mp4. Выходные файлы будут помещены в ту же папку, что и исходные.

Ниже приведен аналогичный пример для конвертации аудио. Cкрипт конвертирует файлы с расширением .wav в .mp3.

@Echo off
Pushd "C:\folder\"
for %%f in (*.wav) do (
	ffmpeg -y -i "%%~f" -ar 44100 -ac 2 -ab 320K -f mp3 "%%~nf.mp3"
)
PopD
Pause

Примеры скриптов FFmpeg для MacOS

Создайте текстовый файл, с расширением .sh, поместите в него содержимое указанное ниже и скорректируйте по своему усмотрению.

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

#!/bin/bash

input=avi
output=mp4
format=mp4
cd ~/Desktop/folder/

for i in *."$input";
do
   ffmpeg -y -i "$i" -c:v libx264 -b:v 17000K -pass 1 -f $format /dev/null;
   ffmpeg -y -i "$i" -c:v libx264 -b:v 17000K -pass 2 -f $format -c:a aac -b:a 256K "${i%.*}.$output";
done

Не забудьте сделать скрипт исполняемым.

chmod 755 YourScript.sh

Скрипт из примера возьмет все файлы из папки ( ~/Desktop/folder/ ) с расширением .avi и сконвертирует их (используя двухпроходное кодирование) в формат mp4, расширение выходных файлов так же будет mp4. Выходные файлы будут помещены в ту же папку, что и исходные.

Ниже приведен аналогичный пример для конвертации аудио. Cкрипт конвертирует файлы с расширением .wav в .mp3.

#!/bin/bash

input=wav
output=mp3
format=mp3
cd ~/Desktop/folder/

for i in *."$input";
do
   ffmpeg -y -i "$i" -ar 44100 -ac 2 -ab 320K -f $format "${i%.*}.$output";
done

Полезные ссылки

Официальный сайт FFmpeg
Документация FFmpeg
Документация по командам FFmpeg
Документация по фильтрам

На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.

Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.


FFmpeg — набор библиотек и утилит командной строки, позволяющих производить практически все основные операции редактирования и преобразования файлов видео и звуковых файлов. Ниже шпаргалка из основных команд для работы с FFmpeg, которые могут пригодиться при редактировании видео. Особенно обратим внимание на не-деструктивное без потери качества редактирование файлов видео и звуковых файлов. Лицензия: GNU LGPL и GNU GPL. Сайт: http://ffmpeg.org


FFmpeg для начинающих

Съёмка видеороликов в цифровых форматах с помощью смартфонов, фотоаппаратов и прочих цифровых приспособлений стала распространённым явлением. Само собой возникает необходимость как-то редактировать снятые видеоролики, — например, для размещения на «Ютубе». То есть видеоролики часто нужно обрезать, заменять или удалять звуковую дорожку, изменить размер формат видео, а потом всё склеивать в единый файл видео.

Для этого массового занятия создаётся немало программ. Взять хотя бы поставлявшийся ранее в системы Windows видео редактор MoveMaker. Мы же рассмотрим набор утилит и библиотек для редактирования и преобразования медиафайлов под названием FFmpeg.

Чем хорош 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 

Основными параметрами видео-данных являются:

  • разрешение изображения видео — например, 320х240, p720 и т.д;
  • формат и кодек, с помощью которого создавался видео-поток;
  • битрейт — количество данных в килобайтах или мегабайтах, которые нужно для проигрывания видео за одну секунду — например, 240 Kb/s, 1Mb/s;
  • фремрейт — количество кадров в секунду (frame per second) — например 24 fps, 30 fps.

Для аудио-данных важными параметрами являются:

  • формат и кодек, с помощью которого создавался звуковой поток;
  • частота дискретизации — например, 44 KHz;
  • битрейт — количество данных в килобайтах, которые нужно для проигрывания аудиофайла за одну секунду — например, 96 Kb/s, 128Mb/s;
  • режим моно, стерео и т.д.

Но параметров на самом деле больше. Узнать параметры контейнера видео и входящих в него данных видео и аудио легко сделать с помощью команды fmpeg с параметром -i, которому передаётся путь и имя мультимедийного файла

ffmpeg -i video.mp4

Рис 1. Вывод FFmpeg информации о данных файла

VidCutter: графический интерфейс для FFmpeg

Но начать использование FFmpeg можно не только из командной строки. К FFmpeg существуют и графические оболочки – программы, в которых основные команды и операции можно производить с помощью графического интерфейса и манипулятора «мышь».

Примером такой очень простой графической оболочки является очень простенькая программа VidCutter. Она позволяет в графическом интерфейсе задействовать производить обрезку видео-файлов без перекодирования, то есть без потери качества.

Рис 2. VidCutter

Работа в этой программе состоит из одной операции — выделить начало и конец фрагмента и нажать кнопку обрезки видео. Но в большинстве случаев нужно больше, чем просто обрезать видео-файлы.

Установка комплекта утилит FFmpeg

Linux. Утилиты FFmpeg обычно входят во все репозитории дистрибутивов Linux и легко устанавливаются штатными менеджерами пакетов этих дистрибутивов. Также можно скачать с официального сайта готовые бинарные сборки ffmpeg и запускать их прямо из домашней папки. Или же собрать из исходников.

Для Windows и Mac OS можно скачать с официального сайта архив с готовые бинарными сборками FFmpeg, распаковать их в любой каталог. Нужные утилиты обычно находятся в папке bin. Запускать их нужно из командной строки, задавая путь к этим утилитам, непосредственно в командной строке или через добавление пути к утилитам через глобальные системные переменные.

Основных утилит в наборе FFmpeg две:

  • ffmpeg — утилита для всех операций с файлами мультимедиа;
  • ffplay — очень простой проигрыватель для файлов мультимедиа, вместо которого можно использовать любой другой проигрыватель.

Редактируем c FFmpeg

Допустим, у нас есть несколько дорогих нам файлов видео, сделанные когда-то каким-нибудь старым «Кэноном», или «Никоном», или камкордером. Нам хотелось обрезать лишнее в этих видео, убрать из них фоновый звук и наложить какую-нибудь музычку. Потом всё склеить в единый файл без перекодирования и потери качества.

Положим эти файлы в отдельную папочку и заходим в эту папку из командной строки для редактирования файлов видео с помощью команд ffmpeg.

Так же нужно держать правильный порядок и группировку параметров командной строки утилиты ffmpeg:

  • Не забываем, что входной файл(ы) для манипуляций и редактирования задаётся сразу после команды ffmpeg после опции -i: ffmpeg -i video.mp4;
  • после параметров входного или входных файлов идут глобальные параметры — например, опция выбора потоков, опция нового разрешения видеоролика;
  • потом идёт опция видео-кодека, за которым перечисляются его параметры в том числе и видео-фильтры;
  • потом идёт опция аудио-кодека и перечисляются его параметры в том числе и фильтры;
  • завершает команду имя файла на выходе.

Пример строки команды

ffmpeg -i video.mpg -s 320x240 -vcodec -b 200K -acodec -ab 96K out.avi

FFmpeg: перекодирование и деструктивное редактирование

Для многих операций редактирования файлов видео,— например для склейки видео, — эти файлы нужно привести к единому формату.

Основное предназначение FFmpeg — это перекодирование файлов мультимедиа из одного формата в другой. И перекодирование в FFmpeg может делаться очень легко.

Как самый минимум для перекодирования в другой формат нужно задать в выходном файле нужное расширение файла. И всё. По этому расширению утилита подберёт нужный кодек и перекодирует входной файл согласно параметрам по умолчанию для этого кодека, исходя из параметров входного файла. Например, следующая команда перекодирует входной файл формата MP4 video.mp4 в файл контейнера WEBM video.webm

fmpeg -i video.mp4 video.webm

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

Опции ffmpeg для параметров видео:

  • -vcodec или кратко c:v — параметры видео-кодека, или «copy», или пустой параметр (значением по умолчанию)
  • -f — формат контейнера
  • -b — битрейт в килобитах или мегабитах в секунду задаётся буквой K или M
  • -aspect — соотношение сторон картинки (4:3, 16:9, 1.3333, 1.7777)
  • -r — фреймрейт

Опции ffmpeg для параметров звука:

  • -acodec или кратко c:a — параметры кодека звука, или «copy», или пустой параметр (значением по умолчанию)
  • -f — формат аудио
  • -ab — битрейт аудио
  • -ar — частота дискредитации
  • -ac — количество каналов

Например, перекодируем входной файл формата MP4 video.mp4 в файл контейнера WEBM video.webm с некоторыми явно заданными параметрами

ffmpeg -i video.mp4 -s 640x480 -vcodec -b 600kb/s -acodec -ab 128kb/s video.avi

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

FFmpeg: изменение разрешения видео

Перекодирование будет произведено, естественно, и если просто задать новое разрешение для видео с помощью глобальной опции -s

ffmpeg -i video.mp4 -s 320х240 video.webm

FFmpeg: перекодирование и не-деструктивное редактирование видео без потери качества

Теперь о преобразование видео из одного формата в другой без потери качества. Для некоторых операций возможно редактирование без перекодирования звука и видео, без потери качества, когда потоки внутри файла контейнера остаются нетронутыми и просто копируются как есть из одного файла в другой. Для этого для опций -vcodec и -acodec используется параметр copy. Например «перельём» видео-поток и аудио-поток из файла формата MP4 video.mp4 в файл контейнера TS video.ts:

ffmpeg -i video.mp4 -vcodec copy -acodec copy video.ts

В результате новый файл контейнер video.ts будет содержать нетронутое перекодированием видео и звук из файла контейнера video.ts.

FFmpeg: не-деструктивная нарезка и обрезка файлов видео

Обрезка видео файла производится при помощи опций -ss и -t. Опция -ss задаёт начало обрезки, а опция -t задаёт продолжительность дальнейшего фрагмента. Время задаётся в формате «часы:минуты:секунды». Для не-деструктивного редактирования содержимого видео-файла используйте параметр copy.

ffmpeg -i video.mp4 -ss 00:00:02 -t 00:00:12 -vcodec copy -acodec copy video.mp4

Обрезка без перекодирования происходит очень быстро и не отнимает много компьютерной мощности.

FFmpeg: склейка и соединение файлов видео

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

Для многих форматов соединение файлов в ffmpeg происходит при помощи оператора concat, которому после двоеточия передаётся последовательность входных файлов, разделённых символом вертикальной черты. Пример склейки одинаковых и однотипных по формату файлов file1.avi и file2.avi без перекодирования:

ffmpeg -i "concat:file1.avi|file2.avi" -vcodec copy -acodec copy output.avi

Следует учитывать при соединении фрагментов видео в единый файл, что видео потоки и аудио потоки фрагментов складываются по отдельности, а потом объединяются в один контейнер. Поэтому если в одном из фрагментов звуковая дорожка короче по времени чем видео-поток, то звуковые дорожки остальных фрагментов сдвинутся к концу этой короткой звуковой дорожки и произойдёт рассинхронизация звука. Это надо учитывать.

FFmpeg: склейка и соединение файлов формата видео MP4

Видео-файлы в контейнере 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

FFmpeg: удаление звуковой дорожки

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

ffmpeg -i zvuk.mpg -vcodec copy -an bezzvuka.mpg

FFmpeg: добавление или замена звуковой дорожки

Добавить звуковой поток в файл видео нужно с помощью дополнительной опции -i которой в качестве параметра передаётся путь звуковому файлу.

ffmpeg -i bezzvuka.mpg -i zvuk.mp3 -vcodec copy -acodec copy zvuk.mpg

FFmpeg: опция «-map» для обращения к потокам в видео-фвйлах

Выше мы увидели пример многократного использования для 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 …

Рис 2. Вывод ffmpeg информации о потоках»

То есть 0 перед двоеточием означает, что это первый по порядку входной файл для ffmpeg — в примере выше это файл video.mkv. А номера после двоеточия означают номера внутренних потока этого файла. Для обработки конкретного потока опции -map нужно передать конкретный номер этого потока. Пример команды с опцией -map, которая демультиплексирует, то есть сохраняет одну из звуковых дорожек контейнера в отдельный файл:

ffmpeg -i video.mkv -map 0:2 sound.wav

FFmpeg: добавить несколько звуковых дорожек в видеофайл (мультиплексация)

Теперь рассмотрим пример добавления нескольких звуковых дорожек в видео-файл с помощью 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

man ffmpeg > ffmpeg_man.txt

Сохранить в текстовой файл справку FFmpeg

ffmpeg -h full > ffmpeg_help.txt


Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Номер порта smb windows
  • Memory cleaner для windows
  • Как настроить подключение дом ру windows 10
  • Как разблокировать локальную учетную запись windows 10
  • Тайловый оконный менеджер для windows