2011-03-24 10 views
6

के साथ वीडियो लिखना जब मैं वीडियो पर फ्रेम लिखने की कोशिश कर रहा हूं तो मुझे एक दावा त्रुटि मिल रही है। त्रुटि मैं हो रही है यह है:ओपनसीवी + पायथन + मैक

import cv 
import sys 

files = sys.argv[1:] 

for f in files: 
    capture = cv.CaptureFromFile(f) 
    height = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH) 
    width = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT) 
    fps = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FPS) 
    fourcc = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FOURCC) 
    print fourcc 
    writer = cv.CreateVideoWriter('ok.mov', int(fourcc),fps,(int(width),int(height)),1) 
    print writer 
    for i in range(30): 
     frame = cv.QueryFrame(capture) 
     print frame 
     if frame: 
      cv.WriteFrame(writer, frame) 

फ्रेम सहेजा जा रहा है के रूप में छवियों को ठीक काम करता है तो मैं जानता हूँ कि कब्जा करने के साथ कुछ भी गलत नहीं है:

Traceback (most recent call last): 
    File "VideoMixer.py", line 23, in <module> 
    cv.WriteFrame(writer, cv.LoadImage(fileName)) 
cv.error: dst.data == dst0.data 

यहाँ मेरी स्क्रिप्ट है। क्या मैं लेखक को गलत बना रहा हूं? 'प्रिंट चार सीसी' 0.0 आउटपुट करता है लेकिन मैंने कई four_CC मानों के साथ प्रयास किया है।

धन्यवाद!

उत्तर

6

क्या आपके कुछ फ्रेम में अलग-अलग रंगस्थान या गहराई हैं? कुछ अवलोकन:

  • आपने अपने कोड में ऊंचाई और चौड़ाई बदल दी है, क्या यह उद्देश्य पर है?
  • आपका fourcc एक पूर्णांक होना चाहिए> 0. नीचे मेरा उदाहरण देखें।

मैंने ओपनसीवी का उपयोग करके व्यक्तिगत रूप से क्विकटाइम वीडियो नहीं बनाया है, लेकिन यह मेरे लिए एक असम्पीडित एवीआई फ़ाइल उत्पन्न करने के लिए काम करता है।

import cv 
import sys 

# standard RGB png file 
path = 'stack.png' 
cap = cv.CaptureFromFile(path) 
fps = 24 
width = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_WIDTH)) 
height = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_HEIGHT)) 
# uncompressed YUV 4:2:0 chroma subsampled 
fourcc = cv.CV_FOURCC('I','4','2','0') 
writer = cv.CreateVideoWriter('out.avi', fourcc, fps, (width, height), 1) 
for i in range(90): 
    cv.GrabFrame(cap) 
    frame = cv.RetrieveFrame(cap) 
    cv.WriteFrame(writer, frame) 

अद्यतन: वीएलसी की screencapture out.avi खेलने:

enter image description here

क्विकटाइम में:

enter image description here

+2

बहुत बहुत धन्यवाद लेकिन क्या आप बाहर खेलने में सक्षम हैं .avi? स्क्रिप्ट मेरे लिए ठीक चलती है और फ़ाइल बनाता है लेकिन जब मैं इसे चलाने का प्रयास करता हूं तो वीएलसी मुझे एक त्रुटि देता है: ps त्रुटि: मुख्य डीबग नहीं देख सकता: कोई डेमक्स मॉड्यूल मिलान "avi" लोड नहीं किया जा सकता मुख्य डीबग: TIMER module_need() : 303.765 एमएस - कुल 303.765 एमएस/1 intvls (औसत 303.765 एमएस) मुख्य त्रुटि: 'फ़ाइल /: ///Users/***/Documents/Code/Video/out.avi ' – rgbrgb

+0

के लिए कोई उपयुक्त डेमक्स मॉड्यूल नहीं फ़ाइल चलाएं, मैं मैक पर नवीनतम वीएलसी का उपयोग कर रहा हूं। मैं एक स्क्रीन कैप के साथ अपना जवाब अपडेट करूंगा। – samplebias

+0

मैं [aviDemux] (http://avidemux.sourceforge.net/) और क्विकटाइम का उपयोग करके out.avi फ़ाइल खोलने और चलाने में भी सक्षम था। – samplebias

0

मैं cv.CV_FOURCC समारोह का उपयोग कर I420 FourCC चुनें 210 लाइन # 2598 पर निकलता है - अगर यह ज़ोर विफल रहता है: "dst.data == dst0.data"

it means that the destination size or type was incorrect

4

मैं 'MJPG' और 'I420' और उनमें से कोई भी शामिल है पर मेरी मैक OpenCV काम विभिन्न codecs की कोशिश की निर्माण। उन्होंने शिकायत किए बिना छोटे अदृश्य आउटपुट फाइलों का उत्पादन किया।

तब मुझे this page मिला जो मेरे लिए काम करने वाले कुछ कोडेक्स सूचीबद्ध करता है। जैसे 'mp4v' मेरे मैक पर ठीक काम करता है और क्विकटाइम इसे चलाने में सक्षम है।

+1

@mtoosi, आपने फ़ाइल फ़ाइल को किस फ़ाइल एक्सटेंशन के रूप में सहेजा था? मैंने 'कोडेक = सीवी.सीवी_एफओआरसीसी ('एम', 'पी', '4', 'वी') की कोशिश की और फ़ाइल को '/ full/path/to/file/out' के रूप में सहेज लिया।mp4v' जिसने एक वैध फ़ाइल बनाई, लेकिन क्विकटाइम या वीएलसी में खुलने वाला कोई भी नहीं। – cooncesean

+0

@cooncesean, मैंने आईआईआरसी के सभी मामलों में फ़ाइल एक्सटेंशन के रूप में'avi 'का उपयोग किया। इसके अलावा, मैं ओएस एक्स 10.8 पर था और ओपनसीवी 2.4.3 स्वयं को सभी डिफ़ॉल्ट झंडे और सिस्टम पर स्थापित कोई तीसरी पार्टी लाइब्रेरी के साथ बनाया गया था। – mtoossi

+0

एफवाईआई मैं ओएससी 10.11 पर ओपनसीवी 2.4.13.2 के साथ हूं, और मैं इस काम को 'cv2.cv.CV_FOURCC (' एम ',' पी ',' 4 ',' वी ') और एक के साथ बनाने में सक्षम था एक्सटेंशन '.avi' के साथ आउटपुट फ़ाइल नाम। '.mp4' के एक एक्सटेंशन ने एक फ्रेम और कोई गति वाला वीडियो बनाया। – trianta2

संबंधित मुद्दे