Mám k dispozici celý flac alba a cue soubor. Jak to mohu rozdělit do flac na stopu?

Jsem uživatel KDE, takže bych upřednostňoval způsob KDE / Qt. Rád bych viděl také příkazový řádek a další odpovědi GUI, ale nejsou to moje preferovaná metoda.

Komentáře

odpověď

Shnsplit může číst přímo startovací soubor, což také znamená, že má přístup k dalším datům ze startovacího souboru (nejen k bodům přerušení) a generovat hezčí názvy souborů než split-*.flac:

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

Je pravda, že je obtížnější použít cuetag.sh, pokud je původní soubor flac ve stejném adresáři.

Komentáře

  • Další uživatelé debian: sudo apt-get install cuetools shntool
  • Pravděpodobně také chcete označte soubory pomocí cuetag file.cue [0-9]*.flac
  • potřeboval jsem také: sudo apt-get install flac
  • cuetools již záleží na flac, takže…
  • V Debianu 10 je chyba s 24bitovými flakty. Vyhrála ‚ t rozdělení. Funguje to ale na 16 bitových souborech.

Odpovědět

Znám pouze způsob CLI. Budete potřebovat cuetools a shntool.

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

Komentáře

  • Děkujeme za tento Kambus. ‚ používám cuebreakpoints file.cue | shnsplit -o flac file.flac dlouhou dobu. Druhý bit hodně pomůže!
  • cuetag se zdá, že se rozpadá na názvy souborů obsahující mezery, ale po jejich odstranění to fungovalo.

Odpověď

Flacon je intuitivní open-source grafické uživatelské rozhraní, které přesně to: rozdělte FLAC pomocí CUE.

Flacon extrahuje jednotlivé stopy z jednoho velkého zvukového souboru obsahujícího celé album hudby a ukládá je jako samostatný zvuk soubory. K tomu využívá informace z příslušného souboru CUE.

Podporuje mimo jiné:

Podporované vstupní formáty: WAV, FLAC, APE, WavPack, True Audio (TTA).

Podporované formáty: FLAC, WAV, WavPack, AAC, OGG nebo MP3.

Automatická detekce znakové sady pro soubory CUE.

Chcete-li ji použít, stačí otevřít *.cue soubor s Flaconem. Poté by měl automaticky detekovat velký *.flac soubor (pokud ne, můžete jej zadat ručně), pak byste měli vybrat výstupní formát Flac (a volitelně nakonfigurovat kodér) a spustit proces převodu.

Flacon v5.4.0

Komentáře

  • Vítejte na Unix & Linux Stack Exchange! I když to může teoreticky odpovědět na otázku, bylo by lepší zahrnout zde podstatné části odpovědi a poskytnout odkaz pro referenci.
  • stále aktualizováno v roce 2017
  • Nechci ‚ používat uživatelské rozhraní pro věci, které mohu na terminálu dělat, ale zápasil jsem s albem a to byl jediný způsob rozdělení souborů. Zasloužíš si pivo, člověče.

Odpovědět

pokud se používají vysoce kvalitní soubory, shnsplit šťastně chybuje out with

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

naštěstí flac binární podporuje –skip = mm: ss.ss a –until = mm: ss.ss, takže skript může použít cuebreakpoints jako toto:

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

Komentáře

  • Toto je jediná metoda, která pro mě fungovala.

Odpověď

Pokud máte nastaveno tágo, použijte k3b v v nastavení typu souboru k3b soubor automaticky rozdělí, pokud otevřete soubor tága, a umožní vám jeho opětovné kopírování.

Odpovědět

Existuje projekt, který funguje pro několik vstupních souborů: split2flac

od popis projektu:

split2flac rozděluje jeden velký zvukový obraz APE / FLAC / TTA / WV / WAV (nebo soubor takových souborů , rekurzivně) s CUE listem do skladeb FLAC / M4A / MP3 / OGG_VORBIS / WAV se značkováním, přejmenováním, charsetovou konverzí cue listu, obrázky obalů alba. Používá také konfigurační soubor, takže není nutné pokaždé předávat spoustu argumentů, pouze vstupní soubor. Mělo by fungovat v jakémkoli prostředí kompatibilním s POSIX.

odpověď

našel jsem mac (což je příkaz, který shntool slouží k dekódování souborů APE) je mnohem méně tolerantní než ffmpeg pokud zdrojový soubor obsahuje drobné chyby.

Normálně ffmpeg by soubor přesto zcela převedl, zatímco mac s největší pravděpodobností při zpracování vyvolá chybu.

Takže jsem nakonec napsal skript pro rozdělení souboru APE analýzou souboru CUE a převedením souboru APE na soubory FLAC oddělené názvy pomocí 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) 

Komentáře

  • Možná budete chtít změnit if os.path.isfile(tmpfile) na if tmpfile != filename and os.path.isfile(tmpfile) aby se omylem neodstranil původní soubor.
  • Podmínkou pro nastavení interpreta musí být, pokud len(records)>0.

Odpověď

shntool na Ubuntu 14.04

snhtool chybí mac (Monkeys Audio Console) spustitelná závislost a jediný balíček, který jsem zjistil, byl v 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 je GUI pro shntool, ale je dodáván se všemi kodeky, které obsahuje potřebuje … jinak jsem dostal chybu:

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 

odpověď

zde je skript 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); }  

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *