2012-12-21 17 views
8

पूरा कर लिया है, जबकि मुझे लगता है कि मैं एक फ़ोल्डर के भीतर से संसाधन के लिए वीडियो बनाया एक bash स्क्रिप्ट है और यह उप-फ़ोल्डर है:बैश कार्य जब तक पाश इंतजार

find . -type f -name '*.mkv' | while read file; 
do 
    ffmpeg -i $file ... 
done 

समस्या: जबकि पाश पूरा करने के लिए ffmpeg इंतज़ार करने के बजाय यह लूप के माध्यम से फिर से जारी है। अंतिम परिणाम यह है कि फाइलें संसाधित नहीं हो रही हैं। मैं जबकि पाश यात्रा जब तक ffmpeg अगले करने के लिए आगे बढ़ने से पहले पूरा हो गया है प्रतीक्षा करने के लिए वर्तमान के लिए एक तरह से की जरूरत है। या वैकल्पिक रूप से इन वस्तुओं को कतार करने का एक तरीका है।

संपादित करें: तो समाधान जब फ़ाइलों का सेट से अधिक पुनरावृत्ति ffmpeg को -nostdin परम पारित करने के लिए है। उम्मीद है कि यह किसी और की मदद करेगा जो एक समान मुद्दा हो सकता है।

भी फाइल -> $ फ़ाइल एक कॉपी/पेस्ट टाइपो था।

+0

शायद का उपयोग कर पृष्ठभूमि में प्रक्रिया छड़ी 'और' 'ffmpeg' आदेश के अंत में? – squiguy

+0

ffmpeg को समाप्त करने के लिए आपको क्या इंतजार करना चाहिए। क्या आप वाकई ffmpeg (जैसे अमान्य पैरामीटर) से कोई त्रुटि नहीं प्राप्त कर रहे हैं? – Mat

+3

लूप जैसा आपके पास है, तब तक प्रतीक्षा करना चाहिए जब तक कि प्रत्येक आंतरिक आदेश चलता है, जब तक आप लाइन के अंत में '& 'नहीं डालते। क्या आपको कोई त्रुटि संदेश प्राप्त होता है? साथ "गूंज" आंतरिक आदेश prefacing और यह के बाद एक सोने 1 जोड़ने, सत्यापित करें कि पाश ही मुद्दों की जरूरत नहीं है की कोशिश करो। उदाहरण के लिए, आपके द्वारा दी गई कमांड लाइन में, आप '$ file' – user295691

उत्तर

3

मुझे पता है मैंने कुछ समय पहले इस पोस्ट लेकिन मैं समाधान मिल गया। सभी प्रतिक्रियाओं के लिए धन्यवाद। Ffmpeg को -ostostin param प्रदान करना चाल करेगा। प्रसंस्करण के लिए अगली फ़ाइल पर जाने से पहले यह केवल वर्तमान फ़ाइल को संसाधित करेगा।

ffmpeg के -nostdin विकल्प अन्यथा वीडियो फ़ाइल ही व्याख्या की है stdin से उपयोगकर्ता इनपुट पढ़ने का प्रयास टाल।

ffmpeg -i <filename> ... -nostdin -loglevel panic 

यदि आप कोई फाइल करने के लिए उत्पादन रिपोर्ट करेंगे या:

ffmpeg -i <filename> ... -nostdin 

ऊपर का उपयोग कर के बारे में सबसे अच्छी बात यह है कि आप इस मामले में शब्दाडंबर उपयोग करने के लिए एक त्रुटि उत्पादन में फेंक दिया जाता है जारी रख सकते हैं है ऐसा करें:

# Custom log name (optional). Helpful when multiple files are involved. 
# FFREPORT=./${filename}-$(date +%h.%m.%s).log 
ffmpeg -i <filename> ... -nostdin -report 

आप दोनों के संयोजन का भी उपयोग कर सकते हैं। समाधान के लिए @ बाड़ार भी धन्यवाद!

3

मुझे लगता है कि यह file से पहले जितना आसान है उतना आसान है।

find . -type f -name '*.mkv' | while read file; 
do 
    ffmpeg -i $file ... 
done 
3

यह आपके लिए अच्छा है?

find . -type f -name '*.mkv' -exec ffmpeg -i {} \; 
2

मैं एक दुष्कर्मी उत्तर स्नैचर हूं। यहाँ puchu को

ffmpeg -i $file & 
wait $! 

धन्यवाद,:: मैं एक पाया apply ffmpeg to many files

+0

यह एक दिलचस्प तरीका है जिसे मुझे आजमा देना होगा। धन्यवाद! मैंने पाया कि ffmpeg param -nostdin प्रदान करने से चाल चल रही है। – mac2017

संबंधित मुद्दे