Jeg har et fuldt album flac og en cue-fil til det. Hvordan kan jeg opdele det i et flac pr. spor?

Jeg er KDE-bruger, så jeg foretrækker en KDE / Qt-måde. Jeg vil også gerne se kommandolinje og andre GUI-svar, men de er ikke min foretrukne metode.

Kommentarer

Svar

Shnsplit kan læse en cue-fil direkte, hvilket også betyder, at den kan få adgang til de andre data fra cue-filen (ikke kun breakpoints) og generere pænere filnavne end split-*.flac:

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

Det er givet, det gør det vanskeligere at bruge cuetag.sh, hvis den originale flac-fil er i samme bibliotek.

Kommentarer

  • Meddebianere: sudo apt-get install cuetools shntool
  • Du vil sandsynligvis også tag filerne med cuetag file.cue [0-9]*.flac
  • Jeg havde også brug for: sudo apt-get install flac
  • cuetools afhænger allerede af flac, så…
  • På Debian 10 er der en fejl med 24 bit flacs. Det vandt ‘ t split. Det fungerer dog fint på 16 bits filer.

Svar

Jeg kender kun en CLI-måde. Du har brug for cuetools og shntool.

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

Kommentarer

  • Tak for denne Kambus. Jeg ‘ har brugt cuebreakpoints file.cue | shnsplit -o flac file.flac i lang tid. 2. bit vil hjælpe meget!
  • cuetag ser ud til at bryde på filnavne, der indeholder mellemrum, men efter at have fjernet dem fungerede det.

Svar

Flacon er en intuitiv open source GUI, der gør nøjagtigt det: del en FLAC med en CUE.

Flacon udtrækker individuelle spor fra en stor lydfil, der indeholder hele musikalbummet og gemmer dem som separat lyd filer. For at gøre dette bruger den information fra den relevante CUE-fil.

Den understøtter blandt andet:

Understøttede inputformater: WAV, FLAC, APE, WavPack, True Audio (TTA).

Understøttede formater: FLAC, WAV, WavPack, AAC, OGG eller MP3.

Automatisk detektion af tegnsæt til CUE-filer.

For at bruge det behøver du kun at åbne *.cue fil med Flacon. Det skal derefter automatisk registrere den store *.flac -fil (hvis ikke, kan du angive dette manuelt), og derefter skal du vælge Flac-outputformat (og eventuelt konfigurere koderen) og starte konverteringsproces.

Flacon v5.4.0

Kommentarer

  • Velkommen til Unix & Linux Stack Exchange! Selvom dette teoretisk kan besvare spørgsmålet, ville være at foretrække at inkludere de væsentlige dele af svaret her og give linket til reference.
  • stadig opdateret i 2017
  • Jeg kan ikke ‘ ikke bruge UI til ting, jeg kan gøre på terminalen, men jeg kæmpede med et album og dette var den eneste måde at opdele filerne på. Du fortjener en øl nu mand

Svar

hvis der bruges filer i høj kvalitet, fejler shnsplit med glæde ud med

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

heldigvis understøtter flac binær –skip = mm: ss.ss og –until = mm: ss.ss så et script kan bruge cuebreakpoints som dette:

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

Kommentarer

  • Dette er den eneste metode, der fungerede for mig.

Svar

Hvis du har kø indstillet til at bruge k3b i i filtypeindstillingerne deler k3b filen automatisk, hvis du åbner cue-filen og giver dig mulighed for at rippe den igen.

Svar

Der er et projekt, der fungerer for flere inputfiler: split2flac

Fra projektbeskrivelsen:

split2flac deler et stort APE / FLAC / TTA / WV / WAV lydbillede (eller en samling af sådanne filer , rekursivt) med CUE-ark i FLAC / M4A / MP3 / OGG_VORBIS / WAV-spor med tagging, omdøbning, charset-konvertering af cue-ark, albumomslag. Det bruger også konfigurationsfil, så det er ikke nødvendigt at sende mange argumenter hver gang, kun en inputfil. Bør fungere i en hvilken som helst POSIX-kompatibel shell.

Svar

Jeg fandt mac (som er kommandoen, som shntool bruges til afkodning af APE-filer) er langt mindre tolerant end ffmpeg hvis kildefilen indeholder mindre fejl.

Normalt ville ffmpeg stadig konvertere filen fuldstændigt, mens mac sandsynligvis kaster en fejl under behandlingen.

Så jeg endte med at skrive et script til opsplitning af APE-fil ved at analysere CUE-filen og konvertere APE-filen til FLAC-filer adskilt af titler ved hjælp af 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) 

Kommentarer

  • Du vil måske ændre if os.path.isfile(tmpfile) til if tmpfile != filename and os.path.isfile(tmpfile) for at undgå at slette den originale fil ved en fejl.
  • Betingelsen for at indstille sporkunstneren skal være, hvis len(records)>0.

Svar

shntool på Ubuntu 14.04

snhtool mangler mac (Monkeys Audio Console) eksekverbar afhængighed, og den eneste pakke, jeg kunne finde, var i 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 er et GUI til shntool, men det kommer med alle codecs det brug … ellers fik jeg fejlen:

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 

Svar

Her er et PHP-script:

 <?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); }  

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *