मैं देख रहा हूँ कि -threads <count>
ffmpeg में कमांड लाइन विकल्प है। इस विकल्प का डिफ़ॉल्ट मान क्या है?
मैं देख रहा हूँ कि -threads <count>
ffmpeg में कमांड लाइन विकल्प है। इस विकल्प का डिफ़ॉल्ट मान क्या है?
जवाबों:
यह इस्तेमाल किए गए कोडेक, ffmpeg वर्जन और आपके CPU कोर काउंट पर निर्भर करता है। कभी-कभी यह प्रति कोर केवल एक धागा होता है। कभी-कभी यह अधिक जटिल होता है जैसे:
Libx264 के साथ यह फ्रेम थ्रेड्स के लिए कोर x 1.5 और स्लाइस थ्रेड्स के लिए कोर x 1 है।
2014 तक, यह एक इष्टतम संख्या का उपयोग करता है।
आप सीपीयू लोड (लिनक्स:, top
विंडोज: कार्य प्रबंधक) को अलग-अलग विकल्पों के साथ fmmile में जांच कर बहु-कोर कंप्यूटर पर इसे सत्यापित कर सकते हैं :
-threads 0
(इष्टतम);
-threads 1
(एकल पिरोया);
-threads 2
(उदाहरण के लिए एक इंटेल कोर 2 डुओ के लिए 2 धागे);
कोई नहीं (डिफ़ॉल्ट भी इष्टतम)।
२०१५ संपादित करें: १२-कोर सीपीयू पर, कुछ fmmpeg कमांड में लिनक्स top
२००% cpu (केवल २ कोर) पर दिखाई देता है, इससे कोई फर्क नहीं पड़ता कि नंबर किसको दिया गया है -threads
। तो डिफ़ॉल्ट अभी भी "के रूप में अच्छा के रूप में इस ffmpeg बाइनरी मिल सकता है" के अर्थ में इष्टतम हो सकता है, लेकिन "मेरे लेट सीपीयू का पूरी तरह से शोषण" के अर्थ में इष्टतम नहीं है।
2015 में Ubuntu 14.04 पर ffmpeg 0.8.10-6 के साथ, 4 कोर सिस्टम पर 1 कोर का उपयोग किया।
htop
यह दिखाया; केवल एक कोर का उपयोग किया गया था, और मुझे फुलएचडी वीडियो के लिए 16 एफपीएस रूपांतरण दर मिली।
-threads 4
मेरे सभी सीपीयू कोर का उपयोग करके 100% तक चला गया और मुझे 47 एफपीएस की रूपांतरण दर मिली।
मैंने निम्नलिखित कमांड का उपयोग किया:
$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg
इनमें से कुछ उत्तर थोड़े पुराने हैं, और मैं यह जोड़ना चाहूंगा कि मेरे ffmpeg 4.1
साथ libx264
, सभी 6 कोर / 12 धागे मेरे Ryzen 5 2600X सिस्टम के साथ एन्कोडिंग बिना किसी -thread
तर्क के अधिकतम किए गए थे ।
-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode
इसलिए इसे अलग करने के लिए कुछ चर हैं। जोड़ने पर -threads 12
कोई प्रभाव नहीं पड़ा।
मैं एक CentOS 6.5 VM (Ryzen 1700 8c / 16t - vm को 16 कोर में से 12) में परिवर्तित करने के साथ खेल रहा था। 480p फिल्मों के साथ प्रयोग निम्नलिखित हैं:
धागा विकल्प / रूपांतरण दर (एफपीएस @ 60 सेकंड)
(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps
दिलचस्प हिस्सा सीपीयू लोडिंग ( htop
इसे देखने के लिए उपयोग करना) था। 130fps रेंज पर
नो -threads
ऑप्शन घाव का उपयोग करके लोड-लेवल पर सभी कोर में फैले लोड के साथ।
1 थ्रेड का उपयोग करना बिल्कुल ऐसा ही था, एक कोर को 100% पर लोड करना। किसी और चीज का उपयोग करने से एक और फैल-लोड स्थिति उत्पन्न हुई।
जैसा कि आप देख सकते हैं, कम रिटर्न का भी एक बिंदु है, इसलिए आपको अपने विशेष मशीन के लिए -threads विकल्प समायोजित करना होगा। मेरे सेटअप के लिए विशेष रूप से, -थ्रेड्स 6 (एक 12 कोर मशीन पर) का उपयोग करने के परिणामस्वरूप वीडियो को परिवर्तित करते समय सबसे अच्छा एफपीएस प्राप्त होता है (रूपांतरण को बाध्य करने के लिए एक अलग बिटरेट पर h264 से x264 तक) और रिटर्न वास्तव में अधिक धागे को कम कर देता है जिसे मैंने फेंक दिया था यह।
यह एक मेमोरी इश्यू भी हो सकता है - इसमें केवल 1GB वीएम को सौंपा गया था। मैं इसे बदल सकता हूं और देख सकता हूं कि क्या कुछ भी बदलता है। फिर भी - यह दर्शाता है कि -threads
विकल्प का उपयोग करने से प्रदर्शन में वृद्धि हो सकती है, इसलिए अपने सेटअपों को मिठाई स्थान खोजने के लिए विभिन्न स्तरों पर अपने विशेष मशीन पर कुछ परीक्षण चलाएं।
यह मानते हुए कि आपने थ्रेडिंग सक्षम की है, इसने 1.5x संख्या में कोर असाइन किया है।
-x264-params sliced-threads=1
। या के उपयोग के माध्यम से -tune zerolatency
।