Dividir o arquivo de áudio com o arquivo cue

2

Eu tenho um arquivo FLAC e um arquivo CUE. Usando a linha de comando, gostaria de dividir esse arquivo, com uma faixa por arquivo.

    
por Steven Penny 03.04.2013 / 19:59

4 respostas

3

O software mais popular e robusto para fazer isso no Windows é CUETools , que é gratuito. É basicamente um aplicativo GUI e não pode ser facilmente configurado a partir da linha de comando, mas possui uma interface de linha de comando que pode ser usada para invocar a conversão com configurações estabelecidas na GUI.

Na GUI, escolha o perfil "converter" (o seletor está no canto superior esquerdo). Anote o Modelo na seção Caminhos do CUE; isso define para onde os novos arquivos irão. Se a seção Ação não estiver esmaecida, verifique se está em Encode, com o script "padrão" selecionado. Na seção Modo, selecione Faixas e desmarque a caixa PrecisãoRip, a menos que você queira verificar antes de converter. Defina a saída de áudio para o tipo de arquivos de áudio que você deseja. Nas Configurações avançadas (ícone de roda dentada no canto superior direito), na aba CUETools, manuseio de lacunas, escolha Lacunas Anexadas ou Lacunas Anexadas + HTOA, dependendo se você deseja que qualquer áudio que venha antes da pista 01 seja salvo em um arquivo separado ou descartado (normalmente será apenas uma fração de segundo de silêncio).

Agora feche a GUI; suas configurações são salvas automaticamente. Na linha de comando, agora você pode executá-lo com essas configurações:

CUETools /convert infile.cue

O comando sairá imediatamente e uma pequena janela de GUI será aberta para mostrar o progresso e quaisquer mensagens de erro. Esta janela permanecerá aberta até você clicar no botão fechar. Se tudo correr bem, o CUETools irá gravar o (s) ficheiro (s) de áudio convertido (s) e uma folha de sugestões convertida numa nova pasta. Esta conversão de folha de sinalização é a principal vantagem sobre o uso do shntool; o novo arquivo .cue fará referência aos arquivos de áudio divididos. A CUETools também copiará o arquivo .log (se houver) para a nova pasta.

    
por 22.04.2013 / 09:37
1

Eu achei mac (que é o comando que shntool usado para decodificar arquivos APE) é muito menos tolerante do que ffmpeg se o arquivo de origem contiver pequenos erros.

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:20
0

Obtenha o programa MediaHuman Audio Converter.

Arraste e solte seu arquivo FLAC no campo e ele irá automaticamente desenrolar seu arquivo FLAC. Você pode então escolher o que você deseja converter.

Dica: Os nomes dos arquivos FLAC e CUE precisam ser exatamente os mesmos (exceto pela extensão do curso).

    
por 04.03.2018 / 05:57
0

Eu codifiquei um script python que faz o trabalho e também escrevo algumas tags e aceito uma imagem de capa do álbum para incorporar dentro dos arquivos de música. Ele usa o ffmpeg para dividir. Confira no github: albumSplitter .

Para usá-lo, forneça a chamada assim:

./albumSplitter.py flacFile.flac cueFile.cue outputFolder coverImage.jpg

Isso criaria um arquivo por música e receberia tags do arquivo cue.

Instale todas as dependências descritas na página do github para que funcione.

    
por 10.09.2018 / 00:36