В предидущем посте я прошелся по библиотеке и расставил везде теги и обложки. Но теперь надо решить другую проблему: у меня есть mp3, m4a и flac файлы. Причем я точно знаю, что некоторые flac и m4a получены из mp3. Да, источники музыки были не всегда адекватными …
Поэтому шаг номер раз: приводим всю библиотеку в mp3 формат. То, что из m4a и flac перезапишутся mp3 – пофиг
find . -type f -name "*.m4a" | parallel 'ffmpeg -y -i {} -map_metadata 0 -codec:a libmp3lame -qscale:a 1 {.}.mp3'
find . -type f -name "*.flac" | parallel 'ffmpeg -y -i {} -map_metadata 0 -codec:a libmp3lame -qscale:a 1 {.}.mp3'
Теперь можно грохнуть “оригиналы”. И совсем маленький шаг: необходимо избавиться от дубликатов. Так как источников было много, то и для некоторых популярных песен было аж до 5 вариантов. Пишу маленький скрипт, который удаляет все дубликаты меньшего размера (да, буду считать, что бОльший размер означает лучшее качество).
#!/bin/bash
IFS=$(echo -en "\n\b")
function traverse() {
# lets find copies in directory and i dont want use .m?? in search
for file in $(ls -1 ${1} |grep -e \(1\).mp3 -e \(2\).mp3 -e \(3\).mp3 -e \(4\).mp3 -e \(5\).mp3)
do
l="${1}/${file%????????}*" # cut (X).mp3 from file name
# delete all files except first and biggest
ls -1S ${l} | tail -n +2 | xargs -d '\n' rm -f
# Now rename file. Leave mv alone for errors "the file is same" - its working indicator for me :)
ffin="${l%?}.mp3"
mv $l $ffin
done
# now lets find another directory to deep in
for file in $(ls "$1")
do
if [[ -d ${1}/${file} ]]; then
traverse "${1}/${file}"
fi
done
}
function main() {
traverse "$1"
}
main "$1"
И натравливаем его на библиотеку. Я специально не стал обрамлять вокруг mv, что бы хоть что-то выводило во время работы, поэтому сообщения типа mv: '/mnt/swamp/Reloaded//松居慶子/Dream Walk/04 Fire in the Desert.mp3' and '/mnt/swamp/Reloaded//松居慶子/Dream Walk/04 Fire in the Desert.mp3'
are the same file стали для меня индикатором, что скрипт работает.
В результате у меня теперь есть библиотека музыки, где все разложено по полочкам (иногда полупустым), протегано и с обложками. Но (ох уж это но) есть куча песен с битрейтом 96 и 128 кбит/с. Но как к этому подобраться автоматически – я пока не представляю.