Чем порезать .flac на отдельные треки

Анатолий anatolevd на gmail.com
Ср Ноя 7 12:54:59 UTC 2012


Я в 10.04 пользовался вот этой программой
http://gtk-apps.org/content/show.php/gCue2tracks?content=80703
(дополнительно могут понадобиться: shorten, mac, flake, wavpack,
OptimFROG, ttaenc, apetag, lame, id3v2, vorbis-tools) и скриптом (нужно
сделать исполняемым, положить в папку с файлом и запустить). Скрипт
найден в интернете, автора указать не могу.

07.11.2012 03:42, Krosheninnikov Artem пишет:
> Вечер добрый,
> помнится, такой вопрос поднимался уже не раз, чем можно порезать .flac
> файл на отдельные треки (можно тоже во флаке), имея, например, файл
> .cue ( если он может помочь, конечно же)?
>

----------- следущая часть -----------
#!/bin/bash
#
# расчленяет огромный lossless файл на FLAC члены по меткам треков из CUE
# использование: запустить в той директории, где хранятся CUE и lossless файл
#

# немножко цвета
RED='\e[1;31m'
GREEN='\e[1;32m'
BLUE='\e[1;34m'
NC='\e[0m'              # отмена цвета

INPUT=${PWD##*/}        # нормальные люди называют папку именем исполнителя/альбома

# функция оповещает об успехе последней операции, и при отсутствие его,
# произносится заклинание Avada Kedavra, затея умирает с правильным exit status
success(){
if (($1))
        then
                # отличное место дабы прикручивать логи вроде echo $INPUT >> fail.log
                echo -e "Bad news, Harry, ${BLUE}$2${NC} goes ${RED}wrong!${NC} "
                notify-send --icon=gtk-no "Fail" "at $2"
                exit $1
fi
        echo -e "Harry, at ${BLUE}$2${NC} is ${GREEN}all ok!${NC} "
}

# несколько пустых тэгов, ничего особенного
GENRE=""
DATE=""

# найдёт CUE файл разметки
CUEFILE=$(find . -maxdepth 1 -iname "*.cue" | head -n 1)
echo -e "${BLUE}$CUEFILE${NC} "

# перекодирует CUE файл в UTF8
enconv -L ru -x UTF8 "$CUEFILE"
success $? enconv

# грязный хак чтоб получить жанр и год из CUE файла. а всё потому,
# что cuetag.sh (а точнее cueprint) не работает должным образом,
# а мейнтермеру всё равно. такие дела.
parsecue(){
        GENRE=$(head -n 6 "$CUEFILE" | grep -i GENRE | sed "s/REM GENRE //i" )
        DATE=$(head -n 6 "$CUEFILE" | grep -i "DATE" | sed "s/REM DATE //i" )
}

# найдём и запомним APE/FLAC/WV файл, это самый толстый
BIGONE=$(ls -S | grep -i --regex="\.ape\|\.flac\|\.wv" | head -n 1)
if [ -n "$BIGONE" ]
        then
                # распилим его на отдельные FLAC части
                cuebreakpoints "$CUEFILE" | shnsplit -o flac "$BIGONE"
                success $? shnsplit
        else
                # файла нет, плохие новости
                notify-send --icon "gtk-no" "No Audiofile to Split" "${PWD##*/}"
                exit 1
fi

# проставим тэги из CUE в новые FLAC части, магия.
cuetag "$CUEFILE" split-track*.flac ;
success $? cuetag

# напарсим не хватающих тэгов жанра и года выпуска из CUE файла.
parsecue
success $? parsecue

# приберёмся
rm -f "$BIGONE"
mkdir .log
mv *?.log .log
mv *.cue .log
success $? cleanup


# впишем тэги и приведём имена файлов нарезанных частей в человеческий вид
for SLICE in split-track*.flac; do
        metaflac --set-tag "GENRE=$GENRE" --set-tag "DATE=$DATE" "$SLICE"
        ARTIST=$(metaflac "$SLICE" --show-tag=ARTIST | sed s/.*=//g)
        TITLE=$(metaflac "$SLICE" --show-tag=TITLE | sed s/.*=//g)
        TRACKNUMBER=$(metaflac "$SLICE" --show-tag=TRACKNUMBER | sed s/.*=//g)
        mv "$SLICE" "`printf %02g $TRACKNUMBER` - $ARTIST - $TITLE.flac"               
done
success $? rename

# вкусняшки для глаз: найдём все маленькие картинки и сохраним их имена в /tmp/flac_icons
COUNT=$(find . -size -300k -iname "*.png" -o -size -300k -name "*.jpg" | tee /tmp/flac_icons | wc -l)
if (($COUNT))
        then           
                # возможно есть изображение с названием front? возьмём его на заметку
                ICONfile=$(grep -m 1 -i front /tmp/flac_icons)
                # нет ?
                if (($?))      
                         then
                                # тогда возьмём случайную
                                ICONfile=$(cat /tmp/flac_icons | awk NR==$((($RANDOM % $COUNT)+1)) )
                fi
                # добавим путь
                ICON=$PWD/${ICONfile#*/}
        # что, совсем ни одной нету? в эфир пойдёт стандартный символ
        else                   
                ICON=gtk-yes
fi

# хорошо постарались, о чём и напомним.
notify-send --icon "$ICON" "Ready" "$INPUT"

exit 0


Подробная информация о списке рассылки ubuntu-ru