FFmpeg कमांड के कितने उदाहरण मैं समानांतर में चला सकता हूं?


18

मैं पूरी तरह से सीपीयू का उपयोग करने और वीडियो रूपांतरणों को गति देने के लिए 8 कमांड चलाकर थक गया, कुछ इस तरह से:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/b.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/c.mp4 > /dev/null 2>&1  &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/d.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/e.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/f.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60  -f mp4 /mnt/g.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4  /mnt/h.mp4 > /dev/null 2>&1 &

उनमें से 2 से 3 बंद हो जाते हैं। ऐसा क्यों होता है? यह एक FFmpeg सीमा है? मैंने 16 कोर और 4 कोर मशीनों, EC2 c1.xlarge और cc2.8xlarge पर यह कोशिश की है। समान व्यवहार। मैंने जटिल आज्ञाओं और सरल लोगों की कोशिश की है, अभी भी वही, 2 या 3 बंद हो जाते हैं।


3
मेरे ज्ञान के लिए FFmpeg में कुछ भी नहीं होना चाहिए और आपको ऐसा करने से रोकना चाहिए। एक शेल मुद्दा हो सकता है?
स्लैक

क्या होगा यदि मेरे पास प्रत्येक कमांड के लिए अलग-अलग इनपुट हैं? मैं उन्हें स्वतंत्र कैसे बना सकता हूं, क्योंकि अगर कोई रुकता है तो वे सब बंद कर देते हैं।
सैमसन

क्या आपको मल्टी प्रोसेसर का उपयोग करने के लिए कोई पैरामीटर मिला है ?!
डॉ। अंजी

यहाँ "बंद करो" से आपका क्या मतलब है? बैश उन्हें रुका हुआ दिखाता है?
रोज़रपैक

जवाबों:


21

मूल प्रश्न का उत्तर देने में, जैसे कि कुछ नौकरियां क्यों रुकती हैं, कमांड लाइन पर ffmpeg इंटरैक्टिव है। यह कमांड लाइन पर लगातार इनपुट पढ़ रहा है। इन सभी को पृष्ठभूमि में चलाने के लिए आपको इसे बदलना चाहिए:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &

इसके लिए:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 </dev/null > /dev/null 2>&1 &

के अलावा </dev/nullffmpeg बताता इनपुट के लिए नहीं लग रहे हैं, और अपने सभी कार्य पृष्ठभूमि में चलाने चाहिए।


1
यह क्या है: 2> और 1
डॉजकी

आपका बहुत बहुत धन्यवाद! मुझे वही समस्या थी और यह एक आकर्षण की तरह काम करता था, कृपया स्वीकार करें!
fr_andres का समर्थन करता हैMonicaCellio

3
@ मिस्टर हयडे को मैं जानता हूं कि पार्टी के लिए, लेकिन 2> और 1 त्रुटि स्ट्रीम को उसी स्थान पर जाने के लिए कहता है जहां स्टाउट स्ट्रीम है - इसलिए / dev / null। इसके लिए आशुलिपि है > /dev/null 2>/dev/null
berry120

7

बस अपने आदेश पर एक विचार: एक एकल आदेश के साथ मशीन को हथौड़ा करने का एक बहुत आसान तरीका एक पंक्ति में सब कुछ समाप्‍त कर रहा है:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 \
 -f mp4 /mnt/b.mp4 \
 -f mp4 /mnt/c.mp4 \
 -f mp4 /mnt/d.mp4 \
 -f mp4 /mnt/e.mp4 \
 -f mp4 /mnt/f.mp4 \
 -f mp4 /mnt/g.mp4 \
 -f mp4  /mnt/h.mp4 > /dev/null 2>&1

आप सभी उपलब्ध प्रोसेसर का उपयोग करने के लिए सर्वर को बताने के लिए एक ध्वज (अपने ffmpeg संस्करण पर निर्भर करता है) को जोड़ना चाह सकते हैं

-threads 0

संदर्भ के लिए: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs


मैंने यह कोशिश की है, यह सभी प्रोसेसर का कुशलता से उपयोग नहीं करता है। भार 20-30% पर रहता है, हाइपर थ्रेड्स का उपयोग बिल्कुल नहीं किया जाता है।
d33pika

2
शायद यह EC2 मशीनों के साथ कुछ करना है? मैं सिर्फ 16 आउटपुट के साथ 16 xeon कोर मशीन पर उपरोक्त कमांड चलाता हूं और यही मुझे मिलता है: htop स्क्रीनशॉट
NublaII

क्या आप FFmpeg के नवीनतम संस्करण पर हैं?
d33pika

@NublaII> / dev / null 2> & 1 क्या है?
डॉ। अंजेकी

1
@ Mr.Hyde यह आपसे मानक आउटपुट छुपाता है और आपको त्रुटि आउटपुट दिखाता है। इसे पढ़ें: xaprb.com/blog/2006/06/06/what-does-devnull-21-mean
यूरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.