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.
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.
Respuestas:
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.
Descubrí mac
que (que es el comando que shntool usa para decodificar archivos APE) es mucho menos tolerante que ffmpeg
si el archivo fuente contiene errores menores.
Normalmente ffmpeg
todavía convertiría el archivo por completo mientras que mac
muy 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)
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).
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.