Batch-convert và split .ape với .THER thành .flac trong các thư mục khác nhau từ terminal


9

Tôi có một thư mục 44GB (có, bốn mươi bốn) .apetệp CD. Mỗi .apeđĩa là một đĩa CD hoàn chỉnh và thường có một .cuetệp cùng với mỗi tệp .ape. Tôi cần chuyển đổi nhưng không phân chia những thứ này, vì không có dữ liệu nào để đi qua. Ngoài ra còn có một số .jpgs và .logs trong đó, mà tôi không quan tâm. Nếu một treeđầu ra lệnh giúp trực quan hóa điều này, thì ở đây bạn đi:

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

vv ... tất cả các cách để 180 CDS.

Về cơ bản, tôi muốn chia tất cả các .apetệp thành nhiều .flactệp và sao chép thông tin thẻ từ .cue, giữ cấu trúc thư mục (tốt nhất là trong một thư mục hoàn toàn mới và khác). Tôi thích một lệnh một dòng cho một kịch bản nếu có thể. Làm thế nào tôi sẽ đi về điều này? Cảm ơn bất cứ ai biết làm điều này!

Và trước khi bất kỳ ai đánh dấu câu hỏi này là trùng lặp với câu hỏi này tại đây: Chuyển đổi tất cả các tệp .ape thành .flac trong các thư mục con khác nhau , tôi muốn chỉ ra rằng người dùng đó không cần phải chia .ape thành nhiều .flacs.


Xin chào, bạn vui lòng giải thích thêm về câu của bạn "... và sao chép thông tin thẻ từ .THER ...". Có phải nó có nghĩa là tên tệp .flac đã chuyển đổi nên được chọn từ tệp .THER? Sau đó, bạn vui lòng chia sẻ nội dung mẫu của nó. Khác làm thế nào nhiều tập tin nên được tạo và số lượng tối đa của các tập tin này là gì? Cảm ơn
asнι

> Tôi cần phải bỏ qua những thứ đó, vì không có dữ liệu nào để đi qua. Bạn có ý nghĩa gì bởi điều này? Nếu không có dữ liệu cue, bạn có thể chuyển đổi, nhưng không phân tách, vì thông tin về nơi bắt đầu và kết thúc của bài hát trong cue.
emk2203

@ Afshin.Hamadi Có, tên tệp sẽ khớp với tiêu đề bài hát. Tệp .THER có thông tin như nghệ sĩ, album, v.v. Thông tin này nên được sao chép sang các tệp flac mới.
willem.hill

@ emk2203 Điểm tốt, tôi đã cập nhật câu hỏi.
willem.hill

Bạn đang mâu thuẫn với chính mình nhiều hơn. "Tôi cần chuyển đổi nhưng không phân tách những thứ này, vì không có dữ liệu nào để đi qua." - "Về cơ bản, tôi muốn chia tất cả các tệp .ape thành nhiều tệp .flac và sao chép thông tin thẻ từ .THER ..." . Vậy đo la cai gi? Nếu đó là tiêu chuẩn "Tôi có tệp .ape và .THER và tôi muốn chúng được chuyển đổi và phân chia tại chỗ thành thẻ .flac", câu hỏi có thể đã được đóng lại bằng hai câu trả lời hay 24 giờ trước.
emk2203

Câu trả lời:


6

Tôi sẽ làm điều này trong nhiều bước, vì bạn hiếm khi làm điều này. Minh bạch là quan trọng hơn tự động hóa ở đây. Nhưng một dòng duy nhất cũng có thể. Tôi giả sử rằng nếu bạn chỉ sử dụng một lệnh cho tất cả các tệp mỗi bước thì đây là những gì bạn dự định.

Bạn cần phải có ffmpeg(hoặc avconv) shntoolcuetoolscài đặt.

Để chuyển đổi tất cả của bạn .apethành .flactại chỗ:

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

