कई मोनो ट्रैक को स्टीरियो से मिलाने के लिए स्क्रिप्ट चलाने के लिए स्क्रिप्ट


4

मेरे पास .wavऑडियो फाइलों से भरा एक फोल्डर है ।

कुछ स्टीरियो हैं, अधिकांश मोनो स्प्लिट हैं।

मोनो स्प्लिट जोड़े सभी के नाम हैं foo bar track.L.wavऔरfoo bar track.R.wav

मैं soxमोनो लाइन को इस तरह से 1 स्टीरियो ट्रैक में संयोजित करने के लिए कमांड लाइन टूल का उपयोग कर सकता हूं :

sox -M track1.L.wav track1.R.wav track1.Stereo.wav

जहां पहले 2 फाइलें मोनो जोड़े हैं, और तीसरी आउटपुट स्टीरियो फाइल है।

यह बहुत अच्छा है, लेकिन मैं एक ऐसी स्क्रिप्ट रखना चाहूंगा जो स्वचालित रूप से सभी मोनो जोड़े को ढूंढ ले और उन्हें स्टीरियो फाइलों में संयोजित कर दे।

यानी, मुझे उन सभी फ़ाइलों को खोजने की आवश्यकता है जिनके पास एक्सटेंशन के अलावा .L.और .R.पहले के समान नाम हैं , और soxउन पर चलाएं , L/Rप्रत्यय के बिना एक ही नाम के साथ एक नई फ़ाइल के लिए आउटपुट ।

उदाहरण के लिए, यदि मेरे फ़ोल्डर में ये फ़ाइलें हैं:

track1.L.wav
track2.L.wav
track3.L.wav
track4.L.wav
track1.R.wav
track2.R.wav
track3.R.wav
track4.R.wav
track6.wav
track7.wav

मुझे इन आदेशों को चलाने की आवश्यकता है:

sox -M track1.L.wav track1.R.wav track1.Stereo.wav
sox -M track2.L.wav track2.R.wav track2.Stereo.wav
sox -M track3.L.wav track3.R.wav track3.Stereo.wav
sox -M track4.L.wav track4.R.wav track4.Stereo.wav

यहाँ मैं यहाँ तक हूँ:

for file in ./*.L.wav;
do 
    file2=`echo $file | sed 's_\(.*\).L.wav_\1.R.wav_'`;
    out=`echo $file | sed 's_\(.*\).L.wav_\1.STEREO.wav_'`;
    echo $file - $file2 - $out;
done

वह काम करता है, लेकिन जब मैं echoलाइन को प्रतिस्थापित करता हूं

sox -M $file $file2 $out;

यह काम नहीं करता है; फ़ाइल नाम में रिक्त स्थान इसे विफल करने का कारण बनते हैं।

जवाबों:


5

GNU / Linux कंसोल से इसके लिए प्रयास करें:

for file in ./*L*wav;
do
    for file2 in ./*R*wav;
    do
        $out = "Stereo"
        sox -M $file $file2 $file-$out.wav;
    done;
done

नोट: "./" संगीत निर्देशिका का प्रतिनिधित्व करें जहां आपकी फाइलें हैं।


sox3 आर्ग की जरूरत है: 2 फाइलें, साथ ही आउटपुट फाइल। मुझे आउटपुट फ़ाइल नाम की आवश्यकता है L के बिना पहले 2 का नाम या R
दान

क्षमा करें, यह काम नहीं करता है; यह मेल खाने वाली फाइलों से मेल नहीं खाता। यह हर फ़ाइल को एक "L" के साथ लौटाता है, उसके बाद हर दूसरी फ़ाइल, फिर से।
डैन

हाँ, मुझे क्षमा करें; मैं तीसरा तर्क भूल गया
22

मैंने स्पष्ट करने के लिए पोस्ट को अपडेट किया; आपका कोड अभी भी मेल खाते जोड़े को पंक्तिबद्ध नहीं करता है। इसके अलावा, ./*.L.wavबेहतर काम करता है ...
Dan

दूसरे forकथन को किसी तरह की फाइलों को खोजने की जरूरत है *जो पहले से मेल खाती हैंfor
डैन

2

Sgmart के सुझाव से चलते हुए, मैंने इसे हल किया:

for file1 in ./*.L.wav; do 
  file2=`echo $file1 | sed 's_\(.*\).L.wav_\1.R.wav_'`;
  out=`echo $file1 | sed 's_\(.*\).L.wav_\1.STEREO.wav_'`;
  sox -MS "$file1" "$file2" "$out";
  mv "$file1" mono; mv "$file2" mono;
done

"चर के आसपास की जरूरत है ।

और मैंने संसाधित फ़ाइलों को एक 'मोनो' सबफ़ोल्डर में स्थानांतरित करने के लिए थोड़ा जोड़ा।


0

उन लोगों के लिए जिन्हें एक बैच फ़ाइल के साथ विंडोज में ऐसा करने की आवश्यकता है :

जिन 4 नियमों को पूरा करने की आवश्यकता है, वे हैं:

1) बैच फ़ाइल को उस निर्देशिका में रखा जाना चाहिए जहां SOX स्थापित है

2) मोनो फ़ाइलों को .L.WAV और .R.WAV समाप्ति की आवश्यकता होती है

3) फ़ाइल नाम में कोई सफेद स्थान नहीं

4) नामक एक नया फ़ोल्डर में सभी अपने मोनो फ़ाइलें / फ़ोल्डर रखो इनपुट SOX स्थापना फ़ोल्डर के अंदर

बैच फ़ाइल को चलाने के बाद आपको एक नया फ़ोल्डर मिलेगा जिसे सभी स्टीरियो फ़ाइलों के साथ आउटपुट और इनपुट फ़ोल्डर के समान फ़ोल्डर संरचना मिलती है

कोड पर टिप्पणी की गई है इसलिए प्रक्रिया में प्रत्येक चरण का पालन करना आसान है, इस स्क्रिप्ट के बेहतर संस्करणों को संशोधित करने और पोस्ट करने के लिए स्वतंत्र महसूस करें (प्रतिलिपि भाग एक चाल होना चाहिए लेकिन मैं cmd ​​बैच कोड में बहुत विशेषज्ञ नहीं हूं!)।

ये रहा:

cd %~dp0
setlocal enabledelayedexpansion

REM for each file with extension .L.WAV in input folder and its subdirectories do:
for /R %~dp0input %%F in (*.L.WAV) do (

    REM get fullpath name and then remove the last 6 characters. ex: MYWAVE.L.WAV -> MYWAVE
    set fileName=%%F
    set finalName=!filename:~0,-6!

    REM set names for each parameter used by sox
    set wavL=!finalName!.L.WAV
    set wavR=!finalName!.R.WAV
    set wavST=!finalName!.ST.WAV

    REM call sox for mono to stereo conversion
    sox !wavL! !wavR! !wavST! -MS

)

REM creat output folder
mkdir %~dp0output

REM copy files to output folder 
echo d | xcopy %~dp0input %~dp0output /S

REM delete ST files from input folder 
for /R %~dp0input %%F in (*.ST.WAV) do del %%F

REM delete L files from output folder 
for /R %~dp0output %%F in (*.L.WAV) do del %%F

REM delete R files from output folder 
for /R %~dp0output %%F in (*.R.WAV) do del %%F
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.