ffmpeg web kamerasını YUYV kullanarak aç, ancak MJPEG istiyorum


15

Web kamerasını (logitech c910) MJPEG modunda açmak için ffmpeg'e ihtiyacım var, çünkü web kamerası MJPEG "protokolünü" kullanarak ~ 24, YUYV kullanarak sadece ~ 10 fps verebilir. Ffmpeg komut satırını kullanarak aralarında seçim yapabilir miyim?

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

Mevcut komut satırım:

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

Web kameradan kayıt yaptığımda ffmpeg bozuk h264 akışı oluşturuyor, ancak x11grab'dan kayıt yaptığımda normal h264 strem. Başka bir codec (mjpeg, mpeg4) webcam ile iyi çalışıyor ... Ama bu başka bir hikaye.

güncelleme Tam ffmpeg konsol çıkışı: http://pastebin.com/Hzem6CKF (video aygıtını YUV modunda açtıklarını görebilirsiniz, ancak aygıt ayrıca MJPEG çıkışını da sağlayabilir).

Yanıtlar:


14

Web kameranızın neyle çıkabileceği hakkında ek bilgiler listeleyebilirsiniz v4l2-ctl --list-formats-ext. -list_formatsGiriş seçeneğini kullanarak web kamerası bilgilerini ffmpeg ile de gösterebilirsiniz :

$ 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

Örneğimin web kamerası hem raw ( yuyv422) hem de sıkıştırılmış ( mjpeg) formatları destekleyebilir ve ffmpeghangisine -input_formatgiriş seçeneği ile istediğinizi söyleyebilirsiniz .

Örnekler

Akış MJPEG video akışını kopyalar (yeniden kodlama yapılmaz):

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

Ham web kamerası videosunu H.264 olarak yeniden kodlayın:

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

Yukarıdakiyle aynı ancak kare hızını ve video boyutunu manuel olarak seçin ( v4l2-ctl --list-formats-extmevcut kare hızı ve video boyutları için):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • Daha fazla seçenek için video4linux2 giriş aygıtı belgelerine bakın.

  • Eğer kare hızı çıktısı beklenenden düşükse, daha fazla ışık ekleyin: web kamerası loş bir ortamda daha uzun pozlamalar elde etmek için kare hızını düşürüyor olabilir.


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

4
Süper Kullanıcıya Hoşgeldiniz! biraz daha açıklayabilir misin? Özellikle, LordNekbeard’lerin sahip olmadığı hangi bilgilere sahip? :)
bertieb

Aşağıdakilere gerek yok -strict -2: 1) sizin ffmpegkorkunç modası geçmiş ve 2) AAC sesi kodluyorsunuz.
llogan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.