Как написать bash скрипт для ffmpeg большого количества файлов?
Здравствуйте. Сразу отмечу, что с программированием я на уважительное Вы, я не умею этого делать совсем. Но стоит задача, которую можно автоматизировать, если не быть мною.
У меня есть много mp3 файлов, которые я бы хотел залить на ютуб в виде "Видео с одной картинкой". Для конвертирования я использую скрипт ffmpeg
Меня полностью устраивает, как работает эта вещь, но видео более ста штук, а названия видео в функции я меняю каждый раз.
Мне бы очень хотелось автоматизировать процесс.
В моей голове этой работает так. Я выбираю 100 аудиофайлов в папке с одним изображением (изображение не меняется), и кидаю их на скрипт. В скрипте 1 переменная - имена входного и выходного файлов, которые различаются только расширением. Мне нужно, чтобы вместо этой переменной подставлялось имя входного файла без расширения.
Все файлы у меня mp3, все конечные видео должны быть mp4.
Понимаю, что если бы у меня было чуть больше 3 извилин, то я бы научился это делать, но к сожалению имеем то, что имеем.
вот как это выглядит на виндовс, в bat файле.
берет из папки все mp4 и кодирует их
for %%a in ("*.mp4") do !ffmpeg.exe -y -i "%%a" -c:v h264_nvenc -b:v 5000k -s 1920x1080 -an "C:\convert\DST\%%~na.mp4"
Valentin Barbolin, Я чувствую вкус победы! Добрый человек, научи, пожалуйста, как это теперь сделать? Как я уже говорил, я даже не эникейщик. Вижу, что что-то полезное, но как это применить по-шагово?
bratischev, я понимаю что у Вас немного другой процесс, я просто привел пример, на основе которого уже можно подставит ьнужное.. мы же не будем за Вас писать переменные для ffmpeg)
я скорее пытался показать принцип...
взять все файлы *.mp3 из папки, склеить с jpeg, сохранить...
Valentin Barbolin, Работает! Спасибо большое и дай Бог здоровья!
Убрал из функции все, что мне не нужно
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 "
exit 1
fi
MP3_DIR="$1"
for file in "$MP3_DIR"/*.mp3; do
if [ -e "$file" ]; then
filename=$(basename "$file" .mp3)
ffmpeg -i image.jpg -i "$file" -acodec copy "$MP3_DIR/${filename}.mp4"
fi
done
Положил это в текстовый файл, через командную строку сделал файл исполняемым. Положил файлик в папку со всеми файлами, вызвал его в командной строке и дал путь до директории. И за пару секунд у меня готово более 100 видео длительностью чуть меньше часа!
У меня есть много mp3 файлов, которые я бы хотел залить на ютуб в виде "Видео с одной картинкой".
А точно надо все эти маленькие аудио в mp4 перегонять? Может их проще склеить в одну длинную аудиодорожку (с переходами по необходимости), и затем использовать этот длинный аудиофайл как аудиотрэк для видео? И в качестве графики использовать картинку.