전체 앨범 flac과 큐 파일이 있습니다.이를 트랙별로 flac로 분할하려면 어떻게해야합니까?
저는 KDE 사용자이므로 KDE / Qt 방식을 선호합니다. 명령 줄 및 기타 GUI 답변도보고 싶지만 선호하는 방법이 아닙니다.
코멘트
- superuser.com/questions/251362/ …
답변
Shnsplit은 큐 파일을 직접 읽을 수 있습니다. 즉, 중단 점뿐만 아니라 큐 파일에서 다른 데이터에 액세스 할 수 있고 :
shnsplit -f file.cue -t %n-%t -o flac file.flac
그렇다면 원래 flac 파일이 같은 디렉토리에있는 경우 cuetag.sh를 사용하기가 더 어려워집니다.
댓글
- 동료 데비안 사용자 :
sudo apt-get install cuetools shntool
-
cuetag file.cue [0-9]*.flac
- 또한 필요 :
sudo apt-get install flac
- cuetools는 이미 flac, 그래서…
- Debian 10에는 24 비트 flac에 버그가 있습니다. 분할되지 않았습니다. ‘ 하지만 16 비트 파일에서는 잘 작동합니다.
로 파일에 태그 지정
Answer
CLI 방식 만 알고 있습니다. cuetools와 shntool이 필요합니다.
cuebreakpoints file.cue | shnsplit -o flac file.flac cuetag.sh file.cue "split-*".flac
댓글
- 이 Kambus에 감사드립니다. 저는 ‘
cuebreakpoints file.cue | shnsplit -o flac file.flac
를 오랫동안 사용해 왔습니다. 두 번째 비트는 많은 도움이 될 것입니다! -
cuetag
는 공백이 포함 된 파일 이름에서 깨지는 것처럼 보이지만 공백을 제거한 후에는 작동했습니다.
Answer
Flacon 은 직관적 인 오픈 소스 GUI입니다. CUE로 FLAC을 분할합니다.
Flacon은 전체 음악 앨범이 포함 된 하나의 큰 오디오 파일에서 개별 트랙을 추출하여 별도의 오디오로 저장합니다. 파일. 이를 위해 적절한 CUE 파일의 정보를 사용합니다.
다음을 지원합니다.
지원되는 입력 형식 : WAV, FLAC, APE, WavPack, True Audio (TTA).
지원되는 출력 형식 : FLAC, WAV, WavPack, AAC, OGG 또는 MP3.
CUE 파일에 대한 자동 문자 집합 감지.
사용하려면 *.cue
파일을 Flacon으로. 그런 다음 큰 *.flac
파일을 자동으로 감지하고 (아니라면 수동으로 지정할 수 있음) Flac 출력 형식을 선택하고 (선택적으로 인코더를 구성) 시작해야합니다. 변환 프로세스입니다.
댓글
- 환영합니다. Unix & Linux Stack Exchange로! 이론적으로는 질문에 대한 답을 찾을 수 있지만 여기에 답의 필수 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다 .
- 2017 년에도 업데이트 됨
- 나는 단말기에서 할 수있는 일에 UI를 사용하는 것을 좋아하지 않지만 ‘ 앨범으로 어려움을 겪고있었습니다. 이것이 파일을 분할하는 유일한 방법이었습니다. 당신은 이제 맥주를 마실 자격이 있습니다.
Answer
고품질 파일을 사용하는 경우 shnsplit은 오류가 발생합니다.
shnsplit: error: m:ss.ff format can only be used with CD-quality files
다행히 flac 바이너리는 –skip = mm : ss.ss 및 –until = mm : ss.ss를 지원하므로 스크립트에서 다음과 같은 큐 브레이크 포인트 :
[..] 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
댓글
- 이 방법이 저에게 효과적이었습니다.
Answer
k3b
를 사용하도록 큐를 설정 한 경우 파일 형식 설정에서 k3b
는 큐 파일을 열면 파일을 자동으로 분할하고 다시 추출 할 수 있습니다.
Answer
여러 입력 파일에 대해 작동하는 프로젝트가 있습니다. split2flac
From 프로젝트 설명 :
split2flac는 하나의 큰 APE / FLAC / TTA / WV / WAV 오디오 이미지 (또는 이러한 파일 모음 , 재귀 적으로) CUE 시트와 함께 FLAC / M4A / MP3 / OGG_VORBIS / WAV 트랙에 태그 지정, 이름 변경, 큐 시트의 문자 집합 변환, 앨범 표지 이미지를 포함합니다. 또한 구성 파일을 사용하므로 매번 많은 인수를 전달할 필요가없고 입력 파일 만 전달합니다. POSIX 호환 쉘에서 작동합니다.
답변
찾았습니다. mac
(APE 파일 디코딩에 사용되는 shntool
명령)은 ffmpeg
소스 파일에 사소한 오류가있는 경우.
일반적으로 ffmpeg
는 여전히 파일을 완전히 변환하지만 mac
는 처리 중에 오류가 발생할 가능성이 높습니다.
그래서 결국 CUE 파일을 파싱하고 APE 파일을 ffmpeg를 사용하여 제목으로 구분 된 FLAC 파일로 변환하여 APE 파일을 분할하는 스크립트를 작성했습니다.
#!/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)
댓글
-
if os.path.isfile(tmpfile)
를if tmpfile != filename and os.path.isfile(tmpfile)
로 변경할 수 있습니다. 오류 발생시 원본 파일 삭제를 방지합니다. - 트랙 아티스트 설정 조건은 다음과 같아야합니다.
len(records)>0
.
답변
shntool
Ubuntu 14.04
snhtool
에 mac
(Monkey의 오디오 콘솔)가 없습니다. 실행 가능한 종속성, 내가 찾을 수있는 유일한 패키지는 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
는 shntool
용 GUI이지만 모든 코덱과 함께 제공됩니다. 필요 … 그렇지 않으면 오류가 발생했습니다.
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
Answer
여기 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); }