Как я разделяю flac с сигналом?

$ echo 1190000000 | perl -pe 's/(\d+)/localtime($1)/e' 
Sun Sep 16 20:33:20 2007

Это может пригодиться для тех приложений, которые используют время эпохи в файлах журнала:

$ tail -f /var/log/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'
[Thu May 13 10:15:46 2010] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;HOSTA;check_raid;0;check_raid.pl: OK (Unit 0 on Controller 0 is OK)
73
13.08.2019, 15:02
9 ответов

Если у Вас есть набор сигнала для использования k3b в в настройках типа файла, k3b автоматически разделит файл, если Вы откроете файл сигнала и позволите Вам повторно разрываться.

3
27.01.2020, 19:31

Вот PHP-скрипт:

<?php
$s_cue = $argv[1];
$a_cue = file($s_cue);
$n_row = -1;
foreach ($a_cue as $s_row) {
   $s_trim = trim($s_row);
   $a_row = str_getcsv($s_trim, ' ');
   if (preg_match('/^FILE\s/', $s_row) == 1) {
      $s_file = $a_row[1];
   }
   if (preg_match('/^\s+TRACK\s/', $s_row) == 1) {
      $n_row++;
      $a_table[$n_row]['track'] = $a_row[1];
   }
   if (preg_match('/^\s+TITLE\s/', $s_row) == 1) {
      $a_table[$n_row]['title'] = $a_row[1];
   }
   if (preg_match('/^\s+PERFORMER\s/', $s_row) == 1) {
      $a_table[$n_row]['artist'] = $a_row[1];
   }
   if (preg_match('/^\s+INDEX\s/', $s_row) == 1) {
      $s_dur = $a_row[2];
      $a_frame = sscanf($s_dur, '%d:%d:%d', $n_min, $n_sec, $n_fra);
      $n_index = $n_min * 60 + $n_sec + $n_fra / 75;
      $a_table[$n_row]['ss'] = $n_index;
      if ($n_row > 0) {
         $a_table[$n_row - 1]['to'] = $n_index;
      }
   }
}
$a_table[$n_row]['to'] = 10 * 60 * 60;
foreach ($a_table as $m_row) {
   $a_cmd = [
      'ffmpeg',
      '-i', $s_file,
      '-ss', $m_row['ss'],
      '-to', $m_row['to'],
      '-metadata', 'artist='. $m_row['artist'],
      '-metadata', 'title='. $m_row['title'],
      '-metadata', 'track='. $m_row['track'],
      $m_row['track']. ' '. $m_row['title']. '.m4a'
   ];
   $a_esc = array_map('escapeshellarg', $a_cmd);
   $s_esc = implode(' ', $a_esc);
   system($s_esc);
}
1
25.04.2016, 16:43

Я только знаю CLI путь. Вам будут нужны cuetools и shntool.

cuebreakpoints file.cue | shnsplit -o flac file.flac
cuetag.sh file.cue "split-*".flac
22
27.01.2020, 19:31
  • 1
    Спасибо за этот Kambus. Я использовал cuebreakpoints file.cue | shnsplit -o flac file.flac в течение долгого времени. 2-й бит собирается помочь много! –  boehj 12.04.2011, 09:44
  • 2
    cuetag кажется, повреждается на именах файлов, содержащих пробелы, но после удаления их это работало. –  scai 20.11.2013, 19:40

Shnsplit может считать файл сигнала непосредственно, который также означает, что может получить доступ к другим данным из файла сигнала (не только точки останова) и генерировать более хорошие имена файлов, чем 'разделение - *.flac':

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

Предоставленный, это делает более трудным использовать cuetag.sh, если исходный flac файл находится в том же каталоге.

76
27.01.2020, 19:31
  • 1
    ох, вот почему я продолжаю видеть thing.tar.7z ---------121 товарищ--------22312----debian пользователи: sudo apt-get install cuetools shntool –  jwbensley 03.05.2014, 15:47
  • 2
    Вы, вероятно, также хотите отметить файлы с cuetag file.cue [0-9]*.flac –  August Karlstrom 28.08.2014, 17:41
  • 3
    мне также было нужно: sudo apt-get install flac –  becko 28.03.2016, 13:13

если высококачественные файлы используются, shnsplit счастливо erroring с

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

к счастью, flac двоичные поддержки - skip=mm:ss.ss и - until=mm:ss.ss так сценарий могут использовать cuebreakpoints как это:

[..]
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
27.01.2020, 19:31
  • 1
    Это - единственный метод, который работал на меня. –  coffekid 26.02.2018, 04:57

Флаконом является интуитивный GUI с открытым исходным кодом, который делает точно что: разделите FLAC с СИГНАЛОМ.

Флакон извлекает отдельные дорожки из одного большого звукового файла, содержащего весь альбом музыки, и сохраняет их как отдельные звуковые файлы. Чтобы сделать это, это использует информацию из соответствующего файла СИГНАЛА.

Это поддерживает среди прочего:

Поддерживаемые форматы ввода: WAV, FLAC, APE, WavPack, Истинное Аудио (TTA).

Поддерживаемый форматы: FLAC, WAV, WavPack, AAC, OGG или MP3.

Автоматическое обнаружение набора символов для файлов СИГНАЛА.

Для использования его, только необходимо открыться *.cue файл с Флаконом. Это должно затем автоматически обнаружить большое *.flac файл (в противном случае можно указать это вручную), и затем необходимо выбрать выходной формат Flac (и дополнительно настроить кодер), и запустите процесс преобразования.

Flacon v5.4.0

20
27.01.2020, 19:31
  • 1
    Добро пожаловать в Unix & Linux Stack Exchange! Пока это может теоретически ответить на вопрос, было бы предпочтительно включать основные части ответа здесь и предоставить ссылку для ссылки. –  slm♦ 03.11.2013, 17:55
  • 2
    все еще обновляется в 2017 –   28.09.2017, 19:45

Есть проект, который работает с несколькими входными файлами: split2flac

Из описания проекта:

split2flac разбивает одну большую APE / Аудио изображение FLAC / TTA / WV / WAV (или набор таких файлов, рекурсивно) с листом CUE в треки FLAC / M4A / MP3 / OGG_VORBIS / WAV с тегами, переименованием, кодировкой { {1}} преобразование cue Sheet, изображений обложек альбомов. Он также использует файл конфигурации , поэтому нет необходимости каждый раз передавать много аргументов, только входной файл. Должен работать в любой POSIX-совместимой оболочке.

1
27.01.2020, 19:31

Я обнаружил, что 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)
1
27.01.2020, 19:31

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
1
27.01.2020, 19:31

Теги

Похожие вопросы