Скрипт для создания спектров для CMCS: различия между версиями
Материал из Linux Wiki
				
				
				Перейти к навигацииПерейти к поиску
				
				| Rain (обсуждение | вклад) | Rain (обсуждение | вклад)  | ||
| (не показаны 3 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
| Скрипт ниже создает спектры для треков согласно [[Common Music Collection Structure]]. Для построения спектров используется утилита '''sndfile-spectrogram''' из пакета '''sndfile-tools''' (в Debian). В качестве параметра find'у передается путь к корню музыкальной коллекции (каталог, содержащий подкаталоги исполнителей). | Скрипт ниже создает спектры для треков согласно [[Common Music Collection Structure]]. Для построения спектров используется утилита '''sndfile-spectrogram''' из пакета '''sndfile-tools''' (в Debian). В качестве параметра find'у передается путь к корню музыкальной коллекции (каталог, содержащий подкаталоги исполнителей). | ||
| {{ToDo|Добавить сжатие файлов, рассмотреть переход на sox file -n spectrogram}} | |||
| ---- | ---- | ||
| <source lang=bash> | <source lang=bash> | ||
| find  | find "${@}" -maxdepth 3 -name *.flac | | ||
| while read file | while read file | ||
| 	do | 	do | ||
| Строка 14: | Строка 16: | ||
| 		then | 		then | ||
| 		mkdir -p "${dirname}" | 		mkdir -p "${dirname}" | ||
| 		sndfile-spectrogram --dyn-range=100 "${file}" 800 480 "${dirname}${basename%.flac}.png" | 		sndfile-spectrogram --dyn-range=100 "${file}" 800 480 "${dirname}${basename%.flac}.png" | ||
| 		echo $file complete | 		echo $file complete | ||
| 	fi | 	fi | ||
| Строка 37: | Строка 39: | ||
| } | } | ||
| </source> | </source> | ||
| ---- | |||
| Тестовый вариант со сжатием (с использованием '''advpng''' из пакета '''advancecomp'''): | |||
| <source lang=bash> | |||
| makespectrums() { | |||
|     find "${@}" -maxdepth 3 -name "*.flac" | | |||
|     while read file | |||
|         do | |||
|             file="$(readlink -f "${file}")" | |||
|             dirname="$(dirname "${file}")/_album_info/spectrums/" | |||
|             basename="$(basename "${file}")" | |||
|             [ ! -e "${dirname}${basename%.flac}.png" ] && ( | |||
|                 mkdir -p "${dirname}" | |||
|                 sndfile-spectrogram --dyn-range=100 "${file}" 800 480 "${dirname}${basename%.flac}.png" | |||
|                 [ -e `which convert` ] && ( | |||
|                     convert -quality 90 -colors 256 "${dirname}${basename%.flac}.png" "${dirname}${basename%.flac}-conv.png" | |||
|                     mv "${dirname}${basename%.flac}-conv.png" "${dirname}${basename%.flac}.png" | |||
|                     [ -e `which advpng` ] && ( | |||
|                         advpng -z4 "${dirname}${basename%.flac}.png" | |||
|                         ) | |||
|                     )&: | |||
|             ) | |||
|             echo $file complete | |||
|         done | |||
| } | |||
| </source> | |||
| [[Category:Скрипт]][[Category:Аудио]][[Category:CMCS]] | [[Category:Скрипт]][[Category:Аудио]][[Category:CMCS]] | ||
Текущая версия от 18:59, 3 сентября 2012
Скрипт ниже создает спектры для треков согласно Common Music Collection Structure. Для построения спектров используется утилита sndfile-spectrogram из пакета sndfile-tools (в Debian). В качестве параметра find'у передается путь к корню музыкальной коллекции (каталог, содержащий подкаталоги исполнителей).
ToDo: Добавить сжатие файлов, рассмотреть переход на sox file -n spectrogram
find "${@}" -maxdepth 3 -name *.flac |
while read file
	do
	file="$(readlink -f "${file}")"
	dirname="$(dirname "${file}")/_album_info/spectrums/"
	basename="$(basename "${file}")"
	if [ ! -e "${dirname}${basename%.flac}.png" ]
		then
		mkdir -p "${dirname}"
		sndfile-spectrogram --dyn-range=100 "${file}" 800 480 "${dirname}${basename%.flac}.png"
		echo $file complete
	fi
done
Либо как отдельная функция, работает как с альбомом, так и с дискографией:
makespectrums() {
find "${@}" -maxdepth 3 -name "*.flac" |
while read file
do
file="$(readlink -f "${file}")"
dirname="$(dirname "${file}")/_album_info/spectrums/"
basename="$(basename "${file}")"
[ ! -e "${dirname}${basename%.flac}.png" ] && (mkdir -p "${dirname}" ; sndfile-spectrogram --dyn-range=100 "${file}" 800 480 "${dirname}${basename%.flac}.png")
echo $file complete
done
}
Тестовый вариант со сжатием (с использованием advpng из пакета advancecomp):
makespectrums() {
    find "${@}" -maxdepth 3 -name "*.flac" |
    while read file
        do
            file="$(readlink -f "${file}")"
            dirname="$(dirname "${file}")/_album_info/spectrums/"
            basename="$(basename "${file}")"
            [ ! -e "${dirname}${basename%.flac}.png" ] && (
                mkdir -p "${dirname}"
                sndfile-spectrogram --dyn-range=100 "${file}" 800 480 "${dirname}${basename%.flac}.png"
                [ -e `which convert` ] && (
                    convert -quality 90 -colors 256 "${dirname}${basename%.flac}.png" "${dirname}${basename%.flac}-conv.png"
                    mv "${dirname}${basename%.flac}-conv.png" "${dirname}${basename%.flac}.png"
                    [ -e `which advpng` ] && (
                        advpng -z4 "${dirname}${basename%.flac}.png"
                        )
                    )&:
            )
            echo $file complete
        done
}

