Ffmpeg का उपयोग करके सटीक फ्रेम में कटौती कैसे करें?


22

मैं सही समय पर वीडियो फ़ाइलों को काटने के लिए ffmpeg का उपयोग करने की कोशिश कर रहा हूं। शुरुआती फ्रेम को निर्दिष्ट करने के लिए ffmpeg मदद एक विकल्प -timecode_frame_start दिखाता है लेकिन मैं इस कमांड को काम करने में असमर्थ हूं। परिणामी वीडियो हमेशा मूल वीडियो की शुरुआत में शुरू होता है। यहाँ मैं चल रहा कमांड का एक उदाहरण है:

ffmpeg -i input.mpg -acodec copy -vcodec copy -timecode_frame_start 200 -vframes 210 -n ouput.mpg

मैंने परिणामों में कोई बदलाव नहीं करने से पहले और अन्य विकल्पों के बाद timecode_फ्रेम_स्टार्ट विकल्प को स्थानांतरित कर दिया है। क्या मुझे निर्दिष्ट करने के लिए एक अतिरिक्त विकल्प है? मैं विभिन्न फ़ाइल स्वरूपों, mkv, AVI, mp4 की कोशिश की है, और यह समस्या कोडेक संबंधित है प्रकट नहीं होता है। यहाँ एक फ़ाइल मैंने कोशिश की है:

http://www.seaotter.com/marine/movies/hermit-long-01.mpg

क्या मैं कुछ भूल रहा हूँ?


प्रतीत होता है कि यह मेलिंग सूची (और NB कि -vcodec कॉपी के साथ आप "वास्तव में" फ्रेम विशिष्ट कटिंग प्राप्त नहीं कर सकते हैं, क्योंकि यह केवल i- फ्रेम पर resynchronize कर सकता है
rogerdpack

@ user39364 मैंने मेलिंग सूची पर पूछा और यह पता चला कि यह विकल्प वह नहीं है जो ओपी चाहता है। मैंने कुछ नया भी सीखा है :)
slhck

बस यह नोट करना चाहता था कि मुझे सटीक फ़्रेम का उपयोग करने के लिए काटने की एक विधि मिली melt, कमांड लाइन से सटीक रूप से काटे गए वीडियो फ़ाइलों को
sdaau

जवाबों:


46

मैंने सिर्फ यह सीखा है कि timecode_frame_startइस तरह से काम नहीं किया जाता है। विशिष्ट फ़्रेमों पर प्रारंभ करने का एकमात्र तरीका कई फ़्रेमों को ss.msसिंटैक्स में बदलना है , या hh:mm:ss.ms। इसलिए, यदि आपका वीडियो 25 एफपीएस पर है, और आप 133 फ्रेम पर शुरू करना चाहते हैं, तो आपको आवश्यकता होगी

133/25 = 5.32

तो, भागो

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac out.mp4

ध्यान दें कि बिटस्ट्रीम कॉपी ( -c:v copy) के साथ सटीक फ्रेम पर काटना संभव नहीं है क्योंकि सभी फ़्रेम इंट्रा-कोडेड नहीं हैं और अपने दम पर खड़े हो सकते हैं।

-ss हमेशा फ्रेम-सटीक होगा।

यदि आप -frames:vउदाहरण के लिए किसी विशिष्ट फ़्रेम को एनकोड करना चाहते हैं, तो उपयोग करें :

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac -frames:v 60 out.mp4

आपके पास वीडियो फ़िल्टर का उपयोग करने का विकल्प भी है , लेकिन ऑडियो समर्थन सटीक नहीं हो सकता है। और जाहिर है, तख्ते पर तलाश अभी भी एक विशेषता नहीं है। अधिक जानकारी के लिए आप इस FFmpeg-users मेलिंग लिस्ट थ्रेड का अनुसरण कर सकते हैं :

आप -vf selectसटीक फ्रेम चयन के लिए उपयोग कर सकते हैं ( -vf 'select=gte(n\,100)'100 पहले फ्रेम को छोड़ना पसंद करते हैं)


3
ड्रॉप फ्रेम वाले वीडियो के लिए (जैसे 29.97fps) 10 मिनट से अधिक; आप किसी विशेष फ्रेम के लिए समय की सही गणना कैसे करेंगे?
GFoley83

select=gte(n\,100)विधि काम करता है लेकिन मांग प्रदर्शन खा रहा है। यदि आप एक बार में सिर्फ 30 फ्रेम एन्कोडिंग करके परीक्षण करते हैं, तो मैं जो वीडियो शुरू करता हूं उसमें आगे, मांगने के कारण लंबे समय तक एफएफएमपी पूरा होता है।
एडम ग्रांट

6

विकल्प

-vf चुनें = "(n \ _ , start_frame_num \, end_frame_num ) के बीच, सेट = PTS-STARTPTS"
जैसे,

-vf select=“between(n\,200\,300),setpts=PTS-STARTPTS"

वीडियो को काटता है (इसमें) 200 वाँ (शामिल) 300 वाँ फ्रेम शामिल है, क्रम की गिनती 0 से शुरू होती है।

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