it-swarm-tr.com

Bir ipi bir ipucu ile nasıl bölerim?

Tam bir albüm flac ve bunun için bir ipucu dosyası var. Bunu parça başına nasıl bir flac'a bölebilirim?

Ben bir KDE kullanıcısıyım, bu yüzden KDE/Qt yolunu tercih ederim. Komut satırı ve diğer GUI cevaplarını da görmek istiyorum, ancak bunlar benim tercih ettiğim yöntem değil.

75
xenoterracide

Dosya türü ayarlarında k3b İşaretini kullanmak üzere işaret ayarladıysanız, işaret dosyasını açarsanız k3b Dosyayı otomatik olarak böler ve yeniden kopyalamanıza izin verir.

3
xenoterracide

Shnsplit bir işaret dosyasını doğrudan okuyabilir, bu da işaret dosyasından diğer verilere erişebileceği anlamına gelir (sadece kesme noktaları değil) ve 'split - *. Flac' dan daha güzel dosya adları oluşturabilir:

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

Verilmişse, bu orijinal flac dosyası aynı dizinde ise cuetag.sh dosyasının kullanımını zorlaştırır.

79
Michael H

Sadece bir CLI yolu biliyorum. Cuetools ve shntool'a ihtiyacınız olacak.

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

Flacon tam olarak bunu yapan sezgisel bir açık kaynaklı GUI'dir: bir FLAC'ı CUE ile bölme.

Flacon, tüm müzik albümünü içeren büyük bir ses dosyasından parçaları tek tek çıkarır ve ayrı ses dosyaları olarak kaydeder. Bunu yapmak için, uygun CUE dosyasındaki bilgileri kullanır.

Diğer şeylerin yanı sıra destekler:

Desteklenen giriş formatları: WAV, FLAC, APE, WavPack, Gerçek Ses (TTA).

Desteklenen formatlar: FLAC, WAV, WavPack, AAC, OGG veya MP3.

CUE dosyaları için otomatik karakter kümesi algılama.

Kullanmak için sadece *.cue Flacon ile dosya. Daha sonra büyük *.flac dosyası (değilse, bunu manuel olarak belirtebilirsiniz) ve ardından Flac çıktı biçimini seçmeniz (ve isteğe bağlı olarak kodlayıcıyı yapılandırmanız) ve dönüştürme işlemini başlatmanız gerekir.

Flacon v5.4.0

20
Yaze

yüksek kaliteli dosyalar kullanılıyorsa, shnsplit mutlu bir şekilde hata veriyor

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

neyse ki flac ikili --skip = mm: ss.ss ve --until = mm: ss.ss destekler, böylece bir komut dosyası böyle cuebreakpoints kullanabilir:

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

Kaynak dosya küçük hatalar içeriyorsa mac (APE dosyalarının kodunu çözmek için kullanılan shntool komutunun) komutunu ffmpeg 'den daha az toleranslı buldum.

Normalde ffmpeg dosyayı tam olarak dönüştürürken, mac büyük olasılıkla işleme sırasında hata verir.

Bu yüzden CUE dosyasını ayrıştırarak ve APE dosyasını ffmpeg kullanarak başlıklarla ayrılmış FLAC dosyalarına dönüştürerek APE dosyasını ayırmak için bir komut dosyası yazdım:

#!/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)
1
Meow

Birkaç girdi dosyası için çalışan bir proje var: split2flac

Proje açıklamasından:

split2flac, büyük bir APE/FLAC/TTA/WV/WAV ses görüntüsünü (veya bu tür dosyaların bir koleksiyonunu özyineli olarak) CUE sayfasıyla FLAC/M4A/MP3/OGG_VORBIS/WAV parçalarına etiketleme, yeniden adlandırma, işaret levhası dönüştürme ile böler, albüm kapağı görüntüler. Ayrıca yapılandırma dosyasını kullanır, bu nedenle her seferinde çok sayıda argüman geçirmeye gerek yoktur, sadece bir girdi dosyası. POSIX uyumlu Kabuklarda çalışmalıdır.

1
Paulo Fidalgo

buntu 14.04'te shntool

snhtoolmac (Monkey's Audio Console) yürütülebilir bağımlılığını eksik ve bulabildiğim tek paket flacon PPA'da oldu:

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

flaconshntool için bir GUI'dir, ancak ihtiyacı olan tüm codec bileşenleri ile birlikte gelir ... aksi halde hatayı aldım:

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