Создание тэгов mp3 в 2 клика мышки с помощью Nautilus scripts (пакетная обработка папок и файлов)
Предистория:
У супруги как-то появился плеер Sansa M250. Был приобретен с целью приобщаться к сокровищнице аудио-книг. Работал он себе без нареканий, пока в связи с предстоящим отпуском на него не были записаны аж две книги! И тут-то супруга и пожаловалась, что всё проигрывается в перемешку. Недолгий допрос с пристрастием (как супруги, так и плеера) выявил корень зла: плеер работает не с папками, а с тэгами (которые у скачанных аудио-книг не всегда прописаны, или прописаны коряво и в разнобой)!Решение проблемы:
Долгие пробы и метания сконденсировались в практически идеальное решение конкретной проблемы:без моего участия и без долгих курсов повышения квалификации, супруга в два клика мышки создаёт
для выбранной аудиокниги название альбома.
Для работы нужны следующие программы:
Линукс + GNOME (Убунту 10.10 в моём случае)
eyeD3 — консольный редактор тэгов
zenity — не обязательно, но для визуализации и упрощения процесса очень советую.
Устанавливаем недостающие программы:
sudo apt-get install eyed3 zenity
Изюминка идеи в том, что Наутилус умеет передать скрипту список выделенных файлов.
Делается это так:
В папке /home/%username%/.gnome2/nautilus-scripts/ хранятся скрипты. При правом клике на выделенных файлах в выпадающем меню есть подменю Scripts (там же можно быстро открыть саму папку со скриптами) которое содержит все вышеупомянутые скрипты. Выбрав один из них, мы его запустим. А он в свою очередь получит он Наутилуса список выделенных папок/файлов.
В вышеупомянутой папке создадим скрипт следующего содержания:
#!/bin/bash
function parseDir {
current=pwd
cd $1
list=$(find -iname '*.mp3')
for file in $list; do
array[$i]=$file
i=$(($i + 1))
done
cd $current
}
album_name=$(zenity --entry --text "Enter album name" --entry-text "A-book");
IFS=$'\n'
i=0
declare -a array
for name in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
if [ -d "$name" ]; then
parseDir $name
else
if [ ${name: -4} == ".mp3" ]; then
array[$i]=$name
i=$(($i + 1))
fi
fi
done
i=0
n=${#array[*]}
for file in ${array[@]}; do
eyeD3 --remove-all --set-encoding=utf8 -A "$album_name" $file
i=$(($i + 1))
echo $(($i * 100 / $n))
done | zenity --progress --title="$album_name" --text="Renaming, please wait..." --auto-close --auto-kill
unset IFS
Обьясняю основные аспекты, так как синтакс и команды есть в изобилии в гугле и ему подобных.
Сначала через zenity запросим желаемое имя альбома (по умолчанию стоит A-book, можно его и оставить).
Для визуализации процесса (прогресс обработки), создадим список файлов которые будем обрабатывать. Пройдемся по списку полученному из $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS. Файлы mp3 сразу добавим в массив, папки просканируем с помощью find (самая верхняя функция) и добавим все найденные mp3 в тот-же массив.
Второй for это уже сама обработка. Для каждого найденного mp3 выполним
eyeD3 --remove-all --set-encoding=utf8 -A "$album_name" $file
т.е. сотрем все тэги (мне так удобнее, но не обязательно) и запишем имя альбома в utf8.
Всё, в любой папке открытой в Nautilus выделим файлы и кликнем правой кнопкой на них. В выпадающем меню перейдем в Scripts и выберем наш. Выскочит окошко с запросом имени альбома, и введя желаемое название полюбуемся на бегущий прогресс-бар!
Сама идея очень универсальна, как и все в линукс. Надеюсь кому нибудь поможет или вдохновит на новые идеи!
Спасибо за внимание!
0 комментариев