सवाल एफएफएमपीईजी [डुप्लिकेट] के साथ प्रारंभ स्थिति से अंत स्थिति तक वीडियो फ़ाइल से भाग काट लें


इस प्रश्न का उत्तर यहां दिया गया है:

मेरे पास 30 मिनट की वीडियो फ़ाइल है, लेकिन मैं एक वीडियो निकालना चाहता हूं 00:09:23 से 00:25:33।

मैं स्टार्टपोशन को परिभाषित कर सकता हूं -ss, लेकिन मुझे अंत स्थिति के लिए कोई नहीं मिला। कोई मदद कृपया?


121
2018-01-11 17:59


मूल




जवाब:


Ffmpeg स्थापित करें

सुनिश्चित करें कि आप का एक हालिया संस्करण डाउनलोड करें ffmpeg, और अपने वितरण के साथ आने वाले किसी का उपयोग न करें (उदा। उबंटू)। विभिन्न वितरणों से पैक किए गए संस्करण अक्सर पुराने होते हैं और अपेक्षित व्यवहार नहीं करते हैं।

या इसे स्वयं संकलित करें

री-एन्कोडिंग के बिना वीडियो कैसे कट करें

से वीडियो काटने के लिए इसका इस्तेमाल करें [start] के लिये [duration]:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

यहां, विकल्प निम्न का अर्थ है:

  • -ss प्रारंभ समय निर्दिष्ट करता है, उदा। 00:01:23.000 या 83 (कुछ लम्हों में)
  • -t क्लिप की अवधि निर्दिष्ट करता है (समान प्रारूप)।
  • हाल का ffmpeg साथ अंत समय की आपूर्ति करने के लिए एक ध्वज भी है -to
  • -c copy इनपुट से पहले वीडियो, ऑडियो, और उपशीर्षक बिटस्ट्रीम को आउटपुट फ़ाइल में दोबारा एन्कोड किए बिना कॉपी करता है। यह गुणवत्ता को नुकसान नहीं पहुंचाएगा और कमांड को सेकंड के भीतर चलाएगा।

ध्यान दें कि पुराने ffmpeg संस्करणों के साथ, बिटस्ट्रीम की प्रतिलिपि बनाते समय यह आदेश फ्रेम-सटीक नहीं हो सकता है।

फिर से एन्कोडिंग के बिना वीडियो को कैसे कट करें - सटीक विधि

यदि आपके पास पुराना ffmpeg संस्करण है और आप फ्रेम सटीकता चाहते हैं, तो इसके बजाय इसका उपयोग करें:

ffmpeg -i in.mp4 -ss [start] -t [duration] -c copy out.mp4

हालांकि, एक कमी है। वीडियो को तब तक डीकोड किया जाना चाहिए जब तक कि यह इंगित स्थिति तक पहुंच न जाए -ss, और केवल तभी यह बिटस्ट्रीम की प्रतिलिपि बनाना शुरू कर देता है। इसमें काफी समय लग सकता है, खासकर वास्तव में लंबे वीडियो के लिए।

री-एन्कोडिंग के साथ वीडियो कैसे कट करें

यदि आप बाहर निकलते हैं -c copy विकल्प, ffmpeg आपके द्वारा चुने गए प्रारूप के अनुसार स्वचालित रूप से आउटपुट वीडियो और ऑडियो को फिर से एन्कोड कर देगा। उच्च गुणवत्ता वाले वीडियो और ऑडियो के लिए, पढ़ें x264 एन्कोडिंग गाइड और यह एएसी एन्कोडिंग गाइडक्रमशः।

उदाहरण के लिए:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

जैसा कि समझाया गया है एफएफएमपीईजी के साथ खोज रहे हैं): उपयोग करते समय -ss से पहले -i एफएफएमपीजी 2.1 और नए पर, वीडियो को फिर से एन्कोड करते समय फ्रेम-सटीक मांगना (यानी, उपयोग नहीं कर रहा है -c copy)। तो आपको डालने के बारे में चिंता करने की ज़रूरत नहीं है -ss बाद -i गति के लिए।


अंत बिंदुओं को अवधि में परिवर्तित करना

यदि आपको पुराने संस्करण का उपयोग करने की आवश्यकता है ffmpeg और इसका उपयोग नहीं कर सकते -to विकल्प, आप इन और आउट पॉइंट्स की एक संपादन सूची बना सकते हैं, और इन्हें अवधि के साथ बिंदुओं में परिवर्तित कर सकते हैं। इसके लिए आप उपयोग कर सकते हैं यह रूबी लिपि मैंने लिखा, जो अंतर की गणना करता है:

require "Time"
def time_diff(time1_str, time2_str)
  t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) )
  (t - t.gmt_offset).strftime("%H:%M:%S.%L")
end

उदाहरण के लिए:

time_diff("00:09:23.000", "00:25:33.000")
=> "00:16:10.000" 

216
2018-01-11 21:02



उबंटू 12:10 पर, -सी: वी और -सी: एक काम नहीं किया। मुझे इसके बजाय "-acodec कॉपी और -vcodec प्रतिलिपि" का उपयोग करना पड़ा। - Samuel Lampa
@ सैमुएल फिर आप पुराने संस्करण का उपयोग कर रहे हैं, जो वास्तविक एफएफएमपीईजी भी नहीं है, बल्कि लीब फोर्क है। देख: stackoverflow.com/a/9477756/1109017 - slhck
इसके लिए धन्यवाद! यदि आप एक अवधि निर्दिष्ट नहीं करते हैं, तो क्या यह अंत तक जाएगा? - Jeff
@ जेफ हां! (चरित्र न्यूनतम) - slhck
@Prateek वीडियो बिटस्ट्रीम की प्रतिलिपि बनाते समय (पुनः-एन्कोडिंग के बजाए), आप केवल कटौती कर सकते हैं मुख्य-फ़्रेम। यदि सेकंड 1, 2, और 3 पर कीफ्रेम हैं, लेकिन आप दूसरे 1.5 पर कटौती करना चाहते हैं, तो ffmpeg काटने से पहले दूसरे 2 तक इंतजार करना होगा। इससे यह गलत हो जाता है। - slhck


मुझे लगता है कि अब आप निम्न आदेश का उपयोग कर सकते हैं।

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

एक नज़र भी देखें ffmpeg डॉक्टर, या यह विकी पेज


18
2018-05-07 02:30



ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFile सरल संस्करण - nwgat
मुझे उपयोग करना पड़ा ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4 संस्करण (के साथ -copyts), अन्यथा यह गलत तरीके से काटता है (शुरुआत में ब्लैक स्क्रीन के साथ)। हालांकि दूसरे लिंक के लिए धन्यवाद। - Necronomicron
यह बहुत अच्छा है, आखिरी चीज जो मैं चाहता था वह अंतराल से अवधि की गणना कर रही थी। - Tomasz Gandor
यह विकल्प वास्तव में पूछे जाने वाले प्रश्न का उत्तर देता है। बाकी के जवाब या तो अव्यवस्थित या अप्रचलित हैं। - James Bowery


यह अजीब बात है कि किसी ने भी सुझाव नहीं दिया trim  फिल्टर

इनपुट के दूसरे मिनट को छोड़कर सब कुछ छोड़ दें:

ffmpeg -i INPUT -vf trim=60:120

केवल पहला दूसरा रखें:

ffmpeg -i INPUT -vf trim=duration=1

दूसरे 13 से दूसरे 58 को छोड़कर सब कुछ छोड़ दें:

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8
2018-04-07 15:10



हाँ, उल्लेख करने के लिए अच्छा है trim तथा atrim। फ़िल्टरिंग करते समय मैं आमतौर पर इनका उपयोग करता हूं, लेकिन उपयोगकर्ताओं को यह ध्यान रखना चाहिए फ़िल्टरिंग के लिए पुनः-एन्कोडिंग की आवश्यकता होती है। - LordNeckbeard
आप मेरे हीरो हैं। मुझे एक फिल्टर की ज़रूरत थी जिसने ऐसा किया था। - fahadash


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

Ffmpeg द्वारा वीडियो फ़ाइलों को विभाजित करने के दो तरीके हैं। पहला व्यक्ति अपने आप में अच्छा है, उससे भी अधिक - यह तेज़ है, लेकिन कभी-कभी कुछ त्रुटियों के साथ आउटपुट फाइलें बनाता है। तो उन मामलों के लिए वीडियो फ़ाइलों को विभाजित करने का दूसरा तरीका है: यह काफी धीमा है, आउटपुट फाइलें बड़ी हैं, लेकिन ऐसा लगता है कि वे हमेशा इनपुट गुणवत्ता फ़ाइलों के समान गुणवत्ता स्तर के होते हैं।

रास्ता 1:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

रास्ता 2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start> - एक वीडियो ffmpeg के हिस्से की शुरुआत काटना है। प्रारूप: 00:00:00.0000, मतलब घंटे: मिनट: सेकंड: मिलीसेकंड।

  • <duration> - एक वीडियो ffmpeg के हिस्से की अवधि काटना है। उपरोक्त के समान प्रारूप।

उदाहरण:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg 1 घंटे 1 9 मिनट 0 सेकंड से शुरू होने वाली वीडियो फ़ाइल का एक हिस्सा निकाल देता है। वीडियो अनुक्रम कटौती की अवधि 5 मिनट 0 सेकंड है।


3
2017-10-03 19:08



ठीक है, thnx। दस्तावेज़ों की जांच करेंगे और कल कोशिश करेंगे। - juGGaKNot
-sameq इसका मतलब "समान गुणवत्ता" नहीं है और ffmpeg से हटा दिया गया है। उपयोग -codec copy बजाय। इसके अलावा, के बारे में मत भूलना -to विकल्प। - LordNeckbeard
मैंने आपके उद्धरण में आदेशों को सही किया, क्योंकि वे काफी पुराने थे। कृपया उचित रूप से उद्धृत किए बिना जानकारी कॉपी न करें। - slhck


आप इसका इस्तेमाल कर सकते हैं

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

यहां आपको वीडियो की अवधि देना है। अर्थात। 00: 25: 33-00: 09: 23


-1
2018-01-11 18:29



जैसा कि मैंने दूसरे उत्तर पर बताया है: आपके आदेश के साथ, आप फ़ाइल को फिर से एन्कोड कर रहे हैं, जो बिल्कुल जरूरी नहीं है और परिणामस्वरूप कम गुणवत्ता और प्रसंस्करण समय में वृद्धि हुई है। - slhck


मैं ffmpef के साथ वीडियो काटने के लिए निम्नलिखित वाक्यविन्यास का उपयोग करता हूं:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-सेकंड में अवधि निर्धारित करने के लिए उपयोग किया जाता है - आप अंत समय निर्दिष्ट नहीं कर सकते हैं लेकिन यह आपके लिए काम करना चाहिए।


-2
2018-01-11 18:27



फ़ाइल को फिर से एन्कोड करने के लिए आप FFmpeg क्यों सेट कर रहे हैं? ध्यान दें कि -sameq इसका मतलब "समान गुणवत्ता" नहीं है। - slhck