Ich habe einen 44 GB (ja, vierundvierzig) Ordner mit .ape
CD-Dateien. Jede .ape
ist eine vollständige CD, und normalerweise gibt es .cue
zu jeder eine Datei .ape
. Ich muss diese konvertieren, aber nicht teilen, da keine Cue-Daten vorhanden sind. Es gibt auch einige .jpg
s und .log
s drin, die mir egal sind. Wenn eine tree
Befehlsausgabe 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 .ape
Dateien in mehrere .flac
Dateien 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.
quelle
Antworten:
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
(oderavconv
)shntool
undcuetools
installiert haben.So konvertieren Sie alle Ihre
.ape
in.flac
an Ort und Stelle: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++
undyasm
selbst kompilieren . Gleiches gilt für.tta
Dateien, die auch häufig anstelle von verwendet werden.ape
.Dateien teilen und benennen
.flac
:Wenn dies
shnsplit
auch für die Konvertierung verwendet wird, ersetzen Sie das.flac
In"${1%.cue}.flac"
durch die Erweiterung des Formats, aus dem Sie konvertieren.%n
- Titelnummer%p
- Darsteller%t
- Titelnamewird aus der
.cue
Datei für die.flac
Dateinamen entnommen . So kennzeichnen Sie die resultierenden, geteilten.flac
Dateien:Entfernen Sie die restlichen
CDImage.ape.cue
,CDImage.flac
undCDImage.ape
Dateien in Ihrer Freizeit. Die Namen sind eindeutig, daher reicht eine einfachefind . -name "CDImage*" -delete
aus, es sei denn, Mozart hat eine Komposition erstellt, mitCDImage
der ich nichts weiß.Damit dies
shnsplit
funktioniert, 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
.cue
und.tta
/.flac
/.ape
Dateien 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
.cue
Dateien ursprünglich mit SHIFT-JIS codiert und jetzt als UTF-8 geöffnet wurden, wird dershnsplit
Schritt unterbrochen . Sie müssen die.cue
Dateien mit umbenennenund konvertieren Sie die Zwischendateien in UTF-8 mit
bevor Sie versuchen, die obigen Schritte auszuführen. Vergessen Sie nicht, die
.cux
Dateien zu entfernen, wenn Sie fertig sind mit:quelle
-o flac
stattdessen 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-gain
wäre auch eine gute idee.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"' _ {} \: