Як розділити квартиру за допомогою киї?


71

У мене є повний flac flac та файл із написом для нього. Як я можу розділити це на проміжок на доріжку?

Я користувач KDE, тому вважаю за краще KDE / Qt спосіб. Я також хотів би бачити командний рядок та інші відповіді графічного інтерфейсу, але це не мій бажаний метод.


Відповіді:


72

Shnsplit може читати файл киї безпосередньо, що також означає, що він може отримувати доступ до інших даних із файлу cue (не лише точки переривання) та генерувати приємніші імена файлів, ніж 'split - *. Flac':

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

Звичайно, це ускладнює використання cuetag.sh, якщо вихідний файл flac знаходиться в одному каталозі.


17
Користувачі, які користуються debian:sudo apt-get install cuetools shntool
jwbensley

13
Напевно, ви також хочете позначити файлиcuetag file.cue [0-9]*.flac
Август Карлстром

6
Мені також знадобилося:sudo apt-get install flac
беско

22

Я знаю лише спосіб CLI. Вам знадобляться кетооли і шнтоол.

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

2
Дякую за цей Kambus. Я використовую cuebreakpoints file.cue | shnsplit -o flac file.flacдавно. 2-й біт дуже допоможе!
boehj

1
cuetagЗдається, він розбивається на назви файлів, що містять пробіли, але після їх видалення він працював.
scai

20

Flacon - це інтуїтивно зрозумілий графічний інтерфейс з відкритим кодом, який робить саме це: розділити FLAC на CUE.

Flacon витягує окремі композиції з одного великого аудіофайлу, що містить весь альбом музики, і зберігає їх як окремі аудіофайли. Для цього використовується інформація з відповідного файлу CUE.

Він підтримує серед іншого:

Підтримувані формати введення: WAV, FLAC, APE, WavPack, True Audio (TTA).

Підтримувані формати: FLAC, WAV, WavPack, AAC, OGG або MP3.

Автоматичне виявлення набору символів для файлів CUE.

Для його використання потрібно лише відкрити *.cueфайл за допомогою Flacon. Потім він повинен автоматично виявити великий *.flacфайл (якщо ні, ви можете вказати це вручну), а потім слід вибрати формат виводу Flac (і необов'язково налаштувати кодер), і почати процес перетворення.

Flacon v5.4.0


1
Ласкаво просимо до Unix & Linux Stack Exchange! Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
slm

ще оновлено у 2017 році

6

якщо використовуються високоякісні файли, 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

Це єдиний метод, який працював на мене.
coffekid

3

Якщо k3bу налаштуваннях k3bфайлових файлів встановлено використання кий , він автоматично розділить файл, якщо ви відкриєте файл киї, і дозволить повторно видобувати файл.


1

Існує проект, який працює для декількох вхідних файлів: split2flac

З опису проекту:

split2flac розбиває одне велике звукове зображення APE / FLAC / TTA / WV / WAV (або колекцію таких файлів, рекурсивно) з аркушем CUE на FLAC / M4A / MP3 / OGG_VORBIS / WAV-треки з тегом, перейменуванням, конвертацією діаграм, Образи обкладинки альбомів. Він також використовує файл конфігурації, тому не потрібно щоразу передавати багато аргументів, лише вхідний файл. Має працювати в будь-якій сумісній з POSIX оболонці.


1

Я виявив mac(що це команда, яка shntoolвикористовується для декодування файлів APE) набагато менш толерантна, ніж ffmpegякщо вихідний файл містить незначні помилки.

Зазвичай ffmpegфайл все-таки перетворить повністю, але, macшвидше за все, видає помилку під час обробки.

Тож я закінчив писати сценарій для розбиття файлу APE шляхом аналізу файлу CUE та перетворення файлу APE у файли FLAC, розділені на заголовки за допомогою 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)

Ви можете змінити, if os.path.isfile(tmpfile)щоб if tmpfile != filename and os.path.isfile(tmpfile)уникнути видалення оригінального файлу помилково.
wolfmanx

Умовою встановлення виконавця треку повинно бути, якщо len(records)>0.
wolfmanx

1

shntool на Ubuntu 14.04

snhtoolвідсутня macвиконувана залежність (консоль Monkey's Audio Console), і єдиний пакет, який я міг знайти, був у 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

flaconє графічним інтерфейсом для 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.