Мультимедиа в командной строке/FFmpeg

FFmpeg — набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах.

Обрезка видео по времени

править
  • Обрезка видео (способ 1):

    $ ffmpeg -i file.avi -ss 00:00:10.000 -t 00:00:01.000 out.avi
    

    В -ss задаётся позиция начала обрезки, а в -t - сколько секунд взять для обрезаемого видео. Если второй ключ опустить, то обрежет по конец видео. Это удобно если нужно убрать только начало.

  • Обрезка видео (способ 2):

    $ ffmpeg -i file.avi -to 00:00:10.000 out.avi
    

    -to - кол-во времени которое будет обрезаться начиная от начала файла.

Вырезание области из кадра

править

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

ffmpeg -i "Часть 1.mp4" -filter:v "crop=911:682:227:23" -c:a copy "Часть 1 усечение.mp4"

Сначала указаны размеры вырезаемой области (911:682) и вторая пара значений это координаты верхнего-левого угла (227:23).

Объединение двух и более видео в одно

править

Достаточно сложная строка получается и ограничения имеются. Нужно чтобы оба видео имели одинаковый размер (в точках). Но простого способа в ffmpeg нет.

Тот что проще - он основан просто на слиянии двух файлов в один без учета формата (такое не сработает с mp4, например).

Одинаковый кодек у всех объединяемых файлов, одни размеры в пикселях и одинаковую частоту кадров
ffmpeg -f concat -safe 0 -i mylist.txt -c copy 4-typecert-ALL.mp4

Содержимое файла mylist.txt

file 04-typecert-nata.mp4
file 05-typecert-ivan-addenum.mp4

Объединение двух видео в формате mp4:

ffmpeg -i "Часть 1 вырез.mp4" -i "Часть 2 вырез.mp4" -filter_complex "[0:v] [0:a] [1:v] [1:a] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4

Объединение трех видео в одно (все то же самое, но указано три файла):

ffmpeg -i "тестовый.mp4" -i "тестовый2.mp4" -i "тестовый3.mp4" -filter_complex "[0:v] [0:a] [1:v] [1:a] [2:v] [2:a] concat=n=3:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4

Объединение простых файлов

править

Этот вариант годится только для видеоформатов, которые можно объединять на уровне файлов (приклеивая один к другому). На практике он используется прежде всего с mpeg2 (он еще имеет расширение ts на DVD-Дисках, например). Его можно склеить и без ffmpeg, но и ffmpeg умеет их склеивать. Пересчета при такой склейке не происходит.

ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy output.ts

Конвертация

править
  • Конвертирование аудиофайла с битрейтом 320:

    $ ffmpeg -i audio.ape -ab 320k audio.mp3
    
  • Конвертирование в FLV:

    $ ffmpeg -i video.avi -ar 22050 -ab 32 -f flv -s 320x240 video.flv
    
  • Сделать DVDRip из vob-файла:

    $ ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec libmp3lame -ab 128k snatch.avi
    
  • Кодирование в .3gp:

    $ ffmpeg -i file.avi -b 200Kb -r 12 -s qcif -ac 1 -ab 12.2k -ar 8000 out.3gp
    

Скриншоты

править
  • Сделать скриншот размером 320×240 из 10-ой секунды файла video.avi:

    $ ffmpeg -i video.avi -an -ss 00:00:10 -r 1 -vframes 1 -s 320x240 -y -f mjpeg screenshot.jpg
    
  • Сделать скриншот с веб-камеры размером 640×480:

    $ ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -f image2 snapshot.jpg 2>/dev/null
    

Работа с аудио

править
  • Извлечение аудиопотока:

    $ ffmpeg -i file.avi -vn output.mp3
    
  • Кодирование видео в mp3 файл:

    $ ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 320k -f mp3 out.mp3
    

Скачивание видео из интернет

править

Скачивание ролика целиком на основе плейлиста и склеивание его фрагментов (чанков) в один файл

ffmpeg -i https://URL/filename.m3u8 -c copy output.ts

При необходимости авторизации на веб-сайте, откуда требуется скачать видео или для подстановки нужного user-agent используются следующие ключи:

-Headers

Позволяет отправить нужные заголовки, определив их явно

Отправка двух заголовков

ffmpeg -headers $'KEY: STRING\r\nSECRETKEY:12345\r\n' -i http://host:80/file
-referer

Позволяет включить заголовок ’Referer: URL’ в HTTP-запрос.

-user_agent

Позволяет использовать нужное значение этого заголовка. По умолчанию указывается то что прописано в библиотеке libavformat.

В тех случаях, когда одним ffmpeg не получается скачать видео (не хватает знаний по его настройке или сложный случай), имеется консольное приложение для скачивания видео youtube-dl.

С использованием Windows PowerShell.exe

править

Перекодировка всех файлов .mov в каталоге в формат .avi реализуется с помощью двух .bat-файлов. Файл convert.bat (для конвертации нужно вызвать его):

for %%i IN (*.mov) DO (doConvert.bat "%%i")
pause

Файл doConvert.bat (здесь прописываются параметры перекодировки):

IF EXIST "%~d1%~p1%~n1.avi" GOTO exit
ffmpeg -i "%~d1%~p1%~n1.mov" -f avi -vcodec mpeg4 -b 3500k -g 300 -bf 2 -acodec libmp3lame -ab 128k -y "%~d1%~p1%~n1.avi"
:exit


Перекодирование всех файлов в директории с помощью ffmpeg. В директории с файлами которые нужно перекодировать создаем .bat или .cmd файл, в нем пишем например

for %%a in ("*.MP4") do C:\ffmpeg_shared\bin\ffmpeg -i "%%a"  -vcodec h264 -crf 22   -refs 1 -fast-pskip 0 -mbtree 0 -acodec aac "%%~na.mkv"
pause