दृश्य पहचान के माध्यम से FFMPEG का उपयोग करके एक वीडियो को विभाजित करें


17

मैंने इस धागे को देखा, जो लगभग वही करता है जो मैं चाहता हूं, लेकिन मैं वास्तव में दृश्य पहचान पर विभाजन की तलाश कर रहा हूं।

स्वचालित रूप से बड़ी .mov वीडियो फ़ाइलों को काले फ्रेम (दृश्य परिवर्तन) में छोटी फ़ाइलों में विभाजित करें?

उदाहरण के लिए, मान लें कि मेरे पास 0:01 -> 0:05 से स्क्रीन पर एक महिला है, फिर 0:06 -> 0:09, और स्क्रीन पर 0:10 से एक दूसरी महिला के एक अलग दृश्य में एक आदमी है - > 0:14

यह (आदर्श रूप से) तीन अलग-अलग वीडियो क्लिप बनाएगा। मैं वास्तव में इसे फ्रेम स्तर तक नीचे ले जाऊंगा, यदि संभव हो तो दृश्यों को बदलने के लिए ऑटोडेटेक्शन के साथ।

** अद्यतन **

ठीक है, मैं एक शानदार शुरुआत के लिए तैयार हूं। मैंने FFProbe का उपयोग करके निम्नलिखित किया है:

ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt

जो मुझे टाइमस्टैम्प की एक सूची देता है जो बिल्कुल सही प्रतीत होता है! अब अगला कदम - मैं टाइमस्टैम्प की इस सूची को कैसे ले सकता हूं और इसे विभाजित करने के लिए उन्हें ffmpeg में वापस इनपुट करता हूं? यहाँ टाइमस्टैम्प का एक उदाहरण है।

media_type=video|key_frame=1|pkt_pts=972221|pkt_pts_time=10.802456|pkt_dts=972221|pkt_dts_time=10.802456|best_effort_timestamp=972221|best_effort_timestamp_time=10.802456|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=5083698|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.503364
media_type=video|key_frame=1|pkt_pts=2379878|pkt_pts_time=26.443089|pkt_dts=2379878|pkt_dts_time=26.443089|best_effort_timestamp=2379878|best_effort_timestamp_time=26.443089|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=12736403|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=1.000000
media_type=video|key_frame=1|pkt_pts=2563811|pkt_pts_time=28.486789|pkt_dts=2563811|pkt_dts_time=28.486789|best_effort_timestamp=2563811|best_effort_timestamp_time=28.486789|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=13162601|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.745838
media_type=video|key_frame=1|pkt_pts=2627625|pkt_pts_time=29.195833|pkt_dts=2627625|pkt_dts_time=29.195833|best_effort_timestamp=2627625|best_effort_timestamp_time=29.195833|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=13485087|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.678877

मौजूदा प्रश्न में एक नए प्रश्न को संपादित न करें, एक नया प्रश्न पूछें, और इस बात का संदर्भ लें कि आपको समय का टिकट कैसे मिला।
djsmiley2k अंधेरे में

जवाबों:


4

आप ffmpegफ़्रेम की जानकारी और मुद्रण की जानकारी के बिना मक्खी पर दृश्यों का पता लगाने और निकालने के लिए सीधे उपयोग कर सकते हैं :

ffmpeg -i foo.mp4 -vf select='gt(scene\,0.4)' -vsync vfr frame%d.png

यह -vsync vfrआवश्यक है क्योंकि छवियाँ निष्कर्षण डिफ़ॉल्ट रूप से चर फ्रैमरेट के साथ काम नहीं करता है, # 1644 देखें ।


यह विधि चेतावनी के साथ मेरे लिए ffmpeg को क्रैश करती है More than 1000 frames duplicated
ashleedawg

1
आपने वास्तव में छोटे वीडियो कैसे बनाए? ऊपर दिए गए आदेश में png चित्र और छोटे mp4 वीडियो नहीं हैं।
जुआन पाब्लो फर्नांडीज

3

अपने टाइमस्टैम्प प्राप्त करने के लिए अपने पाठ को संसाधित करें और उन्हें एक .txt फ़ाइल में प्रिंट करें, ffmpeg सेगमेंट में .txt का उपयोग करें।

सटीकता सही नहीं होगी और जब तक आप आने वाली सामग्री पर कुल नियंत्रण नहीं रखते हैं, तब तक आपके द्वारा चलाए जाने वाले मुद्दों का भार हो सकता है।

यह ध्यान देने योग्य है कि इस प्रकार का काम अनुसंधान का एक वर्तमान विषय है, इसलिए यह अपूर्ण परिणाम उत्पन्न कर सकता है।

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