ffmpeg mở webcam bằng YUYV nhưng tôi muốn MJPEG


14

Tôi cần ffmpeg để mở webcam (logitech c910) ở chế độ MJPEG, vì webcam có thể cho ~ 24 sử dụng "giao thức" MJPEG và chỉ ~ 10 khung hình / giây khi sử dụng YUYV. Tôi có thể chọn giữa chúng bằng cách sử dụng dòng lệnh ffmpeg không?

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

Dòng lệnh hiện tại của tôi:

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 tạo ra luồng h264 bị hỏng khi tôi ghi từ webcam, nhưng chuỗi h264 bình thường khi tôi ghi từ x11grab. Một codec khác (mjpeg, mpeg4) hoạt động tốt với webcam ... Nhưng đây là một câu chuyện khác.

cập nhật đầu ra giao diện điều khiển đầy đủ của ffmpeg: http://pastebin.com/Hzem6CKF (bạn có thể thấy nó mở thiết bị video ở chế độ YUV, nhưng thiết bị cũng có thể cung cấp MJPEG outpud).

Câu trả lời:


13

Bạn có thể liệt kê thông tin bổ sung về những gì webcam của bạn có thể xuất ra v4l2-ctl --list-formats-ext. Bạn cũng có thể hiển thị thông tin webcam với ffmpeg bằng -list_formatstùy chọn nhập liệu:

$ 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

Webcam này từ ví dụ của tôi có thể hỗ trợ cả định dạng raw ( yuyv422) và nén ( mjpeg) và bạn có thể biết ffmpegbạn muốn với -input_formattùy chọn đầu vào nào.

Ví dụ

Luồng sao chép luồng video MJPEG (không mã hóa lại):

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

Mã hóa lại video webcam thô thành H.264:

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

Tương tự như trên nhưng chọn thủ công tốc độ khung hình và kích thước video ( v4l2-ctl --list-formats-extđối với tốc độ khung hình và kích thước video khả dụng):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • Xem tài liệu thiết bị đầu vào video4linux2 để biết thêm tùy chọn.

  • Nếu tốc độ khung hình là đầu ra thấp hơn mong đợi thì hãy thêm ánh sáng: webcam có thể hạ thấp tốc độ khung hình để có được phơi sáng lâu hơn trong môi trường mờ.


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

4
Chào mừng bạn đến với Siêu người dùng! Bạn có thể mở rộng về điều này? Cụ thể, thông tin nào có mà LordNekbeard không có? :)
bertieb

Không cần -strict -2trừ khi: 1) bạn ffmpegđã lỗi thời khủng khiếp và 2) bạn đang mã hóa âm thanh AAC.
llogan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.