Làm thế nào để tôi chia một flac với một gợi ý?


71

Tôi đã có một album đầy đủ flac và một tập tin cue cho nó. Làm thế nào tôi có thể chia cái này thành một flac trên mỗi track?

Tôi là người dùng KDE, vì vậy tôi thích cách KDE / Qt hơn. Tôi cũng muốn xem dòng lệnh và các câu trả lời GUI khác, nhưng chúng không phải là phương pháp ưa thích của tôi.


Câu trả lời:


72

Shnsplit có thể đọc tệp cue trực tiếp, điều đó cũng có nghĩa là nó có thể truy cập dữ liệu khác từ tệp cue (không chỉ các điểm dừng) và tạo tên tệp đẹp hơn so với 'split - *. Flac':

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

Cấp, điều này làm cho việc sử dụng cuetag.sh trở nên khó khăn hơn nếu tệp flac gốc nằm trong cùng thư mục.


17
Người dùng debian:sudo apt-get install cuetools shntool
jwbensley

13
Bạn cũng có thể muốn gắn thẻ các tệp vớicuetag file.cue [0-9]*.flac
Tháng Tám Karlstrom

6
Tôi cũng cần:sudo apt-get install flac
becko 28/03/2016

22

Tôi chỉ biết một cách CLI. Bạn sẽ cần cuetools và shntool.

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

2
Cảm ơn vì Kambus này. Tôi đã sử dụng cuebreakpoints file.cue | shnsplit -o flac file.flactrong một thời gian dài. Bit thứ 2 sẽ giúp ích rất nhiều!
boehj

1
cuetagdường như phá vỡ tên tập tin có chứa khoảng trắng nhưng sau khi loại bỏ chúng, nó hoạt động.
scai

20

Flacon là một GUI nguồn mở trực quan thực hiện chính xác điều đó: tách FLAC bằng CUE.

Flacon trích xuất các bản nhạc riêng lẻ từ một tệp âm thanh lớn chứa toàn bộ album nhạc và lưu chúng dưới dạng các tệp âm thanh riêng biệt. Để làm điều này, nó sử dụng thông tin từ tệp CUE thích hợp.

Nó hỗ trợ trong số những thứ khác:

Các định dạng đầu vào được hỗ trợ: WAV, FLAC, APE, WavPack, True Audio (TTA).

Các định dạng được hỗ trợ: FLAC, WAV, WavPack, AAC, OGG hoặc MP3.

Tự động phát hiện bộ ký tự cho các tệp CUE.

Để sử dụng nó, bạn chỉ cần mở *.cuetệp bằng Flacon. Sau đó, nó sẽ tự động phát hiện *.flactệp lớn (nếu không, bạn có thể chỉ định thủ công tệp này), sau đó bạn nên chọn định dạng đầu ra Flac (và tùy chọn cấu hình bộ mã hóa) và bắt đầu quá trình chuyển đổi.

Flacon v5.4.0


1
Chào mừng bạn đến với Sàn giao dịch Unix & Linux! Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
slm

vẫn được cập nhật vào năm 2017

6

nếu các tệp chất lượng cao đang được sử dụng, shnsplit rất vui khi gặp lỗi

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

may mắn thay, nhị phân flac hỗ trợ --skip = mm: ss.ss và --until = mm: ss.ss để tập lệnh có thể sử dụng cuebreakpoint như thế này:

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

Đây là phương pháp duy nhất làm việc cho tôi.
coffekid

3

Nếu bạn đã cài đặt cue để sử dụng k3btrong cài đặt filetype, k3bsẽ tự động phân tách tệp nếu bạn mở tệp cue và cho phép bạn trích xuất lại.


1

Có một dự án hoạt động cho một số tệp đầu vào: split2flac

Từ mô tả dự án:

tách hình ảnh bìa album. Nó cũng sử dụng tệp cấu hình, do đó không cần phải truyền nhiều đối số mỗi lần, chỉ cần một tệp đầu vào. Nên hoạt động trong mọi shell tuân thủ POSIX.


1

Tôi thấy mac(đây là lệnh shntoolđược sử dụng để giải mã các tệp APE) ít dung sai hơn so với ffmpegnếu tệp nguồn chứa các lỗi nhỏ.

Thông thường ffmpegvẫn sẽ chuyển đổi tập tin hoàn toàn trong khi macrất có thể sẽ xảy ra lỗi trong quá trình xử lý.

Vì vậy, tôi đã kết thúc việc viết một tập lệnh để tách tệp APE bằng cách phân tích tệp CUE và chuyển đổi tệp APE thành các tệp FLAC được phân tách bằng các tiêu đề bằng 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)

Bạn có thể muốn thay đổi if os.path.isfile(tmpfile)để if tmpfile != filename and os.path.isfile(tmpfile)tránh xóa các tập tin ban đầu về lỗi.
wolfmanx

Điều kiện để thiết lập nghệ sĩ theo dõi phải là nếu len(records)>0.
wolfmanx

1

shntool trên Ubuntu 14.04

snhtoolđang thiếu phần macphụ thuộc thực thi (Monkey's Audio Console) và gói duy nhất tôi có thể tìm thấy là trong flaconPPA:

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

flaconlà một GUI cho shntool, nhưng nó đi kèm với tất cả các codec mà nó cần ... nếu không thì tôi đã gặp lỗi:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.