Mam pełny album flac i plik cue. Jak mogę podzielić to na plik flac na ścieżkę?

Jestem użytkownikiem KDE, więc wolałbym sposób KDE / Qt. Chciałbym również zobaczyć odpowiedzi z wiersza poleceń i innych GUI, ale nie są one moją preferowaną metodą.

Komentarze

Odpowiedź

Shnsplit może bezpośrednio czytać plik cue, co oznacza również, że może uzyskać dostęp do innych danych z pliku cue (nie tylko punktów przerwania) i generować ładniejsze nazwy plików niż split-*.flac:

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

Oczywiście, utrudnia to korzystanie z cuetag.sh, jeśli oryginalny plik flac znajduje się w tym samym katalogu.

Komentarze

  • Inni użytkownicy Debiana: sudo apt-get install cuetools shntool
  • Prawdopodobnie również chcesz oznacz pliki tagiem cuetag file.cue [0-9]*.flac
  • Potrzebowałem też: sudo apt-get install flac
  • cuetools już zależy od flac, więc…
  • W Debianie 10 jest błąd z 24-bitowymi flacami. Wygrał ' t split. Działa jednak dobrze na plikach 16-bitowych.

Odpowiedź

Znam tylko sposób CLI. Będziesz potrzebował cuetools i shntool.

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

Komentarze

  • Dzięki za ten Kambus. ' Używam cuebreakpoints file.cue | shnsplit -o flac file.flac przez długi czas. Drugi bit będzie bardzo pomocny!
  • cuetag wydaje się zepsuć nazwy plików zawierające spacje, ale po ich usunięciu zadziałało.

Odpowiedź

Flacon to intuicyjny graficzny interfejs użytkownika typu open source, dokładnie to: podziel FLAC za pomocą CUE.

Flacon wyodrębnia poszczególne ścieżki z jednego dużego pliku audio zawierającego cały album z muzyką i zapisuje je jako oddzielne audio akta. W tym celu wykorzystuje informacje z odpowiedniego pliku CUE.

Obsługuje między innymi:

Obsługiwane formaty wejściowe: WAV, FLAC, APE, WavPack, True Audio (TTA).

Obsługiwane formaty wyjściowe: FLAC, WAV, WavPack, AAC, OGG lub MP3.

Automatyczne wykrywanie zestawu znaków dla plików CUE.

Aby go użyć, wystarczy otworzyć *.cue z Flacon. Powinien wtedy automatycznie wykryć duży plik *.flac (jeśli nie, możesz to określić ręcznie), a następnie wybrać format wyjściowy Flac (i opcjonalnie skonfigurować koder) i uruchomić proces konwersji.

Flacon v5.4.0

Komentarze

  • Witamy na Unix & Linux Stack Exchange! Chociaż może to teoretycznie odpowiedzieć na pytanie, byłoby lepiej zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia.
  • wciąż aktualizowany w 2017 roku
  • Nie ' nie lubię używać interfejsu użytkownika do rzeczy, które mogę robić na terminalu, ale walczyłem z albumem i był to jedyny sposób na podzielenie plików. Zasługujesz teraz na piwo, stary

Odpowiedz

Jeśli używane są pliki wysokiej jakości, shnsplit na szczęście błądzi precz z

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

na szczęście plik binarny flac obsługuje opcje –skip = mm: ss.ss i –until = mm: ss.ss, więc skrypt może używać cuebreakpoints, takie jak ta:

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

Komentarze

  • To jedyna metoda, która działała w moim przypadku.

Odpowiedź

Jeśli masz ustawioną cue na używanie k3b w w ustawieniach typu pliku k3b automatycznie podzieli plik, jeśli otworzysz plik cue, i umożliwi ponowne zgranie.

Odpowiedź

Istnieje projekt, który działa dla kilku plików wejściowych: split2flac

Od opis projektu:

split2flac dzieli jeden duży obraz audio APE / FLAC / TTA / WV / WAV (lub zbiór takich plików , rekurencyjnie) z arkuszem CUE na ścieżki FLAC / M4A / MP3 / OGG_VORBIS / WAV z tagowaniem, zmianą nazwy, konwersją zestawu znaków cue Sheet, obrazami okładek albumów. Używa również pliku konfiguracyjnego, więc nie trzeba za każdym razem przekazywać wielu argumentów, tylko plik wejściowy. Powinien działać w dowolnej powłoce zgodnej z POSIX.

Odpowiedź

Znalazłem mac (czyli polecenie shntool używane do dekodowania plików APE) jest znacznie mniej tolerancyjne niż ffmpeg, jeśli plik źródłowy zawiera drobne błędy.

Zwykle ffmpeg nadal całkowicie konwertuje plik, podczas gdy mac najprawdopodobniej zgłasza błąd podczas przetwarzania.

Skończyło się na napisaniu skryptu do dzielenia pliku APE, analizując plik CUE i konwertując plik APE na pliki FLAC oddzielone tytułami za 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) 

Komentarze

  • Możesz zmienić if os.path.isfile(tmpfile) na if tmpfile != filename and os.path.isfile(tmpfile) aby uniknąć usunięcia oryginalnego pliku w przypadku błędu.
  • Warunkiem ustawienia wykonawcy utworu musi być len(records)>0.

Odpowiedź

shntool na Ubuntu 14.04

W snhtool brakuje elementu mac (konsola audio Monkey „) wykonywalna zależność, a jedyny pakiet, jaki udało mi się znaleźć, to 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 to GUI dla shntool, ale zawiera wszystkie kodeki potrzebuje … w przeciwnym razie wystąpił błąd:

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 

Odpowiedź

Tutaj to skrypt 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); }  

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *