FFmpeg | Пакетная обработка. Конвертирование всех файлов в папке
от aNNiMON
FFmpeg не умеет работать в пакетном режиме, поэтому приходится писать скрипты для упрощения преобразования. В этой статье напишем простой скрипт, который упростит пакетное конвертирование файлов.
ЗадачаВ папке находятся несколько видео в формате webm:
Нам нужно сконвертировать их в mp4 под таким же именем.
Содержание:
- Конвертирование всех файлов в папке (Windows)
- Конвертирование всех файлов в папке (Linux)
Конвертирование всех файлов в папке (Windows)Создаём текстовый файл convert.bat или convert.cmd, это будет наш первый скрипт.
Чтобы выбрать все webm файлы используется цикл for:
%%i — это переменная, куда на каждой итерации будет попадать путь к webm-файлу. Вместо i можно использовать любую другую букву латинского алфавита.
В скобках после do идут команды. В данном случае, просто выводим в консоль значение переменной %%i.
Уже можно запускать скрипт:
Скрипт выводит имена webm-видео и сами команды. Чтобы убрать вывод команд, добавляем в начало @echo off
Запускаем и теперь видим:
Для того, чтобы заменить в имени файла webm на mp4, необходимо получить имя файла без расширения. Вот примеры:
%%i — имя файла и расширение: video1.webm
%%~ni — имя файла без расширения: video1
%%~xi — только расширение: webm
Возьмём имя файла без расширения и добавим в конец .mp4
%%~ni.mp4 — имя файла и расширение mp4: video1.mp4
Теперь попробуем таким образом выстроить команду для ffmpeg:
Запускаем и видим:
Всё правильно подставилось и команда уже выглядит рабочей. Однако, последний файл содержит пробелы, которые служат разделением команд. Чтобы ffmpeg понял, что Моё прекрасное видео.webm и Моё прекрасное видео.mp4 это целое имя входного и выходного файлов, нужно взять эти параметры в двойные кавычки:
Остаётся только убрать echo:
Запускаем, и видим, что ffmpeg успешно конвертирует все webm файлы в текущей папке.
Если нужно положить результирующие файлы в отдельную папку, можно добавить
mkdir out — создаёт новую папку при старте скрипта
И добавить out/ в результирующий путь:
Конвертирование всех файлов в папке (Linux)Создаём текстовый файл convert.sh, это будет наш первый скрипт.
Чтобы выбрать все webm файлы используется цикл for:
file — это переменная, куда на каждой итерации будет попадать путь к webm-файлу.
Между do и done идут команды. В данном случае, просто выводим в консоль значение переменной file. Знак $ используется для обращения к переменной.
Запускаем
⚠️ В начало скрипта можно добавить шебанг
и дать права на запуск:
Это позволит запускать скрипт простым указанием:
Для того, чтобы заменить в имени файла webm на mp4, необходимо получить имя файла без расширения. Вот примеры:
$file / ${file} — получение значения переменной file, то есть имя и расширение: video1.webm
${file%.webm} — имя файла без расширения webm: video1
Возьмём имя файла без расширения и добавим в конец .mp4
${file%.webm}.mp4 — имя файла и расширение mp4: video1.mp4
Теперь попробуем таким образом выстроить команду для ffmpeg:
Запускаем и видим:
Всё правильно подставилось и команда уже выглядит рабочей. Однако, последний файл содержит пробелы, которые служат разделением команд. Чтобы ffmpeg понял, что Моё прекрасное видео.webm и Моё прекрасное видео.mp4 это целое имя входного и выходного файлов, нужно взять эти параметры в двойные кавычки.
Остаётся только убрать echo:
Запускаем, и видим, что ffmpeg успешно конвертирует все webm файлы в текущей папке.
Если нужно положить результирующие файлы в отдельную папку, можно добавить
mkdir out — создаёт новую папку при старте скрипта
И добавить out/ в результирующий путь:
Следующая статья →ЗадачаВ папке находятся несколько видео в формате webm:
- video1.webm
- Моё прекрасное видео.webm
- 123.webm
- video2.webm
Содержание:
- Конвертирование всех файлов в папке (Windows)
- Конвертирование всех файлов в папке (Linux)
Конвертирование всех файлов в папке (Windows)Создаём текстовый файл convert.bat или convert.cmd, это будет наш первый скрипт.
Чтобы выбрать все webm файлы используется цикл for:
- for %%i in (*.webm) do (
- echo %%i
- )
В скобках после do идут команды. В данном случае, просто выводим в консоль значение переменной %%i.
Уже можно запускать скрипт:
- for %i in (*.webm) do (echo %i )
- (echo 123.webm )
- 123.webm
- (echo video1.webm )
- video1.webm
- (echo video2.webm )
- video2.webm
- (echo Моё прекрасное видео.webm )
- Моё прекрасное видео.webm
Скрипт выводит имена webm-видео и сами команды. Чтобы убрать вывод команд, добавляем в начало @echo off
- @echo off
- for %%i in (*.webm) do (
- echo %%i
- )
- 123.webm
- video1.webm
- video2.webm
- Моё прекрасное видео.webm
Для того, чтобы заменить в имени файла webm на mp4, необходимо получить имя файла без расширения. Вот примеры:
%%i — имя файла и расширение: video1.webm
%%~ni — имя файла без расширения: video1
%%~xi — только расширение: webm
Возьмём имя файла без расширения и добавим в конец .mp4
%%~ni.mp4 — имя файла и расширение mp4: video1.mp4
Теперь попробуем таким образом выстроить команду для ffmpeg:
- @echo off
- for %%i in (*.webm) do (
- echo ffmpeg -i %%i %%~ni.mp4
- )
- ffmpeg -i 123.webm 123.mp4
- ffmpeg -i video1.webm video1.mp4
- ffmpeg -i video2.webm video2.mp4
- ffmpeg -i Моё прекрасное видео.webm Моё прекрасное видео.mp4
- @echo off
- for %%i in (*.webm) do (
- echo ffmpeg -i "%%i" "%%~ni.mp4"
- )
- ffmpeg -i "123.webm" "123.mp4"
- ffmpeg -i "video1.webm" "video1.mp4"
- ffmpeg -i "video2.webm" "video2.mp4"
- ffmpeg -i "Моё прекрасное видео.webm" "Моё прекрасное видео.mp4"
Остаётся только убрать echo:
- @echo off
- for %%i in (*.webm) do (
- ffmpeg -i "%%i" "%%~ni.mp4"
- )
Если нужно положить результирующие файлы в отдельную папку, можно добавить
mkdir out — создаёт новую папку при старте скрипта
И добавить out/ в результирующий путь:
- @echo off
- mkdir out
- for %%i in (*.webm) do (
- ffmpeg -i "%%i" "out/%%~ni.mp4"
- )
Конвертирование всех файлов в папке (Linux)Создаём текстовый файл convert.sh, это будет наш первый скрипт.
Чтобы выбрать все webm файлы используется цикл for:
- for file in *.webm; do
- echo $file
- done
Между do и done идут команды. В данном случае, просто выводим в консоль значение переменной file. Знак $ используется для обращения к переменной.
Запускаем
- bash convert.sh
- 123.webm
- video1.webm
- video2.webm
- Моё прекрасное видео.webm
⚠️ В начало скрипта можно добавить шебанг
- #!/bin/bash
- for file in *.webm; do
- echo $file
- done
- chmod +x convert.sh
- ./convert.sh
Для того, чтобы заменить в имени файла webm на mp4, необходимо получить имя файла без расширения. Вот примеры:
$file / ${file} — получение значения переменной file, то есть имя и расширение: video1.webm
${file%.webm} — имя файла без расширения webm: video1
Возьмём имя файла без расширения и добавим в конец .mp4
${file%.webm}.mp4 — имя файла и расширение mp4: video1.mp4
Теперь попробуем таким образом выстроить команду для ffmpeg:
- #!/bin/bash
- for file in *.webm; do
- echo ffmpeg -i $file ${file%.webm}.mp4
- done
- ffmpeg -i 123.webm 123.mp4
- ffmpeg -i video1.webm video1.mp4
- ffmpeg -i video2.webm video2.mp4
- ffmpeg -i Моё прекрасное видео.webm Моё прекрасное видео.mp4
Остаётся только убрать echo:
- #!/bin/bash
- for file in *.webm; do
- ffmpeg -i "$file" "${file%.webm}.mp4"
- done
Если нужно положить результирующие файлы в отдельную папку, можно добавить
mkdir out — создаёт новую папку при старте скрипта
И добавить out/ в результирующий путь:
- #!/bin/bash
- mkdir out
- for file in *.webm; do
- ffmpeg -i "$file" "out/${file%.webm}.mp4"
- done
Пакетная обработка. Рекурсивное наложение логотипа