Ffmpeg пакетная обработка файлов linux

Как использовать FFMPEG для одновременного преобразования нескольких файлов мультимедиа в Linux

Напишите простой Bash скрипт для преобразования пакетного файла FFMPEG.

Распределения

Это будет работать во всех дистрибутивах Linux.

Требования

Рабочая установка Linux с установленным FFMPEG.

Условные обозначения

  • # — требует данных команды linux для выполнения с привилегиями root либо непосредственно как пользователь root, либо с использованием судо команда
  • $ — требует данных команды linux будет выполняться как обычный непривилегированный пользователь

Вступление

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

FFMPEG полностью поддерживает сценарии. Итак, вы можете написать простой Bash скрипт для просмотра содержимого указанного каталога и выполнения необходимого преобразования для каждого файла. Хотя это может показаться большим, на самом деле это не так. В скрипте будет менее 20 строк Bash.

Настроить файл

Начните с настройки вашего файла. Сделайте это где угодно.

Затем сделайте его исполняемым.

Откройте файл и настройте его, чтобы начать запись.

Планируйте свои переменные

Вам нужно будет передать несколько аргументов вашему скрипту, если вы хотите, чтобы он был достаточно гибким, чтобы обрабатывать большинство сценариев, для которых вы будете использовать FFMPEG. Из-за этого вам понадобится довольно много переменных. Конечно, вы можете использовать исходные данные, но их будет намного сложнее отслеживать.

srcExt = $ 1. destExt = $ 2. srcDir = $ 3. destDir = 4 доллара. opts = 5 долларов США

Всего у вас есть пять переменных; исходное расширение, целевое или результирующее расширение, исходный каталог, целевой каталог и ваши параметры. Параметры — это любые параметры, которые вы хотите использовать в своей команде FFMPEG. Есть и другие способы сделать это, но просто передать их в виде строки, и это очень просто.

Петля

Этот сценарий сосредоточен вокруг для цикл для перебора содержимого указанного каталога. Далее вам нужно создать этот цикл. Начните с создания идеи.

для имени файла в FOLDER; сделать сделано

Конечно, ПАПКА ничего. Вам нужно настроить цикл для перебора содержимого каталога, и этот каталог хранится в srcDir . Вы также должны сказать ему, что ему нужно только перебирать файлы с определенным расширением, srcExt . Итак, искомая комбинация выглядит так:

Читайте также:  Linux screen log to file

Подстановочный знак ( * ) сообщает это всем файлам, затем . $ srcExt дает ему полное расширение для поиска. Цитаты необходимы вокруг $ srcDir чтобы он не воспринимал все как строку и не работал должным образом.

для имени файла в "$ srcDir" /*.$ srcExt; сделать сделано

Ваша команда FFMPEG

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

Сначала создайте новую переменную, basePath и установите его равным этому регулярному выражению: $ .

Выражение удаляет все после . от пути, что означает расширение.

Теперь вам нужно избавиться от самого пути. Для этого установите baseName равно $ .

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

Теперь вы можете соединить части, чтобы сформировать вызов FFMPEG.

ffmpeg -i "$ filename" $ ​​opts "$ destDir" / "$ baseName". "$ destExt"

Как видите, это то же самое, что и обычный вызов FFMPEG, но с использованием переменных. Самая сложная часть — это пункт назначения, но он просто объединяет отдельные части пункта назначения, чтобы сформировать полный путь с именем файла и расширением.

Заключение

Если хотите, можете добавить сообщение об успешном завершении преобразования. Бросьте его в конец вашего скрипта после для петля.

echo "Преобразование из $ в $ завершено!"

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

#! / bin / bash srcExt = $ 1. destExt = $ 2 srcDir = $ 3. destDir = $ 4 opts = $ 5 для имени файла в "$ srcDir" /*.$ srcExt; do basePath = $ baseName = $ ffmpeg -i "$ filename" $ ​​opts "$ destDir" / "$ baseName". "$ destExt" done echo "Преобразование из $ < srcExt>в $ готово! "

Запустите ваш скрипт

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

$ ffmpeg-batch.sh flac mp3 / путь / к / файлам / путь / к / dest '-ab 320k'

Это не намного больше, чем обычно. Только теперь вы конвертируете целый каталог из файлов, а не только один.

Заключительные мысли

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

Подпишитесь на новостную рассылку Linux Career Newsletter, чтобы получать последние новости, вакансии, советы по карьере и рекомендуемые руководства по настройке.

LinuxConfig ищет технических писателей, специализирующихся на технологиях GNU / Linux и FLOSS. В ваших статьях будут представлены различные руководства по настройке GNU / Linux и технологии FLOSS, используемые в сочетании с операционной системой GNU / Linux.

Ожидается, что при написании статей вы сможете идти в ногу с технологическим прогрессом в вышеупомянутой технической области. Вы будете работать самостоятельно и сможете выпускать как минимум 2 технических статьи в месяц.

Читайте также:  Install php modules linux

Установка Virtualbox в Fedora Linux

Установка Virtualbox в Fedora Linux Это краткое руководство поможет пользователю Fedora с пошаговыми инструкциями по установке VirtualBox в системе Fedora Linux.Система: Fedora 14 Laughlin, i386Ядро: 2.6.35.6-48.fc14.i686Версия Virtualbox: 3.2.12 .

Как запланировать задачи с помощью команды at в Linux

Изучение того, как планировать и управлять задачами с помощью программы atТребованияПрава root для запуска демона atdУстановив программу atСложностьЛЕГКОУсловные обозначения# — требует данных команды linux для выполнения с привилегиями root либоне.

Настройте брандмауэр, чтобы включить порт 123 NTP в RHEL7 Linux

Настройте брандмауэр, чтобы включить порт 123 NTP в RHEL7 Linux

После настройки службы NTPD на вашем RHEL7 linux вам нужно будет разрешить трафик через брандмауэр на порт 123. Те следующие команда linux включит весь общедоступный трафик на UDP-порт 123:# firewall-cmd —zone = public —add-port = 123 / udp —pe.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Convert multiple media files at once with ffmpeg, in pure and secure bash.

sylsau/ffmpeg-bulk

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README

ffmpeg-bulk.sh v20230604 Convert multiple media files at once with ffmpeg. In pure and secure bash. REQUIREMENTS ffmpeg USAGE ffmpeg-bulk.sh FILES. (—to|-t) EXTENSION [—args-in|-ai INPUT_ARGS] [—args-out|-ao OUTPUT_ARGS] [—force|-f] [—log-level LOG_LEVEL] OPTIONS AND ARGUMENTS EXTENSION format of output files INPUT_ARGS ffmpeg arguments for the input file OUTPUT_ARGS ffmpeg arguments for the output file —force overwrite files LOG_LEVEL change ffmpeg ‘-loglevel’ (default: ‘error’, ffmpeg default: ‘info’) EXAMPLE Convert all flac and wav files in the current directory to opus with the specified options: $ ffmpeg-bulk.sh *.flac -t opus —args-out «-b:a 320k» *.wav SEE ALSO ffmpeg(1) AUTHOR Written by Sylvain Saubier REPORTING BUGS Mail at:

Читайте также:  Linux send file to server

About

Convert multiple media files at once with ffmpeg, in pure and secure bash.

Источник

FFmpeg | Пакетная обработка. Конвертирование всех файлов в папке

%%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 это целое имя входного и выходного файлов, нужно взять эти параметры в двойные кавычки:

Запускаем, и видим, что ffmpeg успешно конвертирует все webm файлы в текущей папке.

Если нужно положить результирующие файлы в отдельную папку, можно добавить
mkdir out — создаёт новую папку при старте скрипта
И добавить out/ в результирующий путь:

Конвертирование всех файлов в папке (Linux) Создаём текстовый файл convert.sh , это будет наш первый скрипт.
Чтобы выбрать все webm файлы используется цикл for:

file — это переменная, куда на каждой итерации будет попадать путь к webm-файлу.
Между do и done идут команды. В данном случае, просто выводим в консоль значение переменной file . Знак $ используется для обращения к переменной.
Запускаем

Для того, чтобы заменить в имени файла webm на mp4, необходимо получить имя файла без расширения. Вот примеры:
$file / $ — получение значения переменной file, то есть имя и расширение: video1.webm
$ — имя файла без расширения webm: video1
Возьмём имя файла без расширения и добавим в конец .mp4
$.mp4 — имя файла и расширение mp4: video1.mp4

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

Всё правильно подставилось и команда уже выглядит рабочей. Однако, последний файл содержит пробелы, которые служат разделением команд. Чтобы ffmpeg понял, что Моё прекрасное видео.webm и Моё прекрасное видео.mp4 это целое имя входного и выходного файлов, нужно взять эти параметры в двойные кавычки.
Остаётся только убрать echo:

Запускаем, и видим, что ffmpeg успешно конвертирует все webm файлы в текущей папке.

Если нужно положить результирующие файлы в отдельную папку, можно добавить
mkdir out — создаёт новую папку при старте скрипта
И добавить out/ в результирующий путь:

Источник

Оцените статью
Adblock
detector