Dividir archivo de audio con archivo cue

3

Tengo un archivo FLAC y un archivo CUE. Usando la línea de comando, me gustaría dividir este archivo, con una pista por archivo.

Steven Penny
fuente

Respuestas:

4

El software más popular y robusto para hacer esto en Windows es CUETools , que es gratuito. Es principalmente una aplicación GUI, y no se puede configurar fácilmente desde la línea de comandos, pero tiene una interfaz de línea de comandos que puede usar para invocar la conversión con la configuración establecida en la GUI.

En la GUI, elija el perfil "convertir" (el selector está en la esquina superior izquierda). Tome nota de la plantilla en la sección CUE Paths; Esto define a dónde irán los nuevos archivos. Si la sección Acción no está atenuada, asegúrese de que esté en Codificar, con la secuencia de comandos "predeterminada" seleccionada. En la sección Modo, elija Pistas y desactive la casilla AccurateRip, a menos que desee verificar antes de la conversión. Establezca la salida de audio a qué tipo de archivos de audio desea. En la Configuración avanzada (icono de engranaje en la esquina superior derecha), pestaña CUETools, Manejo de espacios, elija Gaps anexados o Gaps anexados + HTOA, dependiendo de si desea que el audio que viene antes de la pista 01 se guarde en un archivo separado o se descarte (normalmente solo será una fracción de segundo de silencio).

Ahora cierre la GUI; su configuración se guarda automáticamente. En la línea de comando, ahora puede ejecutarlo con esa configuración:

CUETools /convert infile.cue

El comando se cerrará de inmediato y se abrirá una pequeña ventana GUI para mostrarle el progreso y cualquier mensaje de error. Esta ventana permanecerá abierta hasta que haga clic en el botón Cerrar. Si todo va bien, CUETools escribirá los archivos de audio convertidos y una hoja de referencia convertida en una nueva carpeta. Esta conversión de hoja de referencia es la principal ventaja sobre el uso de shntool; el nuevo archivo .cue hará referencia a los archivos de audio divididos. CUETools también copiará el archivo .log (si lo hay) a la nueva carpeta.

Mike Brown
fuente
Gracias por la respuesta detallada, ¡la respuesta de 6 años sigue siendo útil! :)
varun
0

Descubrí macque (que es el comando que shntool usa para decodificar archivos APE) es mucho menos tolerante que ffmpegsi el archivo fuente contiene errores menores.

Normalmente ffmpegtodavía convertiría el archivo por completo mientras que macmuy probablemente arroje un error durante el procesamiento.

Así que terminé escribiendo un script para dividir el archivo APE analizando el archivo CUE y convirtiendo el archivo APE en archivos 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)
maullar
fuente
0

Obtenga el programa MediaHuman Audio Converter.

Arrastre y suelte su archivo FLAC en el campo y automáticamente desenrollará su archivo FLAC. Luego puede elegir a qué desea convertirlo.

Sugerencia: los nombres de archivo de los archivos FLAC y CUE deben ser exactamente los mismos (excepto la extensión, por supuesto).

usuario878664
fuente
0

Codifiqué un script de Python que hace el trabajo y también escribo algunas etiquetas y acepto una imagen de portada del álbum para incrustarla dentro de los archivos de la canción. Utiliza ffmpeg para dividir. Compruébalo en github: albumSplitter .

Para usarlo, la oferta lo llama así:

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

Esto crearía un archivo por canción y obtendría etiquetas del archivo cue.

Instale todas las dependencias descritas en la página de github para que funcione.

Disco
fuente
Lea cómo recomendar el software en las respuestas , particularmente los bits en negrita ; luego edite su respuesta para seguir las pautas allí. ¡Gracias!
bertieb