#bash #audio #ffmpeg #flac #albumart
Вопрос:
Каждая из моих музыкальных папок настроена как Исполнитель > >Альбом года >
Track 01.flac
Track 02.flac
Track 03.flac
folder.jpg, jpeg, png, etc
И что мне нужно сделать, так это если папка.* доступна.
if [ -f folder.* ]; then
Выполните эту команду, чтобы установить меньший размер без замены исходной фотографии.
for small in folder.*
convert $small -resize 1000x1000 temp$small
Затем выполните эти команды для каждого файла, чтобы автоматически добавить обложку меньшего размера к тегам каждого аудиофайла.
ffmpeg -i TRACK.flac -i SMALLFOLDER.* -map a -map 1:v -disposition:v attached_pic -metadata:s:v comment="Cover (Front)" -codec copy TRACKWITHART.flac
amp;amp; rm TRACK.flac
amp;amp; mv TRACKWITHART.flac TRACK.flac
amp;amp; rm temp$small
Последнее, что осталось, — это я убираюсь. У меня возникли проблемы с передачей команд друг другу с помощью этого, и я не самый опытный в подобных вещах.
А также, если он недоступен, как указано выше, вам нужно будет извлечь его из первого аудиофайла, найдя его.
else
find . -name "*.flac" -print -quit
И извлеките его с помощью этой команды.
ffmpeg -i TRACK.flac -vf scale=1000:1000 -an FOLDER.png
Затем выполните другие команды, приведенные выше.
Теперь я не знаю, знаком ли кто-нибудь с FFmpeg, но на самом деле это своего рода кошмар, потому что это не обязательно для пометки аудио, но я не знаю ничего другого, чтобы справиться с такой автоматизированной задачей создания обложек альбомов в терминале. Если кто-нибудь может указать мне более правильное направление с помощью лучшей утилиты CLI, это было бы здорово или просто помогло бы с этим сценарием bash. Вы можете видеть, что я довольно хорошо знаком с терминалом и кое-что делаю, просматривая веб-страницы, но мне очень трудно понять, как поместить их в сценарий bash, если у кого-то есть ссылки специально для этого, это было бы очень ценно.
Ответ №1:
У вас есть общее правильное представление о том, как это сделать.
BashGuide wooledge-это, пожалуй, лучшее место для начала изучения сценариев bash. Он очень доступен, и в нем непосредственно рассматриваются многие подводные камни, с которыми сталкиваются начинающие при написании сценариев.
ВСЕГДА указывайте свои переменные, когда вы используете их для хранения имен файлов/путей. Вам нужно написать свой сценарий так, как будто в каждом пути/имени файла будут пробелы, новые строки, специальные символы и т. Д. Цитирование ваших переменных во многом поможет предотвратить любой хаос при запуске вашего сценария.
Вот ваш код, исправленный и объединенный в рабочий сценарий:
#!/bin/bash
# check for album art file,
# if none, extract from first flac w/ ffmpeg
# exit script if ffmpeg fails
[[ -f folder.* ]] ||
{ tracks=(*.flac)
ffmpeg -i "${tracks[0]}" -vf scale=1000:1000 -an folder.png
|| exit 1 ; }
# define an array of all folder.* files
albumart=(folder.*)
ffmpeg -i "${albumart[0]}" -vf scale=1000:1000 "tmp_${albumart[0]}"
|| exit 1
# use the first element of the array,
# in case there are multiple folder.* files.
# exit if ffmpeg gives error code
for track in *.flac; do
ffmpeg -i "$track" -i "tmp_${albumart[0]}" -map a -map 1:v -disposition:v attached_pic -metadata:s:v comment="Cover (Front)" -codec copy "tmp_${track}"
amp;amp; rm "$track"
amp;amp; mv "tmp_${track}" "$track"
done
rm "tmp_${albumart[0]}"
Я взял на себя смелость изменить вашу convert
строку кода изменения размера изображения, чтобы вместо этого он обрабатывался ffmpeg, так как я не знаком с «преобразованием». Если вы используете скрипт или двоичный файл, вам нужно отредактировать эту строку (сохранив новые входные и выходные переменные без изменений).
Этому сценарию не нужны никакие аргументы, и он будет перебирать и добавлять обложки альбомов и метаданные ко всем .файлы flac в вашем текущем каталоге. Он не предназначен для рекурсивной работы; вам нужно будет cd
ввести и запустить скрипт в каждом каталоге.
Комментарии:
1. Огромное спасибо. То, как вы это изложили, имеет смысл, и я ценю ваши комментарии в коде. Да, преобразование-это функция imagemagick, простой графической программы в Linux. Мне нравится, как я могу просто запустить его в любом каталоге, в котором я нахожусь, об этом я не подумал. Это отличная идея. Мне нужно кое-что сделать, чтобы починить его и заставить работать так, как мне нужно, затем я начну читать Вудледжа, чтобы, возможно, написать несколько новых. Еще раз спасибо.
2. Отредактировано, чтобы добавить шаг извлечения обложки альбома, который я пропустил, когда изначально писал ответ. Рад помочь, надеюсь, что ваш сценарий bash пройдет хорошо и приведет к гораздо большей производительности