Minulla on koko albumin flac ja sille viittatiedosto. Kuinka voin jakaa tämän flaciksi kappaletta kohti?
Olen ”KDE-käyttäjä”, joten haluaisin mieluummin KDE / Qt-tavan. Haluaisin nähdä myös komentorivin ja muut graafisen käyttöliittymän vastaukset, mutta ne eivät ole ensisijainen menetelmäni.
Kommentit
- superuser.com/questions/251362/…
Vastaa
Shnsplit voi lukea vihjetiedoston suoraan, mikä tarkoittaa myös, että se voi käyttää muita vihjeitä sisältäviä tietoja (ei vain katkaisupisteitä) ja luoda kauniimpia tiedostonimiä kuin split-*.flac
:
shnsplit -f file.cue -t %n-%t -o flac file.flac
Myönnetty, tämä vaikeuttaa cuetag.sh: n käyttöä, jos alkuperäinen flac-tiedosto on samassa hakemistossa.
Kommentit
- Debianin muut käyttäjät:
sudo apt-get install cuetools shntool
- Haluat todennäköisesti myös merkitse tiedostot tunnisteella
cuetag file.cue [0-9]*.flac
- Tarvitsin myös:
sudo apt-get install flac
- cuetools riippuu jo flac, joten…
- Debian 10: ssä on vika, jossa on 24 bittiä flaceja. Se ei jakanut ’. Se toimii kuitenkin hyvin 16-bittisissä tiedostoissa.
Vastaa
Tiedän vain CLI-tavan. Tarvitset cuetools-työkalun ja shntool-työkalun.
cuebreakpoints file.cue | shnsplit -o flac file.flac cuetag.sh file.cue "split-*".flac
Kommentit
- Kiitos tästä Kambuksesta. Olen ’ käyttänyt
cuebreakpoints file.cue | shnsplit -o flac file.flac
pitkään. Toinen bitti auttaa paljon! -
cuetag
näyttää rikkovan välilyöntejä sisältävillä tiedostonimillä, mutta poistettuaan se toimi.
Vastaus
Flacon on intuitiivinen avoimen lähdekoodin käyttöliittymä, joka täsmälleen näin: jaa FLAC CUE: lla.
Flacon poimii yksittäiset raidat yhdestä isosta äänitiedostosta, joka sisältää koko musiikkialbumin, ja tallentaa ne erillisenä äänenä. tiedostot. Tätä varten se käyttää tietoja asianmukaisesta CUE-tiedostosta.
Se tukee muun muassa:
Tuetut tulomuodot: WAV, FLAC, APE, WavPack, True Audio (TTA).
Tuetut ulostuloformaatit: FLAC, WAV, WavPack, AAC, OGG tai MP3.
CUE-tiedostojen automaattinen merkistöjen tunnistus.
Voit käyttää sitä vain avaamalla *.cue
tiedosto Flaconin kanssa. Sen pitäisi sen jälkeen automaattisesti tunnistaa iso *.flac
-tiedosto (jos ei, voit määrittää tämän manuaalisesti), ja sitten sinun tulisi valita Flac-tulostusmuoto (ja valinnaisesti määrittää kooderi) ja aloittaa muuntamisprosessi.
kommentit
- tervetuloa Unixiin & Linux Stack Exchange! Vaikka tämä voi teoriassa vastata kysymykseen, olisi parempi sisällyttää vastauksen olennaiset osat tähän ja antaa linkki viitteeksi.
- päivitetty edelleen vuonna 2017
- En halua ’ käyttää käyttöliittymää asioihin, joita voin tehdä terminaalissa, mutta kamppailin albumin kanssa, ja tämä oli ainoa tapa jakaa tiedostot. Ansaitset oluen nyt mies
Vastaa
jos käytetään korkealaatuisia tiedostoja, shnsplit tekee mielellään virheitä ulos
shnsplit: error: m:ss.ff format can only be used with CD-quality files
onneksi flac-binaarituki tukee –skip = mm: ss.ss ja –until = mm: ss.ss, jotta komentosarja voi käyttää tällaiset cuebreakpointit:
[..] 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
Kommentit
- Tämä on ainoa menetelmä, joka toimi minulle.
vastaus
Jos olet asettanut vihjeen käyttämään k3b
tiedostotyypin asetuksissa k3b
jakaa tiedoston automaattisesti, jos avaat vihjetiedoston ja annat sinun repäistä uudelleen.
Vastaa
On projekti, joka toimii useilla syötetiedostoilla: split2flac
Lähettäjä projektin kuvaus:
split2flac jakaa yhden suuren APE / FLAC / TTA / WV / WAV-äänikuvan (tai kokoelman tällaisia tiedostoja) , rekursiivisesti) CUE-arkin avulla FLAC / M4A / MP3 / OGG_VORBIS / WAV-kappaleiksi, joissa on koodaus, uudelleennimeäminen, merkkilevyn merkintämuunnos, albumin kansikuvat. Se käyttää myös määritystiedostoa, joten sinun ei tarvitse antaa joka kerta paljon argumentteja, vain syötetiedosto. Pitäisi toimia missä tahansa POSIX-yhteensopivassa kuoressa.
Vastaa
Löysin mac
(joka on komento, jota shntool
käytetään APE-tiedostojen dekoodaamiseen) on vähemmän suvaitsevainen kuin ffmpeg
jos lähdetiedosto sisältää pieniä virheitä.
Normaalisti ffmpeg
muuntaa tiedoston edelleen kokonaan, kun taas mac
heittää todennäköisesti virheen käsittelyn aikana.
Joten päädyin kirjoittamaan komentosarjan APE-tiedoston jakamiseksi jäsentämällä CUE-tiedoston ja muuntamalla APE-tiedosto FLAC-tiedostoiksi, jotka on eroteltu otsikoilla 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)
Kommentit
- Haluat ehkä muuttaa
if os.path.isfile(tmpfile)
arvoksiif tmpfile != filename and os.path.isfile(tmpfile)
välttää alkuperäisen tiedoston poistaminen virheestä. - Kappaleen esittäjän asettamisen edellytyksen on oltava, jos
len(records)>0
.
Vastaus
shntool
Ubuntu 14.04
snhtool
puuttuu mac
(Apinan äänikonsoli) suoritettava riippuvuus, ja ainoa paketti, jonka löysin, oli flacon
PPA: ssa:
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
on shntool
-käyttöliittymä, mutta se sisältää kaikki sen koodekit tarvitsee … muuten sain virheen:
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
Vastaa
Täällä on PHP-komentosarja:
<?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); }