Nếu bạn cài đặt bộ mã hóa và giải mã MAC đã vá cho các tệp APE từ http://www.etree.org/shnutils/shntool/ , bước đầu tiên này là không cần thiết. Nhưng bạn sẽ cần phải biên dịch nó với g++yasmchính mình. Tương tự với .ttacác tập tin, cũng thường được sử dụng thay vì .ape.

Tách và đặt tên .flac tệp:

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

Nếu shnsplitcũng được sử dụng cho việc chuyển đổi, thay thế .flactrong "${1%.cue}.flac"với phần mở rộng của định dạng mà bạn đang chuyển đổi từ.

  • %n - số theo dõi
  • %p - người biểu diễn
  • %t - Tên bài hát

được lấy từ .cuetệp cho .flactên tệp. Để gắn thẻ kết quả, chia .flactệp:

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

Loại bỏ phần còn lại CDImage.ape.cue, CDImage.flacCDImage.apecác tập tin lúc rảnh rỗi. Các tên là duy nhất, vì vậy một đơn giản find . -name "CDImage*" -deletelà đủ, ngoại trừ nếu Mozart thực hiện một sáng tác bắt đầu CDImagemà tôi không biết.

Để shnsplitlàm việc, tất cả các bộ mã hóa / giải mã cần thiết cần phải được cài đặt để nó có thể đọc và ghi tệp. Các mô-đun cho APE (và cho định dạng TTA) sẽ cần được biên dịch từ nguồn, các mô-đun khác bằng cách cài đặt gói (ví dụ FLAC).

Điều này hoạt động cho tất cả các trường hợp tiêu chuẩn trong đó .cue.tta/ .flac/ .apetệp có cùng tên, ngoại trừ phần mở rộng.


Nhận xét phụ cho người khác : Nếu bạn xử lý chuyển đổi này, các tệp nguồn của bạn có thể có nguồn gốc từ Nhật Bản, nơi APE và TTA phổ biến hơn các nơi khác. Nếu các .cuetệp ban đầu được mã hóa SHIFT-JIS và bây giờ được mở dưới dạng UTF-8, shnsplitbước này sẽ bị hỏng . Bạn cần đổi tên các .cuetập tin với

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

và chuyển đổi các tệp trung gian thành UTF-8 với

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

trước khi bạn cố gắng làm các bước trên. Đừng quên loại bỏ các .cuxtệp khi bạn hoàn thành:

find . -name "*.cux" -delete

shnsplit của manpage danh sách bắt chước như một định dạng được hỗ trợ, do đó bạn có thể bỏ qua chuyển đổi sang flac với ffmpeg và sử dụng -o flacvới shnsplit để thay thế. Đừng mong đợi tìm thấy một tên cơ sở và vượn tiêu chuẩn vì codec / container khác các codec không mất dữ liệu khác cũng được sử dụng, vì vậy tốt hơn hết là không sử dụng mã cứng và sẽ tốt hơn nếu bao gồm tất cả các bước trong một lần chạy lệnh find. metaflac --add-replay-gaincũng sẽ là một ý tưởng tốt
LiveWireBT

@LiveWireBT: Về mặt kỹ thuật, bạn đã đúng. Đây là lý do tại sao tôi nói "hai giải pháp khả dụng" trong một bình luận của tôi. Tuy nhiên, bạn cần tải xuống nguồn cho các plugin để hỗ trợ ape và tta, cài đặt g ++ và yasm và biên dịch và tự cài đặt chúng. Tôi đã đi với giải pháp ffmpeg vì nó dễ dàng hơn.
emk2203

2
Đối với phiên bản một lệnh: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
Đúng. Tôi sẽ luôn chạy một lần mà không có công tắc xóa trước để đảm bảo rằng nó chạy như dự định.
emk2203

1
Vui lòng sử dụng các hướng dẫn sửa đổi một chút. Đã thử họ, họ làm việc.
emk2203
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.