Мультимедиа в командной строке/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