Como faço para dividir um flac com uma sugestão?

64

Eu tenho um flac de álbum completo e um arquivo de sugestão para ele. Como posso dividir isso em um flac por trilha? Eu sou um usuário do KDE, então eu preferiria um jeito KDE / QT, eu gostaria de ver a linha de comando e outras respostas gui também, mas elas não são o meu método preferido.

    
por xenoterracide 29.03.2011 / 00:57

8 respostas

3

Se você tiver a sugestão definida para usar k3b nas configurações do tipo de arquivo, k3b irá dividir o arquivo automaticamente se você abrir o arquivo de sugestão e permitir que você copie novamente.

    
por 05.04.2011 / 01:31
61

O Shnsplit pode ler um arquivo cue diretamente, o que também significa que ele pode acessar os outros dados do arquivo cue (não apenas os pontos de interrupção) e gerar nomes de arquivos mais legais que 'split - * .flac':

shnsplit -f file.cue -t %n-%t -o flac file.flac

Concedido, isso dificulta o uso do cuetag.sh se o arquivo flac original estiver no mesmo diretório.

    
por 04.02.2012 / 20:17
20

Eu só conheço um jeito CLI. Você precisará de cuetools e shntool.

cuebreakpoints file.cue | shnsplit -o flac file.flac
cuetag.sh file.cue "split-*".flac
    
por 29.03.2011 / 13:20
14

Flacon é uma GUI intuitiva de código aberto que faz exatamente isso: dividir um FLAC com um CUE.

Flacon extracts individual tracks from one big audio file containing the entire album of music and saves them as separate audio files. To do this, it uses information from the appropriate CUE file.

Ele suporta, entre outras coisas:

Supported input formats: WAV, FLAC, APE, WavPack, True Audio (TTA).

Supported out formats: FLAC, WAV, WavPack, AAC, OGG or MP3.

Automatic character set detection for CUE files.

Para usá-lo, você só precisa abrir o arquivo *.cue com flacon ; ele deve detectar automaticamente o arquivo FLAC grande (se não, você pode especificá-lo manualmente) e, em seguida, selecionar o formato de saída FLAC ( e, opcionalmente, configure o codificador) e inicie o processo de conversão.

    
por 03.11.2013 / 16:40
6

se arquivos de alta qualidade estiverem sendo usados, o shnsplit está feliz em errar com

shnsplit: error: m:ss.ff format can only be used with CD-quality files

felizmente, o binário flac suporta --skip = mm: ss.ss e --until = mm: ss.ss para que um script possa usar pontos de quebra como:

[..]
time[0]="00:00.00"
c=1
for ts in $(cuebreakpoints "${cue_file}"); do
    time[${c}]=${ts}
    c=$((c+1))
done
time[${c}]='-0'
for ((i=0;i<$((${#time[@]}-1));i++)); do
    trackno=$(($i+1))
    TRACKNUMBER="$(printf %02d ${trackno})"
    title="$(cueprint --track-number ${trackno} -t '%t' "${cue_file}")"
    flac --silent --exhaustive-model-search --skip=${time[$i]} --until=${time[$(($i+1))]} --tag=ARTIST="${ARTIST}" --tag=ALBUM="${ALBUM}" --tag=DATE="${DATE}" --tag=TITLE="${title}" --tag=TRACKNUMBER="${TRACKNUMBER}" "${aud_file}" --output-name="${TRACKNUMBER}-${title}.flac"
done
    
por 06.02.2013 / 20:38
1

Existe um projeto que funciona para vários arquivos de entrada: split2flac

A partir da descrição do projeto:

split2flac splits one big APE/FLAC/TTA/WV/WAV audio image (or a collection of such files, recursively) with CUE sheet into FLAC/M4A/MP3/OGG_VORBIS/WAV tracks with tagging, renaming, charset conversion of cue sheet, album cover images. It also uses configuration file, so no need to pass a lot of arguments every time, only an input file. Should work in any POSIX-compliant shell.

    
por 25.08.2015 / 17:42
1

Descobri que mac (que é o comando que shntool usou para decodificar arquivos APE) é muito menos tolerante do que ffmpeg se o arquivo de origem contiver erros menores.

Normalmente, ffmpeg ainda converteria o arquivo completamente, enquanto mac provavelmente geraria um erro durante o processamento.

Então acabei escrevendo um script para dividir o arquivo APE analisando o arquivo CUE e convertendo o arquivo APE em arquivos FLAC separados por títulos usando ffmpeg:

#!/usr/bin/env python2.7

import subprocess as subp
import sys
import os
from os.path import splitext, basename
import random
import glob

records = []
filename = ""
album=''
alb_artist=''
codec = 'flac'
ffmpeg_exec = 'ffmpeg'
encodingList = ('utf-8','euc-kr', 'shift-jis', 'cp936', 'big5')

filecontent = open(sys.argv[1]).read()
for enc in encodingList:
    try:
        lines = filecontent.decode(enc).split('\n')
        encoding = enc
        break
    except UnicodeDecodeError as e:
        if enc == encodingList[-1]:
            raise e
        else:
            pass

for l in lines:
    a = l.split()
    if not a:
        continue
    if a[0] == "FILE":
        filename = ' '.join(a[1:-1]).strip('\'"')
    elif a[0]=='TRACK':
        records.append({})
        records[-1]['index'] = a[1]
    elif a[0]=='TITLE':
        if len(records)>0:
            records[-1]['title'] = ' '.join(a[1:]).strip('\'"')
        else:
            album =  ' '.join(a[1:]).strip('\'"')
    elif a[0]=='INDEX' and a[1]=='01':
        timea = a[2].split(':')
        if len(timea) == 3 and int(timea[0]) >= 60:
            timea.insert(0, str(int(timea[0])/60))
            timea[1] = str(int(timea[1])%60)
        times = '{0}.{1}'.format(':'.join(timea[:-1]), timea[-1])
        records[-1]['start'] = times
    elif a[0]=='PERFORMER':
        if len(records)>1:
            records[-1]['artist'] = ' '.join(a[1:]).strip('\'"')
        else:
            alb_artist = ' '.join(a[1:]).strip('\'"')

for i, j in enumerate(records):
    try:
        j['stop'] = records[i+1]['start']
    except IndexError:
        pass

if not os.path.isfile(filename):
    tmpname = splitext(basename(sys.argv[1]))[0]+splitext(filename)[1]
    if os.path.exists(tmpname):
        filename = tmpname
        del tmpname
    else:
        for ext in ('.ape', '.flac', '.wav', '.mp3'):
            tmpname = splitext(filename)[0] + ext
            if os.path.exists(tmpname):
                filename = tmpname
                break

if not os.path.isfile(filename):
    raise IOError("Can't not find file: {0}".format(filename))

fstat = os.stat(filename)
atime = fstat.st_atime
mtime = fstat.st_mtime

records[-1]['stop'] = '99:59:59'

if filename.lower().endswith('.flac'):
    tmpfile = filename
else:
    tmpfile = splitext(filename)[0] + str(random.randint(10000,90000)) + '.flac'

try:
    if filename != tmpfile:
        ret = subp.call([ffmpeg_exec, '-hide_banner', '-y', '-i', filename, 
            '-c:a', codec,'-compression_level','12','-f','flac',tmpfile])

        if ret != 0:
            raise SystemExit('Converting failed.')

    for i in records:
        output = i['index'] +' - '+ i['title']+'.flac'
        commandline = [ffmpeg_exec, '-hide_banner', 
        '-y', '-i', tmpfile,
        '-c', 'copy', 
        '-ss', i['start'], '-to', i['stop'],
        '-metadata', u'title={0}'.format(i['title']), 
        '-metadata', u'artist={0}'.format(i.get('artist', '')),
        '-metadata', u'performer={0}'.format(i.get('artist', '')),
        '-metadata', u'album={0}'.format(album), 
        '-metadata', 'track={0}/{1}'.format(i['index'], len(records)), 
        '-metadata', u'album_artist={0}'.format(alb_artist), 
        '-metadata', u'composer={0}'.format(alb_artist), 
        '-metadata', 'encoder=Meow', 
        '-write_id3v1', '1', 
        output]
        ret = subp.call(commandline)
        if ret == 0:
            os.utime(output, (atime, mtime))
finally:
    if os.path.isfile(tmpfile):
        os.remove(tmpfile)
    
por 10.12.2015 / 16:27
1

shntool no Ubuntu 14.04

snhtool não possui a dependência executável mac (Monkey's Audio Console), e o único pacote que eu encontrei foi no flacon PPA:

sudo add-apt-repository -y ppa:flacon
sudo apt-get update
sudo apt-get install -y flacon shntool
shntool split -f *.cue -o flac -t '%n - %p - %t' *.ape

flacon é uma GUI para shntool , mas vem com todos os codecs necessários ... senão recebi o erro:

shnsplit: warning: failed to read data from input file using format: [ape]
shnsplit:          + you may not have permission to read file: [example.ape]
shnsplit:          + arguments may be incorrect for decoder: [mac]
shnsplit:          + verify that the decoder is installed and in your PATH
shnsplit:          + this file may be unsupported, truncated or corrupt
shnsplit: error: cannot continue due to error(s) shown above
    
por 31.07.2017 / 14:56