ffmpeg YUYV का उपयोग करके खुला वेब कैमरा है लेकिन मुझे MJPEG चाहिए


14

मुझे MJPEG मोड में वेब कैमरा (logitech c910) खोलने के लिए ffmpeg की आवश्यकता है, क्योंकि वेबकैम MJPEG "प्रोटोकॉल" का उपयोग करके ~ 24 दे सकता है और YUYV का उपयोग करके केवल ~ 10 एफपीएस। मैं ffmpeg कमांड लाइन का उपयोग करके उनके बीच चयन कर सकता हूं?

xx@(none) ~ $ v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
    Index       : 0
    Type        : Video Capture
    Pixel Format: 'YUYV'
    Name        : YUV 4:2:2 (YUYV)

    Index       : 1
    Type        : Video Capture
    Pixel Format: 'MJPG' (compressed)
    Name        : MJPEG

मेरी वर्तमान कमांड लाइन:

ffmpeg -y -f alsa -i hw:3,0 -f video4linux2 -r 20 -s 1280x720 -i /dev/video0 -acodec libfaac -ab 128k -vcodec libx264 /tmp/web.avi

जब मैं वेबकैम से रिकॉर्ड करता हूं, तो ffmpeg भ्रष्ट h264 स्ट्रीम उत्पन्न करता है, लेकिन जब मैं x11grab से रिकॉर्ड करता हूं, तो सामान्य h264 strem। एक और कोडेक्स (mjpeg, mpeg4) वेबकेम के साथ अच्छा काम करता है ... लेकिन यह एक और कहानी है।

अद्यतन पूर्ण ffmpeg के कंसोल आउटपुट: http://pastebin.com/Hzem6CKF (आप देख सकते हैं कि यह YUV मोड में वीडियो डिवाइस खोलता है, लेकिन डिवाइस MJPEG आउटपुड भी प्रदान कर सकता है)।

जवाबों:


13

आप अपने वेबकैम से क्या कर सकते हैं, इसके बारे में अतिरिक्त जानकारी सूचीबद्ध कर सकते हैं v4l2-ctl --list-formats-ext। आप -list_formatsइनपुट विकल्प का उपयोग करके ffmpeg के साथ वेबकैम की जानकारी भी दिखा सकते हैं :

$ ffmpeg -f video4linux2 -list_formats all -i /dev/video0
[...]
[video4linux2,v4l2 @ 0x1fb7660] Raw       :   yuyv422 :     YUV 4:2:2 (YUYV) : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360
[video4linux2,v4l2 @ 0x1fb7660] Compressed:     mjpeg :                MJPEG : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360

मेरे उदाहरण से यह वेबकैम कच्चा ( yuyv422) और संपीड़ित ( mjpeg) दोनों स्वरूपों का समर्थन कर सकता है, और आप बता सकते हैं ffmpegकि आप -input_formatइनपुट विकल्प के साथ कौन सा चाहते हैं ।

उदाहरण

स्ट्रीम स्ट्रीम MJPEG वीडियो स्ट्रीम (कोई पुनः एन्कोडिंग):

ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy output.mkv

कच्चे वेब कैमरा वीडियो को H.264 में पुनः एन्कोड करें:

ffmpeg -f v4l2 -input_format yuyv422 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4

ऊपर के समान लेकिन मैन्युअल रूप से फ्रेम दर और वीडियो आकार ( v4l2-ctl --list-formats-extउपलब्ध फ्रेम दर और वीडियो आकार के लिए) चुनें:

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • अधिक विकल्पों के लिए video4linux2 इनपुट डिवाइस प्रलेखन देखें ।

  • यदि फ्रेम दर का आउटपुट अपेक्षित से कम है, तो अधिक प्रकाश जोड़ें: वेबकैम मंद वातावरण में लंबे समय तक एक्सपोज़र प्राप्त करने के लिए फ्रेम दर को कम कर सकता है।


0
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4

4
सुपर उपयोगकर्ता में आपका स्वागत है! क्या आपके द्वारा इसे विस्तार दिया जा सकता है? विशेष रूप से, यह क्या जानकारी है कि लॉर्डनेकबर्ड नहीं है? :)
बर्टिएब

-strict -2जब तक कोई ज़रूरत नहीं है: 1) आपका ffmpegबहुत पुराना है, और 2) आप एएसी ऑडियो एन्कोडिंग कर रहे हैं।
ल्लगन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.