Batch-Konvertieren und Teilen von .ape mit .cue to .flac in verschiedenen Ordnern vom Terminal


9

Ich habe einen 44 GB (ja, vierundvierzig) Ordner mit .apeCD-Dateien. Jede .apeist eine vollständige CD, und normalerweise gibt es .cuezu jeder eine Datei .ape. Ich muss diese konvertieren, aber nicht teilen, da keine Cue-Daten vorhanden sind. Es gibt auch einige .jpgs und .logs drin, die mir egal sind. Wenn eine treeBefehlsausgabe dies veranschaulicht, können Sie Folgendes tun:

├── Philips Mozart Collection - 180 CD
│   │   ├── box01-Symphonies
│   │   │   ├── 1B.jpg
│   │   │   ├── 1F.jpg
│   │   │   ├── cd01
│   │   │   │   ├── CDImage.ape
│   │   │   │   ├── CDImage.ape.cue
│   │   │   │   ├── Complete Mozart Edition, Vol. 01, Early Symphonies (Disc 1) - Neville Mariner, Academy of St. Martin in the Fields.log
│   │   │   │   ├── img421.jpg
│   │   │   │   └── img422.jpg
│   │   │   ├── cd02
│   │   │   │   └── CDImage.ape
│   │   │   ├── cd03
│   │   │   │   ├── CDImage.ape
│   │   │   │   ├── CDImage.ape.cue
│   │   │   │   ├── Complete Mozart Edition, Vol. 01, Early Symphonies (Disc 2) - Sir Neville Marinner - Acadamy of St Martin in the Fields.log
│   │   │   │   ├── img426.jpg
│   │   │   │   └── img427.jpg
│   │   │   ├── cd04

etc ... bis zu 180 CDS.

Grundsätzlich möchte ich alle .apeDateien in mehrere .flacDateien aufteilen und die Tag-Informationen aus dem kopieren .cue, wobei die Verzeichnisstruktur beibehalten wird (vorzugsweise in einem völlig neuen und anderen Verzeichnis). Wenn möglich, bevorzuge ich einen einzeiligen Befehl gegenüber einem Skript. Wie würde ich das machen? Vielen Dank an alle, die wissen, wie das geht!

Und bevor jemand diese Frage hier als Duplikat zu dieser Frage kennzeichnet : Konvertieren Sie alle .ape-Dateien in .flac in verschiedenen Unterordnern . Ich möchte darauf hinweisen, dass dieser Benutzer das .ape nicht in mehrere .flacs aufteilen musste.


Hallo, würden Sie bitte mehr über Ihren Satz "... erklären und die Tag-Informationen aus dem .cue ..." kopieren. Bedeutet dies, dass der Name der konvertierten FLAC-Dateien aus der CUE-Datei übernommen werden sollte? Dann würden Sie bitte Beispielinhalte davon teilen. Sonst, wie viele Dateien erstellt werden sollen und wie viele dieser Dateien sind maximal? Vielen Dank
αғsнιη

> Ich muss diese irgendwie überspringen, da keine Cue-Daten vorhanden sind. Was meinst du damit? Ohne Cue-Daten können Sie konvertieren, aber nicht teilen, da sich die Informationen darüber, wo Tracks beginnen und enden, im Cue befinden.
emk2203

@ Afshin.Hamadi Ja, der Dateiname würde mit dem Titeltitel übereinstimmen. Die .cue-Datei enthält Informationen wie Künstler, Album usw. Diese Informationen sollten in die neuen flac-Dateien kopiert werden.
Willem.hill

@ emk2203 Guter Punkt, ich habe die Frage aktualisiert.
Willem.hill

Sie widersprechen sich noch mehr. "Ich muss diese konvertieren, aber nicht teilen, da keine Cue-Daten vorhanden sind." - "Grundsätzlich möchte ich alle .ape-Dateien in mehrere .flac-Dateien aufteilen und die Tag-Informationen aus dem .cue kopieren ..." . Also, was ist es? Wenn es der Standard "Ich habe .ape- und .cue-Dateien und ich möchte, dass sie konvertiert und an Ort und Stelle in getaggte .flac aufgeteilt werden" ist, könnte die Frage vor 24 Stunden mit zwei guten Antworten geschlossen worden sein.
Emk2203

Antworten:


6

Ich würde dies in mehreren Schritten tun, da Sie dies selten tun. Transparenz ist hier wichtiger als Automatisierung. Es ist aber auch eine einzelne Zeile möglich. Ich gehe davon aus, dass Sie dies beabsichtigt haben, wenn Sie für jeden Schritt nur einen Befehl für alle Dateien verwenden.

Sie müssen ffmpeg(oder avconv) shntoolund cuetoolsinstalliert haben.

So konvertieren Sie alle Ihre .apein .flacan Ort und Stelle:

find . -name "*.ape" -exec sh -c 'exec ffmpeg -i "$1" "${1%.ape}.flac"' _ {} \;

Wenn Sie den gepatchten MAC-Encoder und -Decoder für APE-Dateien von http://www.etree.org/shnutils/shntool/ installieren , ist dieser erste Schritt nicht erforderlich. Aber Sie müssten es mit g++und yasmselbst kompilieren . Gleiches gilt für .ttaDateien, die auch häufig anstelle von verwendet werden .ape.

Dateien teilen und benennen .flac :

find . -name "*.cue" -exec sh -c 'exec shnsplit -f "$1" -o flac -t "%n_%p-%t" "${1%.cue}.flac"' _ {} \;

Wenn dies shnsplitauch für die Konvertierung verwendet wird, ersetzen Sie das .flacIn "${1%.cue}.flac"durch die Erweiterung des Formats, aus dem Sie konvertieren.

  • %n - Titelnummer
  • %p - Darsteller
  • %t - Titelname

wird aus der .cueDatei für die .flacDateinamen entnommen . So kennzeichnen Sie die resultierenden, geteilten .flacDateien:

find . -name "*.cue" -execdir sh -c 'exec cuetag "$1" *.flac' _ {} \;

Entfernen Sie die restlichen CDImage.ape.cue, CDImage.flacund CDImage.apeDateien in Ihrer Freizeit. Die Namen sind eindeutig, daher reicht eine einfache find . -name "CDImage*" -deleteaus, es sei denn, Mozart hat eine Komposition erstellt, mit CDImageder ich nichts weiß.

Damit dies shnsplitfunktioniert, müssen alle erforderlichen Encoder / Decoder installiert sein, damit Dateien gelesen und geschrieben werden können. Module für APE (und für das TTA-Format) müssten aus dem Quellcode kompiliert werden, die anderen durch Installation des Pakets (dh FLAC).

Dies funktioniert in allen Standardfällen, in denen .cueund .tta/ .flac/ .apeDateien mit Ausnahme der Erweiterung denselben Namen haben.


Nebenbemerkung für andere : Wenn Sie sich mit dieser Konvertierung befassen, sind Ihre Quelldateien möglicherweise japanischen Ursprungs, wobei APE und TTA beliebter waren als anderswo. Wenn die .cueDateien ursprünglich mit SHIFT-JIS codiert und jetzt als UTF-8 geöffnet wurden, wird der shnsplitSchritt unterbrochen . Sie müssen die .cueDateien mit umbenennen

find . -name "*.cue" -exec rename 's/\.cue$/.cux/' -- {} +

und konvertieren Sie die Zwischendateien in UTF-8 mit

find . -name "*.cux" -exec sh -c 'exec iconv -f SHIFT-JIS -t UTF-8 -o "${1%.cux}.cue" -- "$1"' _ {} \;

bevor Sie versuchen, die obigen Schritte auszuführen. Vergessen Sie nicht, die .cuxDateien zu entfernen, wenn Sie fertig sind mit:

find . -name "*.cux" -delete

Auf der Manpage von shnsplit wird ape als unterstütztes Format aufgeführt, sodass Sie die Konvertierung in flac mit ffmpeg überspringen und -o flacstattdessen mit shnsplit verwenden können. Erwarten Sie nicht, einen Standard-Basisnamen und einen Affen zu finden, da der Codec / Container auch andere verlustfreie Codecs verwendet. Es ist daher besser, keinen harten Code zu verwenden und alle Schritte in einem Durchlauf des Befehls find einzuschließen. metaflac --add-replay-gainwäre auch eine gute idee.
LiveWireBT

@ LiveWireBT: Technisch sind Sie richtig. Aus diesem Grund habe ich in einem meiner Kommentare "zwei verfügbare Lösungen" genannt. Sie müssen jedoch die Quelle für die Plugins für die Unterstützung von Affen und tta herunterladen, g ++ und yasm installieren und diese selbst kompilieren und installieren. Ich habe mich für die ffmpeg-Lösung entschieden, da es einfacher ist.
Emk2203

2
Für eine Version mit einem Befehl:find -name '*.ape' -execdir sh -c 'flac="${1%.ape}.flac"; ffmpeg -i "$1" "$flac" && shnsplit -f CDImage.ape.cue "$flac" && cuetag CDImage.ape.cue "$flac"' _ {} \:
David Foerster

1
Ja. Ich würde immer einmal ohne den Löschschalter zuerst ausführen, um sicherzustellen, dass es wie beabsichtigt ausgeführt wird.
emk2203

1
Bitte verwenden Sie die leicht überarbeiteten Anweisungen. Versuchte sie, sie arbeiten.
Emk2203
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.