Ffmpeg -थ्रेड सेटिंग्स को कैसे बदलें


15

एक ट्यूब साइट पर काम करना । मैं के माध्यम से वीडियो चल रहा हूँ ffmpeg एक पर linux समर्पित सर्वर के लिए कन्वर्ट करने के लिए mp4

सर्वर चश्मा:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               3491.749
BogoMIPS:              6983.49
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

परीक्षण के दौरान मुद्दा यह है कि एक बार में केवल 4-5 करने पर भी सर्वर लगभग 36 के औसत से आसमान छूता है। यह सिर्फ एक व्यक्ति है। मुझे लगता है कि जब यह खुलता है, तो कई लोग एक साथ अपलोड कर रहे होंगे।

ऐसा लगता है कि ffmpeg प्रति रूपांतरण उपलब्ध सभी संसाधनों का उपयोग करने की कोशिश करता है।

मैंने सुना है कि वहाँ एक सेटिंग है जिसे आप बदल सकते हैं, लेकिन मैं इसे नहीं ढूँढ सकता। मेरे पास 8 cpu सर्वर है। इसका उपयोग केवल रूपांतरणों के लिए किया जाता है, इसलिए मैंने सुना है कि सबसे अच्छी सेटिंग 2 और 4 के बीच होगी। मैं इसका परीक्षण कर सकता हूं।

लेकिन मैं इस सेटिंग को कैसे बदलूं? मैं जो कुछ भी ऑनलाइन देखता हूं, वह इस सेटिंग पर चर्चा करता है, लेकिन इसे बदलने के चरणों पर नहीं।

linux  ffmpeg  cpu  mp4 

जवाबों:


17

आप जो विकल्प झंडा चाहते हैं वह वास्तव में बस है -threadsऔर आप इसे इस तरह से उपयोग करेंगे (सिर्फ एक धागे के लिए):

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4

हालांकि, काफी कुछ सूक्ष्मताएं हैं जो आपके सर्वर लोड और ऑप्स समय बढ़ाएंगे, जैसे कि rescaling, फ़िल्टर और अंतिम फ्रेम गुणवत्ता / फ्रेम दर लागू करना - इस तथ्य का उल्लेख नहीं करना कि कुछ VM आर्किटेक्चर वास्तव में दो बार (एक बार मूल रूप से) पढ़ते हैं और लिखते हैं और वस्तुतः !!!)

अपनी गति बढ़ाने के लिए यहां कुछ सुझाव दिए गए हैं:

  1. एक कतार का उपयोग करें, ताकि एक बार में केवल एक आइटम को ट्रांसकोड किया जा सके
  2. अपने उपयोगकर्ताओं से छोटी फ़ाइलों का अनुरोध करें
  3. अपनी मशीन की पूरी अश्वशक्ति का उपयोग करें:
    • रमदिस्क से पढ़ना और लिखना
    • ट्रांसकोडिंग कार्यों के लिए नंगे धातु पर स्विच करना
    • उपयोग -threads 0

जो कुछ भी आप करते हैं, अपने उपयोगकर्ताओं को ट्रांसकोडिंग प्रक्रिया के बारे में सूचित रखें, क्योंकि इसमें अभी समय लगता है। (IJTT)

लॉर्डनेकबर्ड की टिप्पणी को दर्शाने के लिए [संपादित कमांड]


10
विकल्प प्लेसमेंट मायने रखता है। साथ -threadsइनपुट से पहले आप इस विकल्प को इनपुट (विकोडक) आवेदन कर रहे हैं। एक सामान्यीकृत उपयोग है ffmpeg [global options] [input options] -i input [output options] output
ललगन

तो आप इसे कहां रखने का सुझाव देंगे? मुझे लगा कि शुरुआत में इसे विश्व स्तर पर लागू किया जा रहा है?
डेनजेलो

3
आउटपुट विकल्प के रूप में यह एक एन्कोडिंग विकल्प बन जाता है। यह देखने के लिए कि कौन से विकल्प चिह्नित किए गए हैं, FFmpeg प्रलेखन देखें (global)
ललगन

क्या फर्क पड़ता है अगर आप -threadsarg से पहले या बाद में -iarg डालते हैं ? इसके अलावा, मुझे यह कैसे निर्धारित करना चाहिए कि मुझे कितने धागे का उपयोग करना चाहिए? मैं मूल रूप से सिर्फ कर रहा हूँ-c copy
chovy

3

यह थोड़ा पुराना हो सकता है लेकिन यह कंटेनर जैसे डॉकटर के लिए एक सही काम लगता है।

  • Ffmpeg को चलने दें full horsepower(जैसा कि denjello ने इसे कॉल किया है)
  • लेकिन इसे डॉक के अंदर ही चलने दें

अब आप यह सीमित कर सकते हैं कि ffmpeg कमांडलाइन विकल्पों का उपयोग किए बिना भी एक एकल ffmpeg उदाहरण कितने संसाधनों का उपभोग कर सकता है। और न केवल सीपीयू बल्कि मेमोरी और आईओ भी।

इससे भी अधिक: हो सकता है कि आपके पास अलग-अलग कार्य हैं जो पृष्ठभूमि में चल सकते हैं और आपको परवाह नहीं है कि वे कितने समय तक काम करते हैं और आपके पास ऐसे कार्य हैं जिन्हें तेजी से चलाना चाहिए, इसलिए आप अलग-अलग कार्यों पर भार डाल सकते हैं।

Https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resource देखें

पहले से ही github पर एक पूर्वनिर्धारित ffmpeg छवि है: https://github.com/jrottenberg/ffmpeg

docker run jrottenberg/ffmpeg \
        -i http://url/to/media.mp4 \
        -stats \
        $ffmpeg_options  - > out.mp4

एक एकल रूपांतरण संभवतः ओवरहेड के कारण धीमी गति से चलेगा, लेकिन यदि आप समवर्ती उदाहरणों को चलाते हैं तो यह एक बड़ा लाभ हो सकता है। कोई भी यह बहुत अच्छी तरह से स्केल करेगा, बेहतर सुरक्षा का उल्लेख नहीं करने के लिए क्योंकि प्रत्येक कार्य अंतर्निहित ओएस से पृथक है।


क्या यह डॉकटर के अंदर इसे चलाने के लिए थोड़ा बहुत चरम नहीं है? Linux scoutapm.com/blog/…
yurtesen

क्यों? विचार करें कि आपके पास पहले से स्थापित डॉकटर है, --rmएक कार्य करने के लिए ध्वज के साथ एक कंटेनर चलाना और बाहर निकलने के बाद कंटेनर को निकालना एक पूरी तरह से सामान्य बात है, जो 2019 में करना चाहिए और विशेष रूप से दस्तावेज़ रूपांतरण जैसी चीजों के लिए करना चाहिए। रूपांतरण विफल? अपने स्थानीय टूलचेन को अपग्रेड / डाउनग्रेड किए बिना एक और कनवर्टर संस्करण आज़माएं? आप दस्तावेज़ पर भरोसा नहीं करते क्योंकि यह इंटरनेट से डाउनलोड किया गया है? एक कंटेनर में कार्य को अलग करें। Ffmpeg कोई अपवाद नहीं है। cvedetails.com/vulnerability-list/vendor_id-3611/Ffmpeg.html
Jürgen Steinblock

यह विपणन बात की तरह लगता है। डॉकर सही नहीं है जैसे आपने इसे डाला -> Techbeacon.com/security/… लिनक्स में एक सामान्य उपयोगकर्ता को भी सीमित पहुंच और सिस्टम सुरक्षा प्राप्त है। प्रोग्राम संस्करण डाउनग्रेड की आवश्यकता बहुत दुर्लभ है और इसे रिपॉजिटरी के माध्यम से किया जा सकता है। कई डॉकटर छवियां यादृच्छिक लोगों द्वारा बनाई गई हैं। शायद दस्तावेज़ कनवर्टर डॉक छवि को समझौता किया गया था और आपके सभी दस्तावेजों की प्रतिलिपि एक दूरस्थ सर्वर को भेज दी गई थी। इसलिए, डॉकर छवियों का उपयोग करने से इस तरह की भेद्यता की संभावना बढ़ जाती है। फिर क्या?
yurtesen

Perhaps the document converter docker image was compromised and sent copy of all your documents to a remote server. So, using docker images increase possibility such vulnerability. What then?रेपो की जांच करें, डॉकटराइल की जांच करें और docker build -t myimageस्वयं एक स्थानीय छवि बनाने के लिए उपयोग करें। या अपने खुद के dockerfile बनाने के लिए, यह रॉकेट विज्ञान नहीं है github.com/alfg/docker-ffmpeg/blob/master/Dockerfile
जुरगेन Steinblock
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.