Генерация *.m3u плейлиста из консоли
Сделал скрипт, генерирующий полноценный M3U-плейлист и выбирающий метаинформацию из тегов файлов. Поддерживаются форматы: mp3, ogg, flac.
Пример работы:
ootync@rtfm:/var/OOTYNC/MP3$ m3u-gen .
#EXTM3U
#EXTINF:311,Manowar — Number 1
Rock/Manowar/1996 - Louder Than Hell/05-Number 1.flac
#EXTINF:249,Manowar — The Power
Rock/Manowar/1996 - Louder Than Hell/10-The Power.flac
...#!/usr/bin/env bash #=== WELCOME # Check binaries requires="soxi mid3v2 vorbiscomment metaflac" which $requires > /dev/null || { echo "E: These binaries are required: $requires" >&2 ; exit 1; } # Help function display_help(){ cat <<-HELP Recursive M3U playlist generator with tag-reading. Usage: $(basename "$0") dir [dir]... > dir/playlist.m3u (c) o_O Tync, ICQ# 1227-700, Enjoy! HELP exit 0 } [ $# -eq 0 ] && { display_help ; exit 0; } #=== PROCESS # Header echo "#EXTM3U" SED_KEYVAL='s~^([^=]+)=(.*)$~\1=\"\2\"~p' # List all files find $@ -regextype posix-extended -iregex ".*\.(mp3|flac|ogg)" \ | while read file ; do declare -u ext ext=${file##*.} case "$ext" in "MP3") eval "$(mid3v2 "$file" | sed -rne "$SED_KEYVAL")" ARTIST="$TPE1" TITLE="$TIT2" ;; "OGG") eval "$(vorbiscomment -l "$file" | sed -rne "$SED_KEYVAL")" ;; "FLAC") eval "$(metaflac --export-tags-to='-' "$file" | sed -rne "$SED_KEYVAL")" ;; esac length="$(soxi -D "$file" | cut -d . -f 1)" echo "#EXTINF:$length,$ARTIST — $TITLE" echo "$file" done
(3 голоса)
- 2700 просмотров
Страница для печати


А что такое declare -u? В man bash нет.
Что касается кода, то в принципе достаточно одного exit 0, либо внутри display_help, либо после вызова {display_help; exit 0;}
'exit'ов два — чтобы уж наверняка! .. да, действительно он лишний :)
declare -uесть в bash v4.x. Это устанавливает переменной атрибут "при присвоении значения перевести все символы в верхний регистр". Можно сделать так:- declare -u ext ext=${file##*.} + ext="${ext^^}"Здоровский скрипт. Написан хорошо, приятно читать
для того что бы работал soxi в debian, нужно поставить libsox-fmt-mp3, libsox-fmt-ogg, libsox-fmt-flac. Это рекомендованные пакеты, но не обязательные и их может не быть.
soxi FAIL formats: no handler for file extension `mp3'
Отличный скрипт, спасибо! Уже поселился в /usr/local/bin/ на пмж. Но уважаемый автор не находит, что использование env для приложения, которое заведомо в /bin/ по LSB это, эм, несколько излишняя перестраховка?
во freebsd bash живет в /usr/local/bin например
это хороший прикол, надо запомнить. только в данном случае не подходит, так как мне всегда нужен по сути только mid3v2, остальные не нужны.. да и врядли что бы всем нужен был весь набор.
Согласен. Была мысль предварительно просканировать коллекцию, но имхо для такого скрипта это слишком :)
да, сканировать два раза это не выход Ж:-)
можно просто проверять на наличие при первом попадании в case. и если программа не найдена - выводить в самом конце в поток ошибок "Внимание: был найден .mp3, так что нужна такая то программа"
m3u: line 48: ошибка синтаксиса: неожиданный конец файла
попробуй еще раз скопировать. это моя вина, когда публиковал совет, один ; съелся.
Отправить комментарий