フルアルバムのflacとそのキューファイルがあります。これをトラックごとにflacに分割するにはどうすればよいですか?

私はKDEユーザーなので、KDE / Qtの方法を好みます。コマンドラインやその他のGUIの回答も表示したいのですが、これらは私の好みの方法ではありません。

コメント

回答

Shnsplitはキューファイルを直接読み取ることができます。つまり、(ブレークポイントだけでなく)キューファイルから他のデータにアクセスして、:

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

これにより、元のflacファイルが同じディレクトリにある場合にcuetag.shを使用することがより困難になります。

コメント

  • 仲間のdebianユーザー:sudo apt-get install cuetools shntool
  • おそらくファイルにcuetag file.cue [0-9]*.flac
  • のタグを付けます

  • 必要なもの:sudo apt-get install flac
  • cuetoolsはすでに依存していますflacなので…
  • Debian 10には、24ビットのflacにバグがあります。 ‘分割されません。ただし、16ビットファイルでは正常に機能します。

回答

CLIの方法しか知りません。 cuetoolsとshntoolが必要になります。

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

コメント

  • このカンバスに感謝します。 ‘は長い間cuebreakpoints file.cue | shnsplit -o flac file.flacを使用しています。 2番目のビットは大いに役立ちます!
  • cuetagはスペースを含むファイル名で壊れているようですが、それらを削除した後は機能しました。

回答

Flacon は、直感的なオープンソースGUIです。正確に言うと、FLACをCUEで分割します。

Flaconは、音楽のアルバム全体を含む1つの大きなオーディオファイルから個々のトラックを抽出し、それらを個別のオーディオとして保存します。ファイル。これを行うために、適切なCUEファイルからの情報を使用します。

特にサポートします:

サポートされている入力形式:WAV、FLAC、APE、WavPack、True Audio(TTA)。

サポートされている形式:FLAC、WAV、WavPack、AAC、OGG、MP3。

CUEファイルの自動文字セット検出。

これを使用するには、*.cueファイルとFlacon。次に、大きな*.flacファイルを自動的に検出し(そうでない場合は、手動で指定できます)、Flac出力形式を選択して(オプションでエンコーダーを構成して)、変換プロセス。

Flacon v5.4.0

コメント

答え

高品質のファイルが使用されている場合、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 

コメント

  • これが私のために機能した唯一の方法です。

回答

キューがk3bを使用するように設定されている場合ファイルタイプの設定で、k3bは、キューファイルを開くとファイルを自動的に分割し、再リッピングできるようにします。

回答

複数の入力ファイルで機能するプロジェクトがあります: split2flac

Fromプロジェクトの説明:

split2flacは、1つの大きなAPE / FLAC / TTA / WV / WAVオーディオイメージ(またはそのようなファイルのコレクション)を分割します、再帰的に)CUEシートを使用してFLAC / M4A / MP3 / OGG_VORBIS / WAVトラックにタグ付け、名前変更、キューシートの文字セット変換、アルバムカバー画像を追加します。また、構成ファイルを使用するため、毎回多くの引数を渡す必要はなく、入力ファイルのみを渡す必要があります。 POSIX準拠のシェルで動作するはずです。

回答

見つかりましたmac(APEファイルのデコードに使用されるshntoolのコマンド)は、ffmpegソースファイルにマイナーエラーが含まれている場合。

通常、ffmpegはファイルを完全に変換しますが、macは処理中にエラーをスローする可能性が非常に高くなります。

そこで、CUEファイルを解析し、ffmpegを使用してタイトルで区切られたFLACファイルにAPEファイルを変換することでAPEファイルを分割するスクリプトを作成することになりました:

#!/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)に変更することをお勧めしますエラー時に元のファイルが削除されないようにするため。
  • トラックアーティストを設定するための条件は、len(records)>0の場合です。

回答

shntool(Ubuntu 14.04

snhtoolmac(Monkeys Audio Console)がありません実行可能ファイルの依存関係、そして私が見つけた唯一のパッケージはflacon PPAにありました:

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のGUIですが、すべてのコーデックが付属しています必要…それ以外の場合はエラーが発生しました:

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 

回答

こちらは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); }  

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です