Membagi file audio dengan file cue

2

Saya memiliki file FLAC dan file CUE. Menggunakan baris perintah, saya ingin membagi file ini, dengan satu trek per file.

Steven Penny
sumber

Jawaban:

3

Perangkat lunak yang paling populer dan tangguh untuk melakukan ini pada Windows adalah CUETools , yang gratis. Ini terutama merupakan aplikasi GUI, dan tidak dapat dengan mudah dikonfigurasikan dari baris perintah, tetapi memiliki antarmuka baris perintah yang dapat Anda gunakan untuk menjalankan konversi dengan pengaturan yang dibuat di GUI.

Di GUI, pilih profil "convert" (pemilih ada di sudut kiri atas). Perhatikan Templat di bagian Jalur CUE; ini menentukan ke mana file baru akan pergi. Jika bagian Tindakan tidak diklik, pastikan ada di Encode, dengan skrip "default" dipilih. Di bagian Mode, pilih Trek, dan hapus centang pada kotak AccurateRip, kecuali jika Anda ingin memverifikasi sebelum mengonversi. Atur Output Audio ke jenis file audio yang Anda inginkan. Di Pengaturan Lanjut (ikon roda gigi di sudut kanan atas), tab CUETools, Penanganan kesenjangan, pilih Kesenjangan yang Ditutup atau Kesenjangan yang Ditampakan + HTOA, tergantung pada apakah Anda ingin audio yang datang sebelum trek 01 disimpan ke file terpisah atau dibuang (Biasanya hanya sepersekian detik keheningan).

Sekarang tutup GUI; pengaturan Anda disimpan secara otomatis. Di baris perintah, Anda sekarang dapat menjalankannya dengan pengaturan tersebut:

CUETools /convert infile.cue

Perintah akan segera keluar, dan jendela GUI kecil akan terbuka untuk menunjukkan kemajuan dan pesan kesalahan. Jendela ini akan tetap terbuka sampai Anda mengklik tombol tutupnya. Jika semuanya berjalan dengan baik, CUETools akan menulis file audio yang dikonversi dan lembar isyarat dikonversi ke folder baru. Konversi lembar isyarat ini adalah keuntungan utama daripada menggunakan shntool; file .cue baru akan merujuk file audio yang dipisah. CUETools juga akan menyalin file .log (jika ada) ke folder baru.

Mike Brown
sumber
0

saya menemukan mac (yang merupakan perintah yang shntool digunakan untuk decoding file APE) jauh lebih toleran daripada ffmpeg jika file sumber mengandung kesalahan kecil.

Biasanya ffmpeg masih akan mengkonversi file sepenuhnya sementara mac sangat mungkin melempar kesalahan selama pemrosesan.

Jadi saya akhirnya menulis skrip untuk memisahkan file APE dengan mem-parsing file CUE dan mengonversi file APE ke file FLAC dipisahkan oleh judul menggunakan 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)
Meow
sumber
0

Dapatkan program MediaHuman Audio Converter.

Seret dan taruh file FLAC Anda ke dalam bidang dan itu akan secara otomatis melepaskan file FLAC Anda. Anda kemudian dapat memilih untuk dikonversi menjadi apa.

Petunjuk: Nama file FLAC dan file CUE harus persis sama (kecuali untuk ekstensi tentu saja).

user878664
sumber
0

Saya membuat kode skrip python yang melakukan pekerjaan dan juga menulis beberapa tag dan menerima gambar sampul album untuk tertanam di dalam file lagu. Ia menggunakan ffmpeg untuk membelah. Lihat di github: albumSplitter .

Untuk menggunakannya, berikan penawaran seperti itu:

./albumSplitter.py flacFile.flac cueFile.cue outputFolder coverImage.jpg

Ini akan membuat satu file per lagu dan mendapatkan tag dari file cue.

Instal semua dependensi yang dijelaskan di halaman github agar bisa berfungsi.

Puck
sumber
Silakan baca cara merekomendasikan perangkat lunak dalam jawaban , khususnya bit dalam berani ; kemudian edit jawaban Anda untuk mengikuti panduan di sana. Terima kasih!
bertieb