ffmpeg เปิดเว็บแคมโดยใช้ YUYV แต่ฉันต้องการ MJPEG


14

ฉันต้องการ ffmpeg เพื่อเปิด webcam (logitech c910) ในโหมด MJPEG เพราะเว็บแคมสามารถให้ ~ 24 โดยใช้ MJPEG "โปรโตคอล" และเพียง 10 fps ใช้ YUYV ฉันสามารถเลือกระหว่างพวกเขาโดยใช้บรรทัดคำสั่ง 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 ที่เสียหายเมื่อฉันบันทึกจากเว็บแคม แต่ปกติ h264 strem เมื่อฉันบันทึกจาก x11grab ตัวแปลงสัญญาณอื่น (mjpeg, mpeg4) ทำงานได้ดีกับเว็บแคม ... แต่นี่เป็นอีกเรื่องหนึ่ง

อัปเดตเอาต์พุตคอนโซลของ ffmpeg แบบเต็ม: http://pastebin.com/Hzem6CKF (คุณสามารถเห็นอุปกรณ์วิดีโอเปิดในโหมด YUV แต่อุปกรณ์ดังกล่าวสามารถให้บริการ MJPEG ได้เช่นกัน)

คำตอบ:


13

คุณสามารถแสดงข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เว็บแคมของคุณสามารถแสดงผลv4l2-ctl --list-formats-extได้ คุณยังสามารถแสดงข้อมูลเว็บแคมด้วย ffmpeg โดยใช้-list_formatsตัวเลือกการป้อนข้อมูล:

$ 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

เว็บแคมจากตัวอย่างของฉันสามารถรองรับทั้งรูปแบบraw ( 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
  • ดูเอกสารประกอบอุปกรณ์อินพุตวิดีโอ 4linux2สำหรับตัวเลือกเพิ่มเติม

  • หากอัตราเฟรมที่ส่งออกต่ำกว่าที่คาดไว้ให้เพิ่มแสงมากขึ้น: เว็บแคมอาจลดอัตราเฟรมเพื่อให้ได้รับแสงที่ยาวนานขึ้นในสภาพแวดล้อมที่สลัว


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

4
ยินดีต้อนรับสู่ Super User! คุณขยายได้ไหม โดยเฉพาะอย่างยิ่งมันมีข้อมูลอะไรบ้างที่ LordNekbeard ไม่มี? :)
bertieb

ไม่จำเป็น-strict -2เว้นแต่: 1) คุณffmpegล้าสมัยไปแล้วและ 2) คุณกำลังเข้ารหัสเสียง AAC
llogan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.