Batch-convert dan split .ape dengan .cue to .flac di berbagai folder dari terminal

9

Saya memiliki folder .apefile CD sebesar 44GB (ya, empat puluh empat) . Masing .ape- masing adalah CD lengkap, dan biasanya ada .cuefile bersama dengan masing-masing .ape. Saya perlu mengonversi tetapi tidak membaginya, karena tidak ada data isyarat untuk dilewati. Ada juga beberapa .jpgdan .logdi sana juga, yang saya tidak peduli. Jika treeoutput perintah membantu memvisualisasikan ini, ini dia:

├── 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

dll ... sampai 180 CDS.

Pada dasarnya, saya ingin membagi semua .apefile menjadi beberapa .flacfile, dan menyalin info tag dari .cue, menjaga struktur direktori (lebih disukai dalam direktori yang sama sekali baru dan berbeda). Saya lebih suka perintah baris tunggal ke skrip jika memungkinkan. Bagaimana saya melakukan ini? Terima kasih kepada siapa pun yang tahu bagaimana melakukan ini!

Dan sebelum ada yang menandai pertanyaan ini sebagai duplikat untuk yang ini di sini: Konversikan semua file .ape ke .flac di subfolder yang berbeda , saya ingin menunjukkan bahwa pengguna itu tidak perlu membagi file .ape menjadi beberapa .flacs.

willem.hill
sumber
Hai, tolong jelaskan lebih lanjut tentang kalimat Anda "... dan salin info tag dari .cue ...". Apakah itu berarti nama file .flac yang dikonversi harus diambil dari file .cue? Maka tolong bagikan konten sampel itu. Jika tidak, berapa banyak file yang harus dibuat dan berapa jumlah maksimum file-file ini? Terima kasih
αғsнιη
> Saya perlu melewatkannya, karena tidak ada data isyarat untuk dilewati. Apa yang Anda maksud dengan ini? Tanpa data isyarat, Anda bisa mengonversi, tetapi tidak membagi, karena info tentang di mana trek mulai dan berakhir ada di isyarat.
emk2203
@ Afshin.Hamadi Ya, nama file akan cocok dengan judul lagu. File .cue memiliki info seperti artis, album, dll. Info ini harus disalin ke file flac baru.
willem.hill
@ emk2203 Poin bagus, saya memperbarui pertanyaan.
willem.hill
Anda bahkan lebih kontradiksi dengan diri Anda sendiri. "Saya perlu mengonversi tetapi tidak membaginya, karena tidak ada data isyarat untuk dilewati." - "Pada dasarnya, saya ingin membagi semua file .ape menjadi beberapa file .flac, dan menyalin informasi tag dari .cue ..." . Jadi apa itu? Jika itu adalah standar "Saya punya file .ape dan .cue, dan saya ingin mereka dikonversi dan dipisah di tempat untuk ditandai .flac", pertanyaan itu bisa ditutup dengan dua jawaban yang baik 24 jam yang lalu.
emk2203

Jawaban:

6

Saya akan melakukan ini dalam beberapa langkah, karena Anda jarang melakukannya. Transparansi lebih penting daripada otomatisasi di sini. Tetapi satu baris juga dimungkinkan. Saya berasumsi bahwa jika Anda hanya menggunakan satu perintah untuk semua file setiap langkah, inilah yang Anda maksudkan.

Anda harus memiliki ffmpeg(atau avconv), shntooldan cuetoolsmenginstal.

Untuk mengonversi semua .apemenjadi .flacdi tempat:

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

Jika Anda menginstal encoder dan decoder MAC yang ditambal untuk file APE dari http://www.etree.org/shnutils/shntool/ , langkah pertama ini tidak perlu. Tapi Anda perlu compile dengan g++dan yasmdiri sendiri. Hal yang sama berlaku untuk .ttafile, yang juga sering digunakan .ape.

Pisahkan dan beri nama.flac file:

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

Jika shnsplitjuga digunakan untuk konversi, ganti .flacin "${1%.cue}.flac"dengan ekstensi format yang Anda konversi.

  • %n - nomor pelacak
  • %p - penampil
  • %t - nama trek

diambil dari .cuefile untuk .flacnama file. Untuk menandai hasil, bagi .flacfile:

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

Lepaskan tersisa CDImage.ape.cue, CDImage.flacdan CDImage.apefile di waktu luang Anda. Nama-nama yang unik, jadi sederhana find . -name "CDImage*" -deletesudah cukup, kecuali jika Mozart membuat komposisi dimulai dengan CDImageyang saya tidak sadari.

Agar shnsplitberfungsi, semua enkode / decoder yang diperlukan perlu diinstal sehingga dapat membaca dan menulis file. Modul untuk APE (dan untuk format TTA) perlu dikompilasi dari sumber, yang lain dengan menginstal paket (yaitu FLAC).

Ini berfungsi untuk semua kasus standar di mana .cuedan .tta/ .flac/ .apefile memiliki nama yang sama, kecuali untuk ekstensi.


Komentar sampingan untuk orang lain : Jika Anda berurusan dengan konversi ini, file sumber Anda mungkin berasal dari Jepang, di mana APE dan TTA lebih populer daripada di tempat lain. Jika .cuefile awalnya kode SHIFT-JIS dan sekarang dibuka sebagai UTF-8, shnsplitlangkah ini akan rusak . Anda harus mengganti nama .cuefile dengan

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

dan mengonversi file antara ke UTF-8 dengan

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

sebelum Anda mencoba melakukan langkah-langkah di atas. Jangan lupa untuk menyingkirkan .cuxfile ketika Anda selesai dengan:

find . -name "*.cux" -delete
emk2203
sumber
manpage shnsplit mencantumkan kera sebagai format yang didukung sehingga Anda dapat melewatkan konversi menjadi flac dengan ffmpeg dan gunakan -o flacshnsplit sebagai gantinya. Jangan berharap untuk menemukan nama standar dan kera karena codec / container codec lossless lainnya digunakan juga, jadi lebih baik untuk tidak menggunakan kode yang keras dan akan lebih baik untuk memasukkan semua langkah dalam satu menjalankan perintah find. metaflac --add-replay-gainjuga akan menjadi ide bagus.
LiveWireBT
@LiveWireBT: Secara teknis, Anda benar. Inilah sebabnya saya mengatakan "dua solusi tersedia" di salah satu komentar saya. Namun, Anda perlu mengunduh sumber untuk plugin untuk dukungan kera dan tta, instal g ++ dan yasm dan kompilasi dan instal sendiri. Saya menggunakan solusi ffmpeg karena lebih mudah.
emk2203
2
Untuk versi satu perintah: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
Iya. Saya akan selalu berjalan sekali tanpa menghapus switch terlebih dahulu untuk memastikan bahwa itu berjalan sebagaimana dimaksud.
emk2203
1
Silakan gunakan instruksi yang sedikit direvisi. Mencoba mereka, mereka bekerja.
emk2203