मैं लिनक्स पर चित्र कैप्चर कर रहा हूं (Pi 3B +, स्ट्रेच लाइट)। कैमरा रिपोर्ट करता है कि यह 30 एफपीएस या 60 एफपीएस पर चित्र देने में सक्षम है। यहाँ से आउटपुट हैv4l2-ctl
v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'YU12'
Name : Planar YUV 4:2:0
Size: Discrete 640x512
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'Y16 '
Name : 16-bit Greyscale
Size: Discrete 640x512
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Index : 2
Type : Video Capture
Pixel Format: 'NV12'
Name : Y/CbCr 4:2:0
Size: Discrete 640x512
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Index : 3
Type : Video Capture
Pixel Format: ''
Name : 3132564e-0000-0010-8000-00aa003
Size: Discrete 640x512
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
लेकिन अगर मैं 30fps तक बदलने की कोशिश करूँ तो:
v4l2-ctl -d /dev/video0 --set-parm=30 --set-fmt-video=width=640,height=512,pixelformat="Y16 " --stream-mmap --stream-count=240 --stream-to=video.raw
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.40 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.70 fps
फ़्रेमरेट को केवल अनदेखा किया जाता है।
मैं इसका उपयोग करके सत्यापित कर सकता हूं usbmon
(भयानक टूल):
60 पर कब्जा:
Bus ID 1 (USB bus number 1) To device From device
Device ID 1 : 0.00 kb/s 0.00 kb/s
Device ID 2 : 0.00 kb/s 0.00 kb/s
Device ID 3 : 0.00 kb/s 0.00 kb/s
Device ID 4 : 0.00 kb/s 0.00 kb/s
Device ID 6 : 155.67 kb/s 39075.21 kb/s
"30" पर कब्जा:
Bus ID 1 (USB bus number 1) To device From device
Device ID 1 : 0.00 kb/s 0.00 kb/s
Device ID 2 : 0.00 kb/s 0.00 kb/s
Device ID 3 : 0.00 kb/s 0.00 kb/s
Device ID 4 : 0.00 kb/s 0.00 kb/s
Device ID 6 : 148.34 kb/s 39056.18 kb/s
यह प्रति सेकंड 640x512x2x60 = 39.3 एमबी के अनुरूप है।
समस्या यह है कि यदि कैमरा 60fps का उपयोग करने के लिए खुद को मजबूर कर रहा है, तो यह जरूरत से ज्यादा बस बैंडविड्थ आवंटित कर रहा है (और अन्य कैमरे नहीं चलेंगे क्योंकि वे दावा करते हैं कि पर्याप्त बैंडविड्थ स्पेयर नहीं है)। इसलिए जब मैं स्ट्रीम को गला सकता हूँ, तो हार्डवेयर स्तर पर यह मदद नहीं करता है।
Gstreamer या तो काम नहीं करता है, लेकिन मुझे लगता है क्योंकि यह कैप्चर करने के लिए V4L2 का उपयोग कर रहा है। उदाहरण के लिए:
timeout 15s gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,format=GRAY16_LE,framerate=30/1 ! videoconvert ! filesink location=video_30.raw
क्या कोई अन्य वीडियो बैकएंड है जिसे मैं आज़मा सकता हूं? या फ्रैमरेट सेट करने का एक बेहतर तरीका है?
VIDIOC_S_PARM
सफल था।