VLC बैश ट्रांसकोडिंग स्क्रिप्ट गंतव्य निर्देशिका


0

खैर, मेरे पास ऐसी ट्रांसकोडिंग स्क्रिप्ट है:

#!/bin/bash
acodec="vorb"  
arate="256" 
ext="ogg" 
vlc="/usr/bin/vlc" 
fmt="mp3" 

for a in *$fmt; do 
$vlc -I dummy -vvv "$a" --sout "#transcode{acodec=$acodec,ab=$arate,channels=2}:duplicate{dst=std{access=file,mux=ogg,dst=\"${PWD##*/}/${a%%.*}.$ext\"}" vlc://quit 
done

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

/usr/tmp/pop_music

मैं निर्देशिका में परिवर्तित फ़ाइलों को रखना चाहता हूं

/$user/pop_music

मैंने सभी संभव बदलाव किए हैं और हमेशा त्रुटि मिलती है। वर्तमान (ऊपर) प्रकार के साथ मुझे त्रुटि मिलती है:

[0xb500abe0] मुख्य स्ट्रीम डिबग आउट: श्रृंखला को नष्ट करना ... (नाम = (नल))
[0xb500abe0] डिबग से मुख्य धारा: चेन को नष्ट करना   [0xb5000588] मुख्य धारा आउटपुट त्रुटि: स्ट्रीम श्रृंखला `ट्रांसकोड {acodec = vorb, ab = 256, चैनल = 2} के लिए विफल: डुप्लिकेट {dst = std {एक्सेस = फ़ाइल, mux = ogg dst = "1 / अलबामा - यदि आप टेक्सास में खेल रहे हैं (तो आपको बैंड में एक पहेली है)
[0x95be4f8] मुख्य इनपुट त्रुटि: स्ट्रीम आउटपुट उदाहरण, गर्भपात शुरू नहीं कर सकता
[0x96985a8] मुख्य प्लेलिस्ट डीबग: समाप्त इनपुट
[0x96985a8] मुख्य प्लेलिस्ट डिबग: डेड इनपुट

मैंने dst में निर्दिष्ट करने की कोशिश की:
1) 1 / XXX.ogg
2) / 1/XXX.ogg
3) 1 \ XXX.ogg
4) \ 1 \ XXX.ogg
लेकिन कोई भाग्य के साथ ...


क्या लक्ष्य निर्देशिका मौजूद है? वीएलसी शायद आपके लिए इसे स्वचालित रूप से नहीं बनाएगा।
Daniel Andersson

जवाबों:


0

यदि आउटपुट निर्देशिका मौजूद नहीं है, तो VLC उस सटीक संदेश के साथ विफल हो जाता है।

यह पटकथा का एक छोटा विस्तार है। वर्तमान स्थिति में यह निर्देशिकाओं को तर्क के रूप में लेता है और उनके माध्यम से लूप करता है। यदि कोई तर्क नहीं दिया जाता है, तो यह वर्तमान निर्देशिका में फ़ाइलों की तलाश करता है। आउटपुट फाइलें होम डाइरेक्टरी को लिखी जाती हैं, प्रत्येक दिए गए फाइल के मूल निर्देशिका के रूप में उपनिर्देशिका के तहत। आउटपुट निर्देशिका त्रुटि संदेश से बचने के लिए मंगलाचरण पर बनाई गई हैं।

#!/bin/sh
usage() {
    cat <<-USAGE 1>&2
    usage: ${0##*/} [DIR ...]

    optional arguments:
      DIR   directories to search. Use current directory if none are given.
    USAGE
    exit 1
}

error() {
    printf '%s: error: %s, aborting.\n' "${0##*/}" "$1" 1>&2
    exit $2
}

transcode_dir() {
    indir=$(readlink -f -- "$1")
    outdir="$HOME/${indir##*/}"

    ! mkdir -pv -- "$outdir" && error "cannot create directory \"$outdir\"" 3

    cd -- "$indir"
    for a in *.$fmt; do
        $vlc -I dummy -vvv "$a" --sout "#transcode{acodec=$acodec,ab=$arate,channels=2}:duplicate{dst=std{access=file,mux=ogg,dst=\"$outdir/${a%.*}.$ext\"}}" vlc://quit
    done
    cd - 2> /dev/null
}

while getopts "h" option; do
    case $option in
        h|\? )  usage;;
    esac
done
shift $((OPTIND-1))

acodec="vorb"
arate="256"
ext="ogg"
vlc="/usr/bin/vlc"
fmt="mp3"

if [ $# -eq 0 ]; then
    transcode_dir .
else
    while [ $# -ge 1 ]; do
        [ ! -d "$1" ] && error "not a directory: \"$1\"" 2
        transcode_dir "$1"
        shift
    done
fi

बहुत सारी लाइनें, लेकिन इसमें से अधिकांश बस बॉयलर-प्लेट कोड चिपकाया जाता है (यह पूछने के लिए बेझिझक कि कोई हिस्सा अस्पष्ट है) मैंने दुभाषिये को बदल दिया #!/bin/sh चूंकि कोई बैश विशिष्ट निर्माण का उपयोग नहीं किया जाता है। मैंने स्पष्टता के लिए ट्रांसकोडिंग भाग को एक फ़ंक्शन में स्थानांतरित कर दिया।


आपकी सहायता के लिए धन्यवाद। क्या यह सामान्य व्यवहार (निर्देशिकाओं को मैन्युअल रूप से बनाया जाना चाहिए) UNIX- आधारित प्रणालियों के लिए है? या यह वीएलसी की बारीकियां हैं? विंडोज में अगर गंतव्य को स्लैश के माध्यम से निर्दिष्ट किया जाता है तो निर्देशिका स्वचालित रूप से बनाई जाएगी जो मुझे पता है
Suncatcher

@ डेजमंड: मुझे लगता है कि कार्यक्रमों के लिए असफल होना काफी सामान्य है अगर रास्ता उपलब्ध नहीं है। कम से कम उन्हें कुछ पूछना चाहिए "निर्देशिका एक्स मौजूद नहीं है, क्या इसे बनाया जाना चाहिए?" करने से पहले। जिस तरह से उदा। विंडोज इंस्टालर आमतौर पर इसे हल करते हैं; प्रोग्राम के आधार पर प्रोग्राम को कैसे हल किया जाता है, यह अलग-अलग होता है।
Daniel Andersson

अपनी स्क्रिप्ट की कोशिश की और यह लिखा: "सिंटैक्स त्रुटि: फ़ाइल का अंत अप्रत्याशित (उम्मीद"} ")"
Suncatcher

@ डेजमंड: मैंने इसे स्थानीय रूप से चिपकाने और चलाने की कोशिश की, और यह काम कर गया। फिर से अपने चिपकाने की जाँच करें। मैं इसे डैश के साथ दुभाषिया के रूप में चला रहा हूं, जो जल्दी से किसी भी गैर-मानक पर टूट जाता है, इसलिए मैं वर्तमान में यह नहीं देख सकता कि सही तरीके से पेस्ट किए जाने पर सिंटैक्स त्रुटि कहां से आ सकती है। ध्यान दें कि यदि स्क्रिप्ट दी गई निर्देशिका में मेल नहीं खाती हैं तो स्क्रिप्ट अप्रत्याशित परिणाम देती है, लेकिन यह कोशिश करने पर खुद को स्पष्ट कर देना चाहिए। इसलिए, स्क्रिप्ट को उदा। पर लिखें फ़ाइल transcoder.sh, इसे निष्पादन योग्य बनाएं: chmod +x transocer.sh और इसके साथ चलाओ ./transcoder.sh
Daniel Andersson

"कोई मिलान फ़ाइलें नहीं" और "सिंटैक्स त्रुटि" अलग-अलग परिस्थितियां हैं :) ठीक है, मैं जल्द ही फिर से कोशिश करूंगा
Suncatcher
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.