Bash: FFmpeg: Автоматизация пометки обложек альбомов

#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 пройдет хорошо и приведет к гораздо большей производительности