Batch- แปลงและแยก .ape ด้วย. ลูกบาศก์เป็น. flac ในโฟลเดอร์ต่าง ๆ จากเทอร์มินัล


9

ฉันมี 44GB (ใช่สี่สิบสี่) โฟลเดอร์ของ.apeไฟล์ซีดี แต่ละคน.apeเป็นซีดีที่สมบูรณ์และมักจะมีไฟล์พร้อมกัน.cue .apeฉันต้องแปลง แต่ไม่แยกเหล่านี้เนื่องจากไม่มีข้อมูลคิวที่จะไป นอกจากนี้ยังมีบางส่วน.jpgและ.logในที่มีมากเกินไปซึ่งผมไม่สนใจเกี่ยวกับ หากtreeเอาต์พุตคำสั่งช่วยให้มองเห็นสิ่งนี้คุณจะไปที่:

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

ฯลฯ ... ไปจนถึง 180 CDS

โดยทั่วไปฉันต้องการแยก.apeไฟล์ทั้งหมดเป็นไฟล์หลาย ๆ.flacไฟล์และคัดลอกข้อมูลแท็กออกจากการ.cueรักษาโครงสร้างไดเรกทอรี (โดยเฉพาะในไดเรกทอรีใหม่และแตกต่างอย่างสมบูรณ์) ฉันชอบคำสั่งบรรทัดเดียวกับสคริปต์ถ้าเป็นไปได้ ฉันจะไปเกี่ยวกับเรื่องนี้อย่างไร ขอบคุณทุกคนที่รู้วิธีการทำเช่นนี้!

และก่อนที่ทุกคนจะตั้งคำถามนี้เป็นคำถามซ้ำกับที่นี่: แปลงไฟล์. ape ทั้งหมดเป็น. flac ในโฟลเดอร์ย่อยที่แตกต่างกันฉันต้องการที่จะชี้ให้เห็นว่าผู้ใช้รายนั้นไม่จำเป็นต้องแยก


สวัสดีคุณช่วยอธิบายเพิ่มเติมเกี่ยวกับประโยคของคุณ "... และคัดลอกข้อมูลแท็กจาก .cue ... " หมายความว่าชื่อไฟล์. flac ที่แปลงแล้วควรเป็นกระบะจากไฟล์. ลูกบาศก์? จากนั้นคุณจะโปรดแบ่งปันเนื้อหาตัวอย่างของมัน มีวิธีสร้างไฟล์หลายไฟล์อย่างไรและจำนวนไฟล์สูงสุดเหล่านี้คือเท่าใด? ขอบคุณ
αғsнιη

> ฉันต้องการข้ามสิ่งเหล่านี้เนื่องจากไม่มีข้อมูลคิวที่ต้องดำเนินการ คุณหมายถึงอะไร? หากไม่มีข้อมูลคิวคุณสามารถแปลง แต่ไม่แยกเนื่องจากข้อมูลเกี่ยวกับจุดเริ่มต้นและจุดสิ้นสุดของแทร็กที่อยู่ในคิว
emk2203

@ Afshin.Hamadi ใช่ชื่อไฟล์จะตรงกับชื่อเพลง ไฟล์. ลูกบาศก์มีข้อมูลเช่นศิลปินอัลบั้ม ฯลฯ ข้อมูลนี้ควรคัดลอกไปยังไฟล์ flac ใหม่
willem.hill

@ emk2203 จุดดีฉันอัปเดตคำถาม
willem.hill

คุณขัดแย้งกับตัวเองมากยิ่งขึ้น "ฉันต้องการแปลง แต่ไม่แยกเหล่านี้เนื่องจากไม่มีข้อมูลคิวที่ต้องดำเนินการ" - "โดยทั่วไปผมต้องการที่จะแยกไฟล์ทั้งหมดที่ลิงเป็นไฟล์ .flac หลายและคัดลอกข้อมูลจากแท็กคิวและ ..." แล้วมันคืออะไร หากเป็นมาตรฐาน "ฉันมี. ไฟล์และ. ไฟล์และฉันต้องการให้พวกเขาแปลงและแยกแบบแทนที่แท็ก. flac" คำถามอาจถูกปิดด้วยคำตอบที่ดีสองชั่วโมง 24 ชั่วโมงที่ผ่านมา
emk2203

คำตอบ:


6

ฉันจะทำสิ่งนี้ในหลายขั้นตอนเนื่องจากคุณทำสิ่งนี้ไม่ค่อย ความโปร่งใสมีความสำคัญมากกว่าระบบอัตโนมัติที่นี่ แต่บรรทัดเดียวก็เป็นไปได้เช่นกัน ฉันสมมติว่าถ้าคุณใช้เพียงคำสั่งเดียวสำหรับไฟล์ทั้งหมดในแต่ละขั้นตอนนี่คือสิ่งที่คุณตั้งใจ

คุณต้องมีffmpeg(หรือavconv) shntoolและcuetoolsติดตั้ง

การแปลงของคุณทั้งหมด.apeจะ.flacอยู่ในสถานที่:

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

หากคุณติดตั้งตัวเข้ารหัส MAC และตัวถอดรหัสสำหรับไฟล์ APE จาก http://www.etree.org/shnutils/shntool/ขั้นตอนแรกนั้นไม่จำเป็น แต่คุณจะต้องรวบรวมไว้ด้วยg++และyasmตัวเอง กันไปสำหรับไฟล์ซึ่งก็มักจะนำมาใช้แทน.tta.ape

แยกและชื่อ .flacไฟล์:

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

หากshnsplitยังใช้สำหรับการแปลงเปลี่ยน.flacใน"${1%.cue}.flac"ที่มีนามสกุลของรูปแบบที่คุณมีการแปลงจาก

  • %n - หมายเลขแทร็ก
  • %p - นักแสดง
  • %t - ชื่อเพลง

ถูกนำมาจาก.cueไฟล์สำหรับ.flacชื่อไฟล์ หากต้องการแท็ก.flacไฟล์ที่ได้รับผลแยก:

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

นำส่วนที่เหลืออีกCDImage.ape.cue, CDImage.flacและCDImage.apeไฟล์ที่พักผ่อนของคุณ ชื่อนั้นไม่ซ้ำกันดังนั้นแบบง่าย ๆfind . -name "CDImage*" -deleteก็เพียงพอยกเว้นถ้าโมซาร์ทได้แต่งเพลงโดยเริ่มจากCDImageที่ฉันไม่รู้

สำหรับshnsplitการทำงานจำเป็นต้องติดตั้งตัวเข้ารหัส / ตัวถอดรหัสทั้งหมดเพื่อให้สามารถอ่านและเขียนไฟล์ได้ โมดูลสำหรับ APE (และสำหรับรูปแบบ TTA) จะต้องรวบรวมจากแหล่งอื่น ๆ โดยการติดตั้งแพคเกจ (เช่น FLAC)

ใช้งานได้กับกรณีมาตรฐานทั้งหมดที่.cueและ.tta/ .flac/ .apeไฟล์มีชื่อเดียวกันยกเว้นนามสกุล


หมายเหตุด้านข้างสำหรับผู้อื่น : หากคุณจัดการกับการแปลงไฟล์ต้นฉบับของคุณอาจมาจากภาษาญี่ปุ่นซึ่ง APE และ TTA ได้รับความนิยมมากกว่าที่อื่น หาก.cueไฟล์ถูกแรก Shift-JIS รหัสและตอนนี้เปิดเป็น UTF-8, shnsplitขั้นตอนที่จะทำลาย คุณต้องเปลี่ยนชื่อ.cueไฟล์ด้วย

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

และแปลงไฟล์ระดับกลางเป็น UTF-8 ด้วย

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

ก่อนที่คุณจะพยายามทำตามขั้นตอนด้านบน อย่าลืมกำจัด.cuxไฟล์เมื่อคุณใช้งานเสร็จแล้ว:

find . -name "*.cux" -delete

manpageของ shnsplit แสดงรายการ ape เป็นรูปแบบที่รองรับดังนั้นคุณสามารถข้ามการแปลงเป็น flac ด้วย ffmpeg และใช้-o flacกับ shnsplit แทน อย่าคาดหวังว่าจะหา basename และ ape มาตรฐานเนื่องจาก codec / container ตัวแปลงสัญญาณแบบไม่สูญเสียอื่น ๆ ก็ถูกใช้เช่นกันดังนั้นจึงเป็นการดีกว่าถ้าไม่ใช่รหัสที่ยากและจะดีกว่าหากรวมขั้นตอนทั้งหมดในคำสั่ง find metaflac --add-replay-gainจะเป็นความคิดที่ดี
LiveWireBT

@LiveWireBT: ในทางเทคนิคคุณถูกต้องแล้ว นี่คือเหตุผลที่ฉันพูดว่า "มีสองโซลูชัน" ในหนึ่งในความคิดเห็นของฉัน อย่างไรก็ตามคุณต้องดาวน์โหลดซอร์สสำหรับปลั๊กอินสำหรับการสนับสนุน ape และ tta, ติดตั้ง g ++ และ yasm และคอมไพล์แล้วติดตั้งด้วยตนเอง ฉันไปกับโซลูชัน ffmpeg เนื่องจากง่ายกว่า
emk2203

2
สำหรับเวอร์ชันหนึ่งคำสั่ง: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
ใช่. ฉันจะเรียกใช้ครั้งเดียวเสมอโดยไม่มีสวิตช์ลบก่อนเพื่อให้แน่ใจว่ามันจะทำงานได้ตามที่ต้องการ
emk2203

1
โปรดใช้คำแนะนำที่แก้ไขเล็กน้อย พยายามพวกเขาทำงาน
emk2203
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.