Ho “un intero album flac e un file cue per esso. Come posso dividerlo in un flac per traccia?

Sono un utente di KDE, quindi preferirei un modo KDE / Qt. Vorrei vedere anche le risposte della riga di comando e di altre GUI, ma non sono il mio metodo preferito.

Commenti

Risposta

Shnsplit può leggere direttamente un file cue, il che significa anche che può accedere agli altri dati dal file cue (non solo i punti di interruzione) e generare nomi di file più belli di split-*.flac:

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

Certo, questo rende più difficile usare cuetag.sh se il file flac originale si trova nella stessa directory.

Commenti

  • Utenti debian compagni: sudo apt-get install cuetools shntool
  • Probabilmente vorrai anche tagga i file con cuetag file.cue [0-9]*.flac
  • Mi serviva anche: sudo apt-get install flac
  • cuetools dipende già da flac, quindi …
  • Su Debian 10 cè un bug con flac a 24 bit. Non ‘ diviso. Però funziona bene su file a 16 bit.

Answer

Conosco solo un modo CLI. Avrai bisogno di cuetools e shntool.

cuebreakpoints file.cue | shnsplit -o flac file.flac cuetag.sh file.cue "split-*".flac 

Commenti

  • Grazie per questo Kambus. ‘ utilizzo cuebreakpoints file.cue | shnsplit -o flac file.flac da molto tempo. Il secondo bit aiuterà molto!
  • cuetag sembra non funzionare con nomi di file contenenti spazi ma dopo averli rimossi ha funzionato.

Answer

Flacon è una GUI open source intuitiva che fa esattamente questo: dividi un FLAC con un CUE.

Flacon estrae singole tracce da un grande file audio contenente lintero album di musica e le salva come audio separato File. Per fare ciò, utilizza le informazioni dal file CUE appropriato.

Supporta tra le altre cose:

Formati di input supportati: WAV, FLAC, APE, WavPack, True Audio (TTA).

Formati supportati: FLAC, WAV, WavPack, AAC, OGG o MP3.

Rilevamento automatico del set di caratteri per i file CUE.

Per utilizzarlo è sufficiente aprire il *.cue file con Flacon. Dovrebbe quindi rilevare automaticamente il grande file *.flac (in caso contrario, puoi specificarlo manualmente), quindi dovresti selezionare il formato di output Flac (e facoltativamente configurare il codificatore) e avviare il processo di conversione.

Flacon v5.4.0

Commenti

  • Benvenuto a Unix & Linux Stack Exchange! Sebbene questo possa teoricamente rispondere alla domanda, sarebbe preferibile includere le parti essenziali della risposta qui e fornire il collegamento come riferimento.
  • ancora aggiornato nel 2017
  • Non ‘ mi piace usare linterfaccia utente per le cose che posso fare sul terminale, ma stavo lottando con un album e questo era lunico modo per suddividere i file. Ti meriti una birra adesso amico

Rispondi

se vengono utilizzati file di alta qualità, shnsplit è felicemente di errore out con

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

fortunatamente il binario flac supporta –skip = mm: ss.ss e –until = mm: ss.ss così uno script può usare cuebreakpoints come questo:

[..] 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 

Commenti

  • Questo è lunico metodo che ha funzionato per me.

Risposta

Se hai impostato cue per utilizzare k3b in nelle impostazioni del tipo di file, k3b dividerà automaticamente il file se apri il file cue e ti consentirà di ri-copiarlo.

Rispondi

Esiste un progetto che funziona per diversi file di input: split2flac

Da la descrizione del progetto:

split2flac divide una grande immagine audio APE / FLAC / TTA / WV / WAV (o una raccolta di tali file , ricorsivamente) con foglio CUE in tracce FLAC / M4A / MP3 / OGG_VORBIS / WAV con tag, rinomina, conversione del set di caratteri del foglio di cue, immagini di copertina dellalbum. Utilizza anche il file di configurazione, quindi non è necessario passare ogni volta molti argomenti, solo un file di input. Dovrebbe funzionare in qualsiasi shell conforme a POSIX.

Risposta

Ho trovato mac (che è il comando che shntool ha utilizzato per decodificare i file APE) è molto meno tollerante di ffmpeg se il file di origine contiene errori minori.

Normalmente ffmpeg dovrebbe comunque convertire completamente il file mentre mac molto probabilmente genera un errore durante lelaborazione.

Quindi ho finito per scrivere uno script per la divisione del file APE analizzando il file CUE e convertendo il file APE in file FLAC separati da titoli utilizzando 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) 

Commenti

  • Potresti voler cambiare if os.path.isfile(tmpfile) in if tmpfile != filename and os.path.isfile(tmpfile) per evitare di eliminare il file originale in caso di errore.
  • La condizione per impostare lartista della traccia deve essere se len(records)>0.

Risposta

shntool su Ubuntu 14.04

snhtool manca la mac (Monkey “s Audio Console) dipendenza eseguibile e lunico pacchetto che sono riuscito a trovare era nel 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 è una GUI per shntool, ma viene fornita con tutti i suoi codec necessita … altrimenti ho ricevuto lerrore:

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 

Risposta

Qui è uno script PHP:

 <?php $s_cue = $argv[1]; $a_cue = file($s_cue); $n_row = -1; foreach ($a_cue as $s_row) { $s_trim = trim($s_row); $a_row = str_getcsv($s_trim, " "); if (preg_match("/^FILE\s/", $s_row) == 1) { $s_file = $a_row[1]; } if (preg_match("/^\s+TRACK\s/", $s_row) == 1) { $n_row++; $a_table[$n_row]["track"] = $a_row[1]; } if (preg_match("/^\s+TITLE\s/", $s_row) == 1) { $a_table[$n_row]["title"] = $a_row[1]; } if (preg_match("/^\s+PERFORMER\s/", $s_row) == 1) { $a_table[$n_row]["artist"] = $a_row[1]; } if (preg_match("/^\s+INDEX\s/", $s_row) == 1) { $s_dur = $a_row[2]; $a_frame = sscanf($s_dur, "%d:%d:%d", $n_min, $n_sec, $n_fra); $n_index = $n_min * 60 + $n_sec + $n_fra / 75; $a_table[$n_row]["ss"] = $n_index; if ($n_row > 0) { $a_table[$n_row - 1]["to"] = $n_index; } } } $a_table[$n_row]["to"] = 10 * 60 * 60; foreach ($a_table as $m_row) { $a_cmd = [ "ffmpeg", "-i", $s_file, "-ss", $m_row["ss"], "-to", $m_row["to"], "-metadata", "artist=" . $m_row["artist"], "-metadata", "title=" . $m_row["title"], "-metadata", "track=" . $m_row["track"], $m_row["track"] . " " . $m_row["title"] . ".m4a" ]; $a_esc = array_map("escapeshellarg", $a_cmd); $s_esc = implode(" ", $a_esc); system($s_esc); }  

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *