FFmpeg एन्कोडिंग को रोकने और फिर से शुरू करने का कोई तरीका है?


14

मैं हर दिन कुछ घंटों के वीडियो फुटेज रिकॉर्ड करता हूं, जिसे मैं एन्कोडिंग के लिए कतार में रखता हूं ffmpeg। मैं veryslowपूर्व निर्धारित का उपयोग करता हूं x265, इसलिए एक घंटे के वीडियो को एन्कोड करने में 20 घंटे या उससे अधिक समय लग सकता है।

चूंकि मेरा कंप्यूटर दिन-रात काम कर रहा है, इसलिए मैं सोच रहा हूं कि क्या एन्कोडिंग ffmpegको रोकने और फिर से शुरू करने का कोई तरीका है ? मैं Terminalओएस एक्स के लिए उपयोग कर रहा हूं।

यदि हां, तो क्या मैं टर्मिनल को बंद करने और कंप्यूटर को रिबूट करने के बाद भी एन्कोडिंग जारी रख सकता हूं? मुझे लगता है कि जब आप ओएस एक्स में फिर से लॉग इन करते हैं तो टर्मिनल सत्र बहाल हो जाता है, कम से कम टर्मिनल इतिहास है।

जवाबों:


14

निलंबित करें

एक सरल विधि इसे ctrl+ के साथ निलंबित करना है z। या फिर आप PID को सस्पेंड pgrep ffmpegकरने के kill -s SIGSTOP <PID>लिए उपयोग कर सकते हैं।

फिर fgकमांड या के साथ फिर से शुरू करें kill -s SIGCONT <PID>

दुर्भाग्य से यह एक रिबूट नहीं बचेगा।

वीएम

यदि आप वर्चुअल मशीन का उपयोग करते हैं, तो वर्चुअलबॉक्स जैसी किसी चीज के साथ, आप एक अतिथि वीएम में अपने एन्कोडिंग का प्रदर्शन कर सकते हैं। यह आपको किसी भी समय "मशीन राज्य को बचाने" की अनुमति देगा जो एक रिबूट से बच सकता है। यह आपको अतिथि के लिए अधिकतम सीपीयू संसाधन आवंटित करने की अनुमति दे सकता है ताकि आपके मेजबान के पास हमेशा उपलब्ध संसाधन हों।

संभवतः ओवरकिल, लेकिन अगर आप VMs से परिचित हैं या पहले से ही इसका उपयोग कर रहे हैं तो यह एक संभव समाधान है।


मुझे लगता है कि वीएम समाधान से प्यार है, जब तक कि आप पहले से ही एक का उपयोग कर रहे हैं यह एक बहुत बड़ी परेशानी है।
user24601

वर्चुअलबॉक्स रास्ता मेरे लिए काम नहीं किया। मध्य-एन्कोडिंग में राज्य को बचाने की कोशिश की, और [Ctrl] + [z] द्वारा निलंबित करने और फिर राज्य को बचाने की कोशिश की। राज्य को बहाल करने और फिर से शुरू करने की कोशिश कर के बाद, ffmpegएक त्रुटि (साथ बंद हो जाता है decode_band_types: Input buffer exhausted before END element foundया Invalid NAL unit sizeऔर Error writing trailer/ Protocol error)। शायद यह समय में कूद से संबंधित है, मुझे नहीं पता।
जानिस एल्मरिस

@ JANisElmeris मैं उस मुद्दे की नकल नहीं कर सकता। मैंने इसे Ubuntu 18.04 VM पर आज़माया और इसने काम किया।
१०:०१ पर ल्लगन

ठीक है, मैं शायद बहुत भाग्यशाली नहीं हूं। :) एक नए लिनक्स मिंट 19.1 (उबंटू 18.04 पर आधारित) वर्चुअलबॉक्स वीएम के साथ प्रयास किया।
जैनीस एल्मरिस

मेरे ffmpeg में कई थ्रेड हैं और कई पीआईडी ​​हैं। क्या मुझे उनमें से प्रत्येक को SIGSTOP और SIGCONT करना होगा? क्या कोई समय की कमी है?
वूपी

12

विंडोज पर, "पॉज़ / ब्रेक" कुंजी (सबसे ऊपर-दाईं ओर की) दबाकर इसे रोक देंगे। दर्ज करें फिर से शुरू होगा।

यदि यह काम नहीं करता है, तो फोकस देने के लिए कमांड प्रॉम्प्ट विंडो पर क्लिक करें।


यह विंडोज के लिए सबसे आसान और सबसे अच्छा जवाब है (विंडोज 10 पर सत्यापित)।
lidsinker

1
यह सीपीयू को पूरी तरह से मुक्त कर देता है लेकिन राम अभी भी अड़चन में है। मेरे मामले में मेरे पास 8 जीबी रैम है और यह लगभग सभी का उपयोग कर रहा है जबकि ऑपरेशन को रोक दिया गया है। उसके लिए कोई फिक्स? क्या मैं इसे hdd या कुछ और में स्थानांतरित कर सकता हूं? जब मैं अनप्लस हो जाता हूं, तो मैं चीजों के लिए थोड़ा सा भी बुरा नहीं मानता।
पतंग

10

यह 30 सितंबर 2015 तक संभव नहीं था । मैं स्रोत फ़ाइल को खंडित करने, खंडों को एन्कोडिंग और फिर परिणामी फ़ाइलों को सिलाई करने का सुझाव दूंगा।

यह एक सही ठहराव / फिर से शुरू करने की सुविधा नहीं है, लेकिन टुकड़ों का विभाजन आपको एन्कोडिंग से एक विराम की अनुमति देगा।

जारी करने के लिए आदेशों का एक मोटा अवलोकन:

फुलफिल को भागों में तोड़ें

