Van egy teljes albumlemezem és egy jelzőfájlom hozzá. Hogyan tudom ezt felosztani sávonként flac-ra?
KDE felhasználó vagyok, ezért inkább egy KDE / Qt módot szeretnék. Szeretnék látni parancssori és egyéb GUI válaszokat is, de ezek nem az én preferált módszerem.
Megjegyzések
- superuser.com/questions/251362/…
Válasz
Az Shnsplit képes közvetlenül olvasni egy jelzőfájlt, ami azt is jelenti, hogy hozzáférhet a jelzőfájl többi adatához (nem csak a töréspontokhoz), és szebb fájlneveket generál, mint a split-*.flac
:
shnsplit -f file.cue -t %n-%t -o flac file.flac
Megengedett, ez megnehezíti a cuetag.sh használatát, ha az eredeti flac fájl ugyanabban a könyvtárban található.
Megjegyzések
- Debian felhasználók:
sudo apt-get install cuetools shntool
- Valószínűleg Ön is szeretné címkézze fel a fájlokat a következővel:
cuetag file.cue [0-9]*.flac
- Szükségem volt még:
sudo apt-get install flac
- a cuetools már függ flac, tehát…
- A Debian 10-en van egy hiba 24 bites flac-okkal. ‘ nem lett felosztva. Pedig 16 bites fájlokon jól működik.
Válasz
Csak CLI módot ismerek. Szüksége lesz cuetools-ra és shntool-ra.
cuebreakpoints file.cue | shnsplit -o flac file.flac cuetag.sh file.cue "split-*".flac
Megjegyzések
- Köszönjük ezt a Kambust. ‘ régóta használom a
cuebreakpoints file.cue | shnsplit -o flac file.flac
-et. A 2. bit sokat segít! -
cuetag
úgy tűnik, hogy megtörik a szóközt tartalmazó fájlneveken, de azok eltávolítása után bevált.
Válasz
Flacon egy intuitív nyílt forráskódú grafikus felhasználói felület, amely nem pontosan ez: ossza fel a FLAC-ot egy CUE-val.
A Flacon kivonja az egyes zeneszámokat egy nagy hangfájlból, amely az egész zenei albumot tartalmazza, és külön hangként menti őket. fájlokat. Ehhez a megfelelő CUE fájl adatait használja fel.
Többek között támogatja:
Támogatott bemeneti formátumok: WAV, FLAC, APE, WavPack, True Audio (TTA).
Támogatott kimeneti formátumok: FLAC, WAV, WavPack, AAC, OGG vagy MP3.
Automatikus karakterkészlet-észlelés CUE fájlokhoz.
A használatához csak a *.cue
fájl a Flaconnal. Ezután automatikusan észlelnie kell a nagy *.flac
fájlt (ha nem, akkor ezt manuálisan is megadhatja), majd válassza a Flac kimeneti formátumot (és opcionálisan konfigurálja a kódolót), és indítsa el a átalakítási folyamat.
Megjegyzések
- Üdvözöljük a Unix & Linux Stack Exchange-hez! Noha ez elméletileg megválaszolhatja a kérdést, előnyösebb lenne , ha a válasz lényeges részeit ide illesztené, és megadná a hivatkozást.
- még mindig frissült 2017-ben
- nem szeretem a felhasználói felületet használni olyan dolgokhoz, amelyeket a terminálon megtehetek, de egy albummal küzdöttem, és csak ez volt a fájlok felosztásának módja. Megérdemel egy sört most ember
Válasz
ha kiváló minőségű fájlokat használnak, az shnsplit boldogan hibázik ki
shnsplit: error: m:ss.ff format can only be used with CD-quality files
szerencsére a flac binárisan támogatja a –skip = mm: ss.ss és –until = mm: ss.ss fájlokat, így egy szkript használhatja Ilyen cuebreakpointok:
[..] 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
Megjegyzések
- Ez az egyetlen módszer, ami nekem bevált.
Válasz
Ha be van állítva, hogy a k3b
szót használja a fájltípus beállításaiban a k3b
automatikusan fel fogja osztani a fájlt, ha megnyitja a jelzőfájlt, és lehetővé teszi az újrarippelést.
Válasz
Van egy projekt, amely több bemeneti fájlhoz is használható: split2flac
a projekt leírása:
a split2flac feloszt egy nagy APE / FLAC / TTA / WV / WAV hangképet (vagy ilyen fájlok gyűjteményét) , rekurzív módon) a CUE lapdal FLAC / M4A / MP3 / OGG_VORBIS / WAV sávokba címkézéssel, átnevezéssel, a jelző lap, karakterkészlet átalakításával, album borító képeivel. Konfigurációs fájlt is használ, így nem kell minden alkalommal sok argumentumot megadni, csak egy bemeneti fájlt. Bármely POSIX-kompatibilis héjban működnie kell.
Válasz
Találtam A mac
(amely az a parancs, amelyet shntool
használt az APE fájlok dekódolásához) sokkal kevésbé toleráns, mint a / div> ha a forrásfájl kisebb hibákat tartalmaz.
Normál esetben a ffmpeg
továbbra is teljesen konvertálja a fájlt, míg a mac
valószínűleg hibát vet a feldolgozás során.
Így végül egy szkriptet írtam az APE fájl felosztására a CUE fájl elemzésével és az APE fájl FLF fájlokká konvertálásával címekkel elválasztva az ffmpeg segítségével:
#!/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)
Megjegyzések
- Érdemes megváltoztatni a
if os.path.isfile(tmpfile)
értéketif tmpfile != filename and os.path.isfile(tmpfile)
az eredeti fájl hibás törlésének elkerülése érdekében. - A műsorszám-előadó beállításának feltétele a
len(records)>0
.
Válasz
shntool
az Ubuntu 14.04
snhtool
hiányzik a mac
(Majom audio konzol) futtatható függőség, és egyetlen csomagot találtam a flacon
PPA-ban:
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
egy GUI a shntool
fájlhoz, de az összes vele együtt lévő kodekkel együtt szüksége van … különben a hibát kaptam:
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
Válasz
Itt egy PHP szkript:
<?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); }