Konwertuj wsadowo i dziel. .Ape z .cue na .flac w różnych folderach z terminala

9

Mam folder z .apeplikami CD o pojemności 44 GB (tak, czterdzieści cztery) . Każda z nich .apeto kompletna płyta CD, a .cuewraz 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ę .jpgsi .log, o które nie dbam. Jeśli dane treewyjś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 .apepliki na wiele .flacplikó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.

willem.hill
źródło
Cześć, czy mógłbyś wyjaśnić więcej o zdaniu „... i skopiować informacje z tagu z .cue…”. Czy to znaczy, że nazwa przekonwertowanego pliku .flac powinna zostać odebrana z pliku .cue? Czy mógłbyś zatem udostępnić jego przykładową zawartość? W jaki sposób należy utworzyć wiele plików i jaka jest maksymalna liczba tych plików? Dzięki
αғsнιη
> Muszę w jakiś sposób je pominąć, ponieważ nie ma danych cue do przejścia. Co przez to rozumiesz? Bez danych pamięci można konwertować, ale nie dzielić, ponieważ informacje o tym, gdzie ścieżki rozpoczynają się i kończą, znajdują się w pamięci.
emk2203
@ Afshin.Hamadi Tak, nazwa pliku odpowiada tytułowi utworu. Plik .cue zawiera informacje, takie jak wykonawca, album itp. Informacje te należy skopiować do nowych plików flac.
willem.hill 16.04.16
@ emk2203 Dobrze, zaktualizowałem pytanie.
willem.hill 16.04.16
Jeszcze bardziej zaprzeczasz sobie. „Muszę je konwertować, ale nie dzielić, ponieważ nie ma żadnych danych wskazujących”. - „Zasadniczo chcę podzielić wszystkie pliki .ape na wiele plików .flac i skopiować informacje o znaczniku z .cue ...” . Więc co to jest? Jeśli jest to standardowe „Mam pliki .ape i .cue i chcę, aby zostały przekonwertowane i podzielone w miejscu w celu oznaczenia pliku .flac”, pytanie mogłoby zostać zamknięte dwiema dobrymi odpowiedziami 24 godziny temu.
emk2203

Odpowiedzi:

6

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(lub avconv) shntooli cuetoolszainstalować.

Aby przekonwertować wszystko .apena .flacmiejsce:

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

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++i yasmsiebie. To samo dotyczy .ttaplików, które są często używane zamiast .ape.

Pliki podziału i nazw .flac :

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

Jeśli shnsplitjest również używany do konwersji, zamień .flacin "${1%.cue}.flac"na rozszerzenie formatu, z którego konwertujesz.

  • %n - numer utworu
  • %p - wykonawca
  • %t - nazwa utworu

jest pobierany z .cuepliku dla .flacnazw plików. Aby oznaczyć powstałe, podzielone .flacpliki:

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

Usuń pozostałe CDImage.ape.cue, CDImage.flacoraz CDImage.apepliki w swoim czasie wolnym. Nazwy są unikalne, więc find . -name "CDImage*" -deletewystarczy prosta , chyba że Mozart stworzył kompozycję, CDImagektórej nie jestem świadomy.

Aby shnsplitdział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 .cuei .tta/ .flac/ .apemają 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 .cuepliki były początkowo zakodowane w SHIFT-JIS, a teraz otwarte jako UTF-8, shnsplitkrok się nie powiedzie . Musisz zmienić nazwę .cueplików za pomocą

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

i przekonwertować pliki pośrednie na UTF-8 za pomocą

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

zanim spróbujesz wykonać powyższe kroki. Nie zapomnij pozbyć się .cuxplików, gdy skończysz z:

find . -name "*.cux" -delete
emk2203
źródło
shnsplit za podręcznika wymienia naśladować jako obsługiwanego formatu więc można pominąć konwersji do flac z ffmpeg i korzystania -o flacz 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-gainbyłby również dobry pomysł.
LiveWireBT
@LiveWireBT: Technicznie masz rację. Dlatego powiedziałem „dwa dostępne rozwiązania” w jednym z moich komentarzy. Musisz jednak pobrać źródło wtyczek do obsługi ape i tta, zainstalować g ++ i yasm oraz skompilować i zainstalować je samodzielnie. Poszedłem z rozwiązaniem ffmpeg, ponieważ jest łatwiejsze.
emk2203
2
Wersja z jednym poleceniem: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
Tak. Zawsze działałbym raz bez przełącznika usuwania, aby upewnić się, że działa zgodnie z przeznaczeniem.
emk2203
1
Skorzystaj z nieznacznie zmienionych instrukcji. Próbowałem ich, działają.
emk2203