ffmpeg -i recording.mp4 -c copy -flags +global_header -segment_time n -f segment file%03d.mp4

यह file000.mp4, file001.mp4 और इतने पर बनाना चाहिए। क्योंकि सेगमेंट कैसे काम करता है - यह केवल I- फ्रेम पर कट करता है - ये फाइलें बिल्कुल nसेकंड लंबी नहीं होंगी और वीडियो भाग ठीक से नहीं चल सकता है, लेकिन डेटा के सभी और आप प्रत्येक भाग को परिवर्तित कर सकते हैं जैसे

ffmpeg -i file001.mp4 -{filter/encoding parameters} -fflags +genpts file001-new.mp4

एन्कोडेड भागों को फिर से जोड़ दें

एक टेक्स्ट फ़ाइल बनाएं और इस तरह से प्रत्येक प्रदान की गई फ़ाइल के नाम पर रखें

file 'file000-new.mp4'
file 'file001-new.mp4'
.... 
file 'filelast-new.mp4'

और भाग खड़ा हुआ

ffmpeg -f concat -i textfile -c copy -fflags +genpts recording-encoded.mp4

केवल 6GB मेमोरी, और 12h का अनुमानित समय x264 से x265 तक एन्कंड करने और नो-ब्रेक (डेस्कटॉप) होने के बाद, मैं VM ट्रिक का उपयोग नहीं कर सकता, लेकिन यह बहुत अच्छा लगता है! मैं बस उम्मीद करता हूं कि रिजनिंग स्टेप तेज है, लेकिन जैसा कि इस पर कोई एन्कोडिंग नहीं होगी, मुझे लगता है कि यह होगा। यह कोशिश करना है, thx vm!
कुंभ राशि

यह शामिल होने पर एक चेतावनी बनाता है: "स्ट्रीम के लिए कोडेक 0 वैश्विक हेडर का उपयोग नहीं करता है लेकिन कंटेनर प्रारूप में वैश्विक हेडर की आवश्यकता होती है" लेकिन अंतिम परिणाम एक प्रयोग करने योग्य वीडियो है, मुझे कोई समस्या नहीं दिखाई दी
कुंभ राशि का पावर

4

मैं रुकने के बजाय सुसाइड करता हूं, आप एन्कोडिंग प्रक्रिया को बहुत कम सिस्टम प्रायोरिटी (उर्फ " रेनाइस ") देते हैं, इसलिए आप रोजाना आराम से काम कर सकते हैं और एन्कोडिंग अनुपयोगी सिस्टम रीसोर्स के साथ बैकग्राउंड में होगी। तो आपका एन्कोडिंग 24/7 बिना किसी रुकावट के, दिन के काम के साथ संघर्ष किए बिना सहज होगा

AFAIK OSX में pidof कमांड का अभाव है, आपको ffmpeg प्रक्रिया संख्या (PID) जानने की आवश्यकता है

तो आप के साथ पृष्ठभूमि निष्क्रिय करने के लिए प्रक्रिया का नाम बदल सकते हैं

sudo renice 20 yourPID

यदि आवश्यक हो तो आप प्रक्रिया को और अधिक अग्रगामी अग्रभूमि प्राथमिकता में बदल सकते हैं

sudo renice -10 yourPID

नमस्ते! अच्छा सुझाव। इसके लिए प्रयास करना होगा।
विंटरफ्लैग्स

4

थ्रेड को निलंबित करना विंडोज पर भी ctrl+ के साथ नहीं Zबल्कि संसाधन प्रबंधक में भी काम करता है , आप इसे फिर से शुरू कर सकते हैं।


1

(यह लिनक्स के लिए)

जैसा कि आप सभी जानते हैं, 'q' को दबाने से रिकॉर्डिंग फाइल समाप्त हो जाती है।

ffplay में 'p'-संभावना है। Ffmpeg के पास एक ही चीज क्यों नहीं है? हो सकता है क्योंकि यह वीडियो और ऑडियो के बीच desync करने के लिए नेतृत्व कर सकते हैं? ...

मैं सिर्फ ffmpeg-encode x264-aac-mkv के साथ crf (23) और हमेशा एक ही वीडियो की स्थिति के साथ, 'छोड़' (q) रिकॉर्डिंग करता हूं और एक विशिष्ट डायर में सभी सेगमेंट में शामिल होता हूं, जहां यह स्क्रिप्ट 1 फाइल को छुपाती है इस बैश-स्क्रिप्ट के साथ स्ट्रीमकॉपी मोड में:

#!/bin/bash

# FFMPEG MERGE

# File path must be absolutely absolute...

ffmpeg -f concat -safe 0 -i <(printf "file '%s'\n" /home/me/Videos/FFmpeg/FFmpeg_Merge/*.mkv) -c copy merged.mkv

exit 

उसके बाद मैं परिणामी मर्ज किए गए वीडियो की जांच करता हूं और इसे दूसरे डायर पर चिपका देता हूं। सेगमेंट को मर्ज डायर से हटा दिया जाता है।

लेकिन, एक परेशानी 'ठहराव और फिर से शुरू' बटन वास्तव में स्वागत है;)


0

यह सिर्फ एक विचार है, लेकिन यदि आपके पास कुछ बजट है, तो प्रोसेसर (8 वें जीन इंटेल पर) या तो बेहतर तरीके से अपग्रेड करना बेहतर होगा, वीडियो कार्ड (NVIDIA GTX 1050 या इसके बाद के संस्करण) ताकि आप एन्कोड कर सकें सीपीयू-गहन के बजाय हार्डवेयर त्वरण के साथ h.265 / HEVC x265। आपका वीडियो एन्कोडिंग 20 घंटे से भी कम समय में समाप्त हो जाएगा, जिससे आपको बिजली की लागत भी बचानी होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.