आप सही हैं, ओपनसीवी का डिफ़ॉल्ट पिक्सेल प्रारूप बीजीआर है।
ffmpeg पक्ष पर समकक्ष प्रारूप बीजीआर 24 होगा, इसलिए यदि आप नहीं चाहते हैं तो आपको इसे YUV420p में परिवर्तित करने की आवश्यकता नहीं है।
This post दिखाता है कि कैसे stdout को वेब कैमरा से तख्ते पर कब्जा और फ्रेम लिखने के लिए एक अजगर आवेदन का उपयोग करने के लिए। इसका उद्देश्य सीएमडी-लाइन पर इस ऐप को आमंत्रित करना है और परिणाम को सीधे ffmpeg एप्लिकेशन पर पाइप करना है, जो डिस्क पर फ्रेम स्टोर करता है। वास्तव में काफी चालाक!
capture.py:
import cv, sys
cap = cv.CaptureFromCAM(0)
if not cap:
sys.stdout.write("failed CaptureFromCAM")
while True :
if not cv.GrabFrame(cap) :
break
frame = cv.RetrieveFrame(cap)
sys.stdout.write(frame.tostring())
और कमांड खोल पर निष्पादित किया जाना है:
python capture.py | ffmpeg -f rawvideo -pix_fmt bgr24 -s 640x480 -r 30 -i - -an -f avi -r 30 foo.avi
कहाँ:
- -r देता है वो फ्रेम कैमरा
- -एक कहते हैं से आ रही दर "ऑडियो सांकेतिक शब्दों में बदलना नहीं है"
मैं OpenCV 2.4.2 के साथ अपने मैक ओएस एक्स पर इस समाधान का परीक्षण किया।
संपादित करें:
मामले में आप कैमरे से रिकॉर्ड करने के लिए प्रयास नहीं किया है और OpenCV का उपयोग डिस्क पर एक mp4 फ़ाइल करने के लिए वीडियो लिखने के लिए, यहाँ हम चले:
import cv, sys
cap = cv.CaptureFromCAM(0) # 0 is for /dev/video0
if not cap:
sys.stdout.write("!!! Failed CaptureFromCAM")
sys.exit(1)
frame = cv.RetrieveFrame(cap)
if not frame:
sys.stdout.write("!!! Failed to retrieve first frame")
sys.exit(1)
# Unfortunately, the following instruction returns 0
#fps = cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FPS)
fps = 25.0 # so we need to hardcode the FPS
print "Recording at: ", fps, " fps"
frame_size = cv.GetSize(frame)
print "Video size: ", frame_size
writer = cv.CreateVideoWriter("out.mp4", cv.CV_FOURCC('F', 'M', 'P', '4'), fps, frame_size, True)
if not writer:
sys.stdout.write("!!! Error in creating video writer")
sys.exit(1)
while True :
if not cv.GrabFrame(cap) :
break
frame = cv.RetrieveFrame(cap)
cv.WriteFrame(writer, frame)
cv.ReleaseVideoWriter(writer)
cv.ReleaseCapture(cap)
मैंने मैक ओएस एक्स और ओपनसीवी 2.4.2 पर पायथन 2.7 के साथ इसका परीक्षण किया है।
आपके उत्तर के लिए धन्यवाद। मेरे पास अभी तक समाधान की जांच करने का समय नहीं था लेकिन यह दिलचस्प लग रहा है। मैंने पहले ही bgr24 pix_fmt का उपयोग करने का प्रयास किया है लेकिन यह libx264 कोडेक के साथ काम नहीं करता है। मुझे यकीन नहीं है कि मुझे वास्तव में libx264 का उपयोग करने की आवश्यकता है। मुझे एक क्रॉस-प्लेटफ़ॉर्म समाधान (विंडोज़, मैक, लिनक्स) की आवश्यकता है और इसके परिणामस्वरूप libx264 की आवश्यकता हो सकती है। मुझे जांच करने की ज़रूरत है। – luc
विंडोज libx264 पर डिफ़ॉल्ट कोडेक है और छवि को गलत रंग होने का कारण बनता है क्योंकि यह bgr24 pix_fmt – luc
के साथ संगत नहीं है पूछने के लिए खेद है, लेकिन आप वीडियो फ़ाइल बनाने के लिए ओपनसीवी का उपयोग क्यों नहीं करते? – karlphillip