बैच-कन्वर्ट और विभाजित करें। टर्मिनल से विभिन्न फ़ोल्डरों में .flac


9

मेरे पास 44GB (हाँ, चालीस-चालीस) .apeसीडी फ़ाइलों का फ़ोल्डर है । प्रत्येक .apeएक पूर्ण सीडी है, और आमतौर पर .cueप्रत्येक के साथ एक फ़ाइल है .ape। मुझे बदलने की ज़रूरत है, लेकिन इन्हें विभाजित नहीं करना है, क्योंकि इसके द्वारा कोई क्यू डेटा नहीं है। इसमें कुछ .jpgs और .logs भी हैं, जिनकी मुझे कोई परवाह नहीं है। यदि कोई 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 सीडीएस के लिए सभी तरह।

मूल रूप से, मैं सभी .apeफाइलों को कई फाइलों में विभाजित करना चाहता हूं .flac, और .cueनिर्देशिका संरचना (अधिमानतः पूरी तरह से नए और अलग निर्देशिका में) रखते हुए, टैग जानकारी से कॉपी करना चाहता हूं । यदि संभव हो तो मैं स्क्रिप्ट के लिए सिंगल-लाइन कमांड पसंद करता हूं। मैं इसे किस तरह लूं? किसी को भी धन्यवाद जो यह करना जानता है!

और इससे पहले कि कोई भी इस प्रश्न को एक डुप्लिकेट के रूप में यहाँ पर फ़्लैग करे : सभी .af फ़ाइलों को .flac में अलग-अलग सबफ़ोल्डर्स में कनवर्ट करें , मैं यह बताना चाहूँगा कि उपयोगकर्ता को .flac को एकाधिक .flac में विभाजित करने की आवश्यकता नहीं है।


नमस्ते, क्या आप कृपया अपने वाक्य के बारे में अधिक बताएंगे "... और .ew से टैग जानकारी की प्रतिलिपि बनाएँ ..."। क्या इसका मतलब है परिवर्तित .flac फ़ाइलों का नाम .rc फ़ाइल से पिक-अप होना चाहिए? तो क्या आप कृपया इसका नमूना सामग्री साझा करेंगे। और जानें कि कितनी फाइलें बनानी चाहिए और इन फ़ाइलों की अधिकतम संख्या क्या है? धन्यवाद
αғsнιη

> मैं किसी भी तरह से उन लोगों को छोड़ने की जरूरत है, क्योंकि कोई cue डेटा नहीं है। इससे तुम्हारा क्या मतलब? क्यू डेटा के बिना, आप परिवर्तित कर सकते हैं, लेकिन विभाजित नहीं है, क्योंकि क्यू शुरू होने और समाप्त होने की जानकारी क्यू में है।
emk2203

@ अफशीन.हमदी हां, फ़ाइलनाम ट्रैक शीर्षक से मेल खाएगा। .बॉक्स फ़ाइल में कलाकार, एल्बम, आदि जैसी जानकारी होती है। इस जानकारी को नई फ्लैक फ़ाइलों में कॉपी किया जाना चाहिए।
willem.hill

@ emk2203 अच्छा बिंदु, मैंने सवाल अपडेट किया।
विलेम।

आप अपने आप को और भी अधिक विरोधाभास कर रहे हैं। "मुझे बदलने की ज़रूरत है, लेकिन इन्हें विभाजित नहीं करना है, क्योंकि इसके द्वारा जाने के लिए कोई क्यू डेटा नहीं है।" - "मूल रूप से, मैं सभी .af फ़ाइलों को एकाधिक .flac फ़ाइलों में विभाजित करना चाहता हूं, और .rc से टैग जानकारी की प्रतिलिपि बनाता हूं" तो यह क्या है? यदि यह मानक है "मेरे पास .af और .rc फाइलें हैं, और मैं चाहता हूं कि वे उन्हें टैग किए गए .flac में परिवर्तित और विभाजित करें", तो प्रश्न 24 घंटे पहले दो अच्छे उत्तरों के साथ बंद हो सकता था।
emk2203

जवाबों:


6

मैं इसे कई चरणों में करूंगा, क्योंकि आप शायद ही कभी ऐसा करते हैं। यहां स्वचालन से अधिक पारदर्शिता महत्वपूर्ण है। लेकिन एक लाइन भी संभव है। मुझे लगता है कि यदि आप प्रत्येक चरण के लिए सभी फ़ाइलों के लिए केवल एक ही कमांड का उपयोग करते हैं, तो यही आपका उद्देश्य है।

आपको ffmpeg(या avconv), shntoolऔर cuetoolsस्थापित करने की आवश्यकता है।

अपनी सभी जगह बदलने के .apeलिए .flac:

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

यदि आप http://www.etree.org/shnutils/shntool/ से APE फ़ाइलों के लिए पैच किए गए MAC एनकोडर और डिकोडर को स्थापित करते हैं , तो यह पहला कदम अनावश्यक है। लेकिन आपको इसे 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 प्रारूप के लिए) स्रोत से संकलित करने की आवश्यकता होगी, दूसरों को पैकेज स्थापित करके (यानी FLF)।

यह सभी मानक मामलों में जहां के लिए काम करता है .cueऔर .tta/ .flac/ .apeफ़ाइलें एक ही नाम है, विस्तार के लिए छोड़कर।


दूसरों के लिए टिप्पणी : यदि आप इस रूपांतरण से निपटते हैं, तो आपकी स्रोत फाइलें जापानी मूल की हो सकती हैं, जहां एपीई और टीटीए कहीं और लोकप्रिय थे। यदि .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

shnsplit का मैनपेज एप को एक समर्थित प्रारूप के रूप में सूचीबद्ध करता है ताकि आप ffmpeg के साथ flac में कनवर्ट कर सकें और -o flacइसके बजाय shnsplit का उपयोग कर सकें। एक मानक बेसिन और एप खोजने की उम्मीद न करें क्योंकि कोडेक / कंटेनर अन्य दोषरहित कोडेक्स का भी उपयोग किया जाता है, इसलिए हार्ड कोड न करना बेहतर है और फाइंड कमांड के एक रन में सभी चरणों को शामिल करना बेहतर होगा। metaflac --add-replay-gainएक अच्छा विचार भी होगा।
लाइववायरबीटी

@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"' _ {} \:
डेविड फ़ॉस्टर 14

1
हाँ। मैं हमेशा डिलीट स्विच के बिना एक बार चलाऊंगा ताकि यह सुनिश्चित हो सके कि यह इरादा के अनुसार चलता है।
emk2203

1
कृपया थोड़ा संशोधित निर्देशों का उपयोग करें। कोशिश की, वे काम करें।
emk2203
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.