Как нарезать общий Flac на треки и конвертировать в MP3

Вот такой скриптик от сюда: http://vladimir-stupin.blogspot.ru/2010/08/flac-cue-mp3.html
Спасибо Автору!
Только автор для определения кодировки пользовался

enca -e *.cue

Но я просто её отключил, ибо криво сделанных FLACK она выдает:

ASCII/CRLF

Еще в iconv надо добавить ключик «-c», так как любят авторы обозначать композиции всякими «не здоровыми» символами.

#!/bin/sh
#FROMCP=`enca -e *.cue`
FROMCP="cp1251"
iconv -c -f $FROMCP -t UTF-8 *.cue > /tmp/list.cue

DATE=`grep "REM DATE" /tmp/list.cue | sed -e 's/REM DATE \(.*\)/\1/g'`
GENRE=`grep "REM GENRE" /tmp/list.cue | sed -e 's/REM GENRE \(.*\)/\1/g'`
COMMENT=`grep "REM COMMENT" /tmp/list.cue | sed -e 's/REM COMMENT \(.*\)/\1/g'`
NUMBER=`cueprint -d "%N" /tmp/list.cue`

shntool split -f /tmp/list.cue *.flac -t %n

for((I=1;I< =NUMBER;I++));
do
        cueprint -n $I -t "ARTIST="%p"\nALBUM="%T"\nTRACKNUMBER="%n"\nTITLE="%t"\n" /tmp/list.cue > /tmp/tags
        . /tmp/tags
        J=`printf "%02d" $I`
        lame -b 320 --cbr \
                --ty "$DATE" \
                --tg "$GENRE" \
                --tc "$COMMENT" \
                --ta "$ARTIST" \
                --tl "$ALBUM" \
                --tn "$TRACKNUMBER" \
                --tt "$TITLE" \
                --add-id3v2 \
                --id3v2-only \
                $J.wav $J.mp3
        rm $J.wav
done

rm /tmp/list.cue /tmp/tags

Иногда надо обработать другие кривые форматы. Для этого рекомендую вот такой скрипт:
http://hakushka.wordpress.com/2010/03/18/flac-ape-tta-wv-2-flack-tracks-cue/
Он режет по трекам любой кривой формат и flac в том числе.

#!/bin/bash
#############################
# зависимости:
# media-sound/shntool
# app-cdr/cuetools
# media-libs/flac
# media-sound/mac
# media-sound/ttaenc
# media-sound/wavpack
#
#############################

while read cuefile
do
 cue="${cuefile##*/}"
 obj=${cue%.cue}
 objdir="${cuefile%/*}"
 pushd "$objdir"

 if [ -f "$obj".flac ]; then
 shntool split -i "flac" -o "flac" -f "$cue" -t %n "$obj".flac \
 || echo "Не удалось разделить $obj.flac" \
 exit 1
 elif [ -f "$obj".ape ]; then
 shntool split -i "ape" -o "flac" -f "$cue" -t %n "$obj".ape \
 || echo "Не удалось разделить $obj.ape" \
 exit 1
 elif [ -f "$obj".tta ]; then
 shntool split -i "tta" -o "flac" -f "$cue" -t %n "$obj".tta \
 || echo "Не удалось разделить $obj.tta" \
 exit 1
 elif [ -f "$obj".wv ]; then
 shntool split -i "wv" -o "flac" -f "$cue" -t %n "$obj".wv \
 || echo "Не удалось разделить $obj.wv" \
 exit 1
 else
 echo "Файл $obj не найден, выходим."
 exit 1
 fi

 ln -s "$cue" tmp.cue
 for (( i=1 ; i < = $(cueprint -d '%N' tmp.cue) ; ++i ))
 do
 NN=$(printf '%02d' $i)
 [ -s "$NN.flac" ] && {
 cueprint -n $i -t \
 'ARRANGER=%A\nCOMPOSER=%C\nGENRE=%G\nMESSAGE=%M\nTRACKNUMBER=%n\nARTIST=%p\nTITLE=%t\nALBUM=%T\n' \
 tmp.cue | egrep -v '=$' | metaflac --import-tags-from=- $NN.flac
 mv $NN.flac "$NN - $(cueprint -n $i -t %t tmp.cue | sed -e "s,/,,g").flac"
 }
 done

 rm -f tmp.cue "$cue" "$obj".{flac,ape,tta} tags.tmp
 popd
done < <(find . -type f -iname "*.cue")

А далее для конвертации в mp3 можно применить вот такой скрипт

#! /bin/sh

for a in *.flac; do
    OUTF=${a%.flac}.mp3

    ARTIST=$(metaflac "$a" --show-tag=ARTIST | sed s/.*=//g)
    TITLE=$(metaflac "$a" --show-tag=TITLE | sed s/.*=//g)
    ALBUM=$(metaflac "$a" --show-tag=ALBUM | sed s/.*=//g)
    GENRE=$(metaflac "$a" --show-tag=GENRE | sed s/.*=//g)
    TRACKNUMBER=$(metaflac "$a" --show-tag=TRACKNUMBER | sed s/.*=//g)
    DATE=$(metaflac "$a" --show-tag=DATE | sed s/.*=//g)

    flac -c -d "$a" | lame -m j -q 0 --vbr-new -V 0 -s 44.1 - "$OUTF"
    id3 -t "$TITLE" -T "${TRACKNUMBER:-0}" -a "$ARTIST" -A "$ALBUM" -y "$DATE" -g "${GENRE:-12}" "$OUTF"
done

Только не забудьте удалить исходный «не резанный» flac.

Запись опубликована в рубрике Gentoo, Linux, Multimedia. Добавьте в закладки постоянную ссылку.

7 комментариев на «Как нарезать общий Flac на треки и конвертировать в MP3»

  1. александр говорит:

    Второй скрипт порезал все cue flac на отдельные треки. Причем прекрасно!
    Но не совсем понял: почему скрип порезал все альбомы.
    Открыл терминал-скопировал скрипт-нажал-enter
    и он порезал все альбомы, что у меня были с cue 🙂

    • sergey говорит:

      Наверно они находились в одном каталоге?
      Цикл for a in *.flac; do …
      Выискивает в каталоге файлы с расширением flac и тупо обрабатывает.

  2. александр говорит:

    Скрип порезал альбомы, которые были в списке воспроизведения проигрывателя!
    А, не каком языке написан скрип, СИ?

    • sergey говорит:

      Нет! Это обычный встроенный в оболочку. Называется BASH.
      Но можно написать и на других скриптовых языках.
      А С# это компилируемый язык.

  3. александр говорит:

    Похоже, мне немного нужно поучится.Забыл, что такое компилятор, смутно помню.
    Работаю инженером-энергетиком, сейчас второе образование — автоматизация.
    Насколько понял- специалист автоматизации: это не только контроллеры, датчики и электроника, но и SCADA и знание основ программирования!!
    Промышленные (и не только) ОС основанные на Unix (особенно Линукс) меня впечатляет!!!

    • sergey говорит:

      Компилятор это то, что из программного кода вам создаст исполняемый двоичный код. Например в DOS или Windows файлы с расширением .exe это исполняемые двоичные файлы. они готовы, чтобы их процессор переживал на прямую.
      А скрипты это программный код. который компилируется на лету интерпретатором скриптового языка перед тем как он прожуется процессором. В данный момент это BASH. Но может быть и CORN, PERL, Python и т д.

      В linux как правило его пишут в первой строчке
      #! /bin/bash
      или
      #! /bin/sh
      Что является тоже самое, ибо /bin/sh — это символьный линк на /bin/bash

  4. александр говорит:

    спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Анти-спам: выполните заданиеWordPress CAPTCHA