Mam folder z .ape
plikami CD o pojemności 44 GB (tak, czterdzieści cztery) . Każda z nich .ape
to kompletna płyta CD, a .cue
wraz z nią zwykle znajduje się plik .ape
. Muszę je przekonwertować, ale nie podzielić, ponieważ nie ma danych cue do przejścia. Są tam też trochę .jpg
si .log
, o które nie dbam. Jeśli dane tree
wyjściowe polecenia pomagają to zwizualizować, proszę:
├── 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
itp ... aż do 180 CDS.
Zasadniczo chcę podzielić wszystkie .ape
pliki na wiele .flac
plików i skopiować informacje znacznika z .cue
, zachowując strukturę katalogów (najlepiej w zupełnie nowym i innym katalogu). W miarę możliwości wolę polecenie jednowierszowe od skryptu. Jak miałbym to zrobić? Dziękujemy wszystkim, którzy wiedzą, jak to zrobić!
I zanim ktokolwiek oznaczy to pytanie jako duplikat tutaj: Konwertuj wszystkie pliki .ape na .flac w różnych podfolderach , chciałbym zauważyć , że ten użytkownik nie musiał dzielić .ape na wiele plików .flac.
źródło
Odpowiedzi:
Zrobiłbym to w kilku krokach, ponieważ robisz to rzadko. Przejrzystość jest tu ważniejsza niż automatyzacja. Ale możliwa jest również jedna linia. Zakładam, że jeśli użyjesz tylko jednego polecenia dla wszystkich plików na każdym kroku, to jest to, co zamierzałeś.
Musisz mieć
ffmpeg
(lubavconv
)shntool
icuetools
zainstalować.Aby przekonwertować wszystko
.ape
na.flac
miejsce:Jeśli zainstalujesz poprawiony koder i dekoder MAC dla plików APE z http://www.etree.org/shnutils/shntool/ , ten pierwszy krok jest niepotrzebny. Ale trzeba by skompilować ją
g++
iyasm
siebie. To samo dotyczy.tta
plików, które są często używane zamiast.ape
.Pliki podziału i nazw
.flac
:Jeśli
shnsplit
jest również używany do konwersji, zamień.flac
in"${1%.cue}.flac"
na rozszerzenie formatu, z którego konwertujesz.%n
- numer utworu%p
- wykonawca%t
- nazwa utworujest pobierany z
.cue
pliku dla.flac
nazw plików. Aby oznaczyć powstałe, podzielone.flac
pliki:Usuń pozostałe
CDImage.ape.cue
,CDImage.flac
orazCDImage.ape
pliki w swoim czasie wolnym. Nazwy są unikalne, więcfind . -name "CDImage*" -delete
wystarczy prosta , chyba że Mozart stworzył kompozycję,CDImage
której nie jestem świadomy.Aby
shnsplit
działało, należy zainstalować wszystkie niezbędne kodery / dekodery, aby móc odczytywać i zapisywać pliki. Moduły dla APE (i dla formatu TTA) musiałyby zostać skompilowane ze źródła, inne przez zainstalowanie pakietu (tj. FLAC).Działa to we wszystkich standardowych przypadkach, w których pliki
.cue
i.tta
/.flac
/.ape
mają tę samą nazwę, z wyjątkiem rozszerzenia.Uwaga dodatkowa dla innych : jeśli zajmujesz się tą konwersją, Twoje pliki źródłowe mogą pochodzić z Japonii, gdzie APE i TTA były bardziej popularne niż gdzie indziej. Jeśli
.cue
pliki były początkowo zakodowane w SHIFT-JIS, a teraz otwarte jako UTF-8,shnsplit
krok się nie powiedzie . Musisz zmienić nazwę.cue
plików za pomocąi przekonwertować pliki pośrednie na UTF-8 za pomocą
zanim spróbujesz wykonać powyższe kroki. Nie zapomnij pozbyć się
.cux
plików, gdy skończysz z:źródło
-o flac
z shnsplit zamiast. Nie spodziewaj się znalezienia standardowej nazwy basename i ape jako kodeka / kontenera, ponieważ używane są również inne bezstratne kodeki, więc lepiej nie kodować na stałe i lepiej byłoby dołączyć wszystkie kroki w jednym uruchomieniu polecenia find.metaflac --add-replay-gain
byłby również dobry pomysł.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"' _ {} \: