मैं क्यू के साथ एक फ्लैक को कैसे विभाजित करूं?


71

मुझे इसके लिए एक पूर्ण एल्बम फ्लैक और क्यू फ़ाइल मिली है। मैं इसे एक ट्रैक प्रति ट्रैक में कैसे विभाजित कर सकता हूं?

मैं एक केडीई उपयोगकर्ता हूं, इसलिए मैं केडीई / क्यूटी तरीका पसंद करूंगा। मैं कमांड लाइन और अन्य GUI उत्तर भी देखना चाहूंगा, लेकिन वे मेरी पसंदीदा विधि नहीं हैं।


जवाबों:


72

Shnsplit एक क्यू फ़ाइल को सीधे पढ़ सकता है, जिसका अर्थ यह भी है कि यह क्यू फ़ाइल से अन्य डेटा तक पहुँच सकता है (सिर्फ ब्रेकप्वाइंट नहीं) और 'स्प्लिट - * फ्लैक' की तुलना में अच्छे फ़ाइल नाम उत्पन्न करता है:

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

दी गई, इससे cuetag.sh का उपयोग करना अधिक कठिन हो जाता है यदि मूल फ्लैक फ़ाइल उसी निर्देशिका में है।


17
साथी डेबियन उपयोगकर्ता:sudo apt-get install cuetools shntool
jwbensley

13
आप शायद इसके साथ फाइलों को टैग करना भी चाहते हैंcuetag file.cue [0-9]*.flac
अगस्त कार्लस्ट्रोम

6
मुझे भी ज़रूरत थी:sudo apt-get install flac
becko

22

मैं केवल एक सीएलआई तरीका जानता हूं। आपको क्यूटूल और शेंटल की आवश्यकता होगी।

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

2
इस कम्बस के लिए धन्यवाद। मैं cuebreakpoints file.cue | shnsplit -o flac file.flacलंबे समय से उपयोग कर रहा हूं । 2 बिट बहुत मदद करने वाला है!
बोहज

1
cuetagरिक्त स्थान वाले फ़ाइलनामों पर विराम लगता है, लेकिन उन्हें हटाने के बाद यह काम करता है।
scai

20

फ्लैकॉन एक सहज खुला स्रोत जीयूआई है जो ठीक यही करता है: एक FLAC को CUE के साथ विभाजित करें।

फ्लैकॉन एक बड़ी ऑडियो फ़ाइल से अलग-अलग ट्रैक निकालता है जिसमें संगीत का पूरा एल्बम होता है और उन्हें अलग-अलग ऑडियो फ़ाइलों के रूप में सहेजता है। ऐसा करने के लिए, यह उपयुक्त CUE फ़ाइल की जानकारी का उपयोग करता है।

यह अन्य चीजों के बीच समर्थन करता है:

समर्थित इनपुट प्रारूप: WAV, FLAC, APE, WavPack, True Audio (TTA)।

समर्थित प्रारूप: FLAC, WAV, WavPack, AAC, OGG या MP3।

CUE फ़ाइलों के लिए स्वचालित वर्ण सेट डिटेक्शन।

इसका उपयोग करने के लिए आपको केवल *.cueफ़ाइल को Flacon के साथ खोलने की आवश्यकता है । फिर इसे स्वचालित रूप से बड़ी *.flacफ़ाइल का पता लगाना चाहिए (यदि नहीं, तो आप इसे मैन्युअल रूप से निर्दिष्ट कर सकते हैं), और फिर आपको फ्लैक आउटपुट प्रारूप (और वैकल्पिक रूप से एनकोडर को कॉन्फ़िगर करना) का चयन करना चाहिए, और रूपांतरण प्रक्रिया शुरू करनी चाहिए।

फ्लैकॉन v5.4.0


1
यूनिक्स और लिनक्स स्टैक एक्सचेंज में आपका स्वागत है! जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो यहां उत्तर के आवश्यक भागों को शामिल करना बेहतर होगा , और संदर्भ के लिए लिंक प्रदान करना होगा।
slm

2017 में अभी भी अपडेट किया गया है

6

यदि उच्च-गुणवत्ता वाली फ़ाइलों का उपयोग किया जा रहा है, तो shnsplit ख़ुशी के साथ बाहर ग़लती कर रहा है

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

सौभाग्य से फ्लैक बाइनरी का समर्थन करता है --स्काइप = मिमी: sssss और --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

यह एकमात्र तरीका है जो मेरे लिए काम करता है।
कॉफ़ेकेड

3

यदि आपके पास k3bfiletype सेटिंग में उपयोग करने के लिए cue सेट है , k3bतो cue फ़ाइल खोलने पर स्वचालित रूप से फ़ाइल को विभाजित कर देगा, और आपको फिर से रिप करने की अनुमति देगा।


1

एक परियोजना है जो कई इनपुट फ़ाइलों के लिए काम करती है: स्प्लिट 2 एफएलएसी

परियोजना विवरण से:

विभाजन 2flac एक बड़ी APE / FLAC / TTA / WV / WAV ऑडियो छवि (या ऐसी फ़ाइलों का एक संग्रह, पुनरावर्ती रूप से) के साथ FLAC / M4A / MP3 / OGG_VORISIS / WAV पटरियों में टैगिंग, नाम बदलने, चार्ज शीट की charset रूपांतरण के साथ विभाजित करता है। एल्बम कवर छवियां। यह कॉन्फ़िगरेशन फ़ाइल का भी उपयोग करता है, इसलिए हर बार बहुत सारे तर्कों को पारित करने की आवश्यकता नहीं होती है, केवल एक इनपुट फ़ाइल। किसी भी POSIX- अनुरूप शेल में काम करना चाहिए।


1

मैंने पाया mac(जो कि shntoolAPE फ़ाइलों को डिकोड करने के लिए उपयोग की जाने वाली कमांड है ) ffmpegस्रोत की मामूली त्रुटियों की तुलना में कम सहिष्णु है ।

आम तौर पर ffmpegअभी भी फ़ाइल को पूरी तरह से परिवर्तित कर देगा, जबकि macबहुत संभव है कि प्रसंस्करण के दौरान कोई त्रुटि हो।

इसलिए मैंने CE फ़ाइल को पार्स करके APE फ़ाइल को विभाजित करने के लिए एक स्क्रिप्ट लिखना समाप्त कर दिया और APE फ़ाइल को FFmpeg का उपयोग करके शीर्षकों द्वारा अलग FLAC फ़ाइलों में परिवर्तित कर दिया:

#!/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
वॉल्फमैनक्स

1

shntool उबंटू 14.04 पर

snhtoolmac(बंदर का ऑडियो कंसोल) निष्पादन योग्य निर्भरता गायब है , और एकमात्र पैकेज जो मुझे मिल सकता है वह flaconपीपीए में था :

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के लिए एक GUI है shntool, लेकिन यह उन सभी कोडेक्स के साथ आता है जिनकी आवश्यकता है ... अन्यथा मुझे त्रुटि मिली:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.