FFmpeg, как отказаться от конвертации онлайн
FFmpeg - мощнейшая и широко распространенная опенсурс библиотека обработки аудио и видео файлов из командной строки. Почти все известные редакторы и медиаресурсы существуют на его основе, YouTube, TikTok, PornHub и т.д.
Он чрезвычайно прост в использовании, ниже я опишу все то, чем пользуюсь сам.
Установка
1.Скачайте актуальную под вашу платформу версию с сайта
2.Распакуйте в любое удобное место
3.Добавьте путь с исполняемым файлом ffmpeg.exe в path переменных сред
4.Запустите терминал и выполните команду ffmpeg, если в ответ на нее, в терминале появилось описание программы, то все работает как положено
Написание скрипта
1.Создайте ярлык в удобной вам папке
2.Смените его адрес на cmd, теперь активация ярлыка вызовет терминал
3.Откройте свойства ярлыка и удалите данные в поле "Рабочая папка", открывая терминал, он всегда будет ссылаться на папку в которой находится
Структура инструкций ffmpeg построена на флагах и абсолютных путях к обрабатываемым файлам, для их использования в свойствах ярлыка дописывайте все необходимые команды в поле "Объект" разделив их /k для активации скрипта и сохранения терминала открытым или /c если терминал нужно автоматически закрыть.
Ключи потоков
Некоторые флаги можно применить к конкретным потокам
:v Видео
:a Аудио
:s Субтитры
Ввод файла
-i ПУТЬ указывает на полный путь к файлу поступающего на обработку.
пример cmd /k ffmpeg -i input.webm
Вывод файла
Не требует дополнительных инструкций, укажите имя и расширение файла в конце строки.
пример cmd /k ffmpeg -i input.webm output.mp4
Битрейт
-b:КЛЮЧПОТОКА ЗНАЧЕНИЕ устанавливает постоянный битрейт,по умолчанию значение передается в битах/с.
Можно определить конкретную единицу измерений явно указав
k Килобиты
M Мегабиты
пример cmd /k ffmpeg -i input.webm -b:v 1000k output.mp4
Буферсайз
-bufsize ЗНАЧЕНИЕ полезный флаг в связке с битрейтом. Смена кадров отличается по нагрузке и для некоторых последовательностей может понадобиться больше места, чем может позволить ширина битрейта, -bufsize позволяет занять неиспользуемое пространство у кадров, которые не требуют больших изменений. Значения x1-x5 от битрейта позволяют уменьшить кол-во артефактов даже при низком битрейте.
пример cmd /k ffmpeg -i input.webm -b:v 1000k -bufsize 1000k output.mp4
"Качество"
-crf ЗНАЧЕНИЕ автоматическая настройка битрейта со значением от 0(lossless) до 51(Максимально зашакаленное). ffmpeg подберет битрейт автоматически, нормальным для него значением является 18-22. В идеале установить одновременно медленный кодировщик, для лучшего качества при помощи -preset slow.
пример cmd /k ffmpeg -i input.webm -crf 18 -preset slow output.mp4
FPS
-r ЗНАЧЕНИЕ меняет целевой фреймрейт.
пример cmd /k ffmpeg -i input.webm -r 6 output.mp4
Изменение размера видео
-vf "НАБОР ИНСТРУКЦИЙ ФИЛЬТРА" флаг принимает в себя набор последовательных команд как ВидеоФильтр(VF). Простейший способ, собрать их последовательно через запятую.
Важно упомянуть о том, что возможно получать входные данные файла используя например
ih высота кадра
iw ширина кадра
Кадрирование
-vf "crop=ШИРИНА:ВЫСОТА" позволяет кадрировать кадр с обрезкой. Полезно для кадрирования по пропорциям без искажений.
пример cmd /k ffmpeg -i input.webm -vf "crop=iw:iw/16*9" output.mp4
Масштабирование
-vf "scale=ШИРИНА:ВЫСОТА" задает целевое разрешение, растягивая и сужая кадр.
Для изменения размера с сохранением пропорций, используется параметр -2, при этом значение второй стороны будет округлено до ближайшего четного числа, что важно для некоторых кодеков.
пример cmd /k ffmpeg -i input.webm -vf "scale=-2:128" output.mp4
Инструкции -vf должны быть вложены последовательно и разделены запятыми, но терминал запятых не понимает, поэтому перед ней должен идти символ экранирования ^,либо ,инструкции вложены в кавычки с применением обычной запятой.
пример 1 cmd /k ffmpeg -i input.webm -vf crop=iw:iw/16*9^,scale=-2:126 output.mp4
пример 2 cmd /k ffmpeg -i input.webm -vf "crop=iw:iw/16*9,scale=-2:126" output.mp4
Отключение звука
-an отключает звук.
пример cmd /k ffmpeg -i input.webm -an output.mp4
Замедление/Ускорение
-filter:КЛЮЧПОТОКА "setpts(для видео) atempo(для аудио)=ЗНАЧЕНИЕВДИАПАЗОНЕ 0.5-2.0 * PTS" меняет скорость воспроизведения потока.
пример cmd /k ffmpeg -i input.webm -filter:v "setpts=2.0*PTS" -filter:a "atempo=0.5" output.mp4
Перезапись файла без запроса
-y перезаписывает файл без запроса в терминале.
пример cmd /k ffmpeg -y -i input.webm output.mp4
Это базовый набор инструкций, который так же можно использовать подключив библиотеку например к Python. ffmpeg способен еще на многое, подробности можно найти в его документации.
CheatSheet FFMPEG:
• :v Видео
• :a Аудио
• :s Субтитры
• -i ПУТЬ Ввод файла
• ПУТЬ.РАСШИРЕНИЕ Вывод файла
• -b:КЛЮЧПОТОКА ЗНАЧЕНИЕ Битрейт
• k Килобиты
• M Мегабиты
• -bufsize ЗНАЧЕНИЕ Буферсайз
• -crf ЗНАЧЕНИЕОТ0ДО51 "Качество"
• -r ЗНАЧЕНИЕ FPS
• -vf "НАБОР ИНСТРУКЦИЙ ФИЛЬТРА" ВидеоФильтр
• ih высота кадра
• iw ширина кадра
• -vf "crop=ШИРИНА:ВЫСОТА" Кадрирование
• -vf "scale=ШИРИНА:ВЫСОТА" Масштабирование
• -2 Пропорция с округлением до четного
• -an Отключение звука
• -filter:КЛЮЧПОТОКА "setpts(для видео) atempo(для аудио)=ЗНАЧЕНИЕВДИАПАЗОНЕ 0.5-2.0 * PTS" Замедление/Ускорение
• -y Перезапись файла без запроса
Пример готового скрипта:
ffmpeg
cli
dataprocessing
работа с файлами