Задача: поменять в каталоге теги всем mp3-файлам, основываясь на именах файлов и папок, используя консольные утилиты.
Окружение: MacOS (тут без разницы, линукс идентично), fishshell, Homebrew, mp3info, eyeD3. Fish у меня основная оболочка, для других синтаксис чуть изменится, но не суть.
Итак. У меня каталог, который называется как дата в формате YYYY-MM-DD, в нем mp3-файлы с именами в формате “НомерПробелИмятрека.mp3”. Нужно будет получить имя папки для даты, кусочек имени файла до пробела для номера трека, все остальное кроме расширения - имя трека.
Создаем функцию (конечно в файлике ~/.config/fish/config.fish
), заходим в нужную папку, запускаем. Текст функции:
function tags
for i in *.mp3
set basename $(basename $i .mp3)
set num $(echo $basename | cut -c1-2)
set name $(echo $basename | cut -c4- | xargs)
set reldate $(echo $PWD | awk -F/ '{print $NF}')
mp3info -d $i
eyeD3 --remove-all --remove-all-images --remove-all-objects $i
eyeD3 \
--track $num \
--title $name \
--artist 'Библейская церковь' \
--release-date $reldate \
--album "Богослужение $reldate" \
--add-image /path/to/cover.jpg:FRONT_COVER \
--encoding utf8 --force-update --to-v2.4 \
$i
end
end
Зачем тут mp3info
? eyeD3 обладает неприятным багом с кодировками в ID3 первой версии. mp3info
с этим справляется, поэтому чистим теги именно им.