1

When using the FFmpeg dshow module, MJPEG is used as data from the webcam.

Input #0, dshow, from 'video=Logitech HD Pro Webcam C920:audio=CABLE Output (VB-Audio Virtual Cable)':
  Duration: N/A, start: 17980.693000, bitrate: N/A
    Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 30 tbr, 10000k tbn, 30 tbc
    Stream #0:1: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s

My webcam supports hardware MPEG-4 encoding, which would definitely help me save some USB bandwidth, and then I wouldn't have to transcode to MPEG-4, freeing up a bunch of CPU.

Is it possible to use MPEG-4 webcams with DirectShow API? And if it is, is it possible to do this with the FFmpeg dshow module?

Edit: Output from -list_options true:

\Brad\bin\ffmpeg -list_options true -f dshow -i video="Logitech HD Pro Webcam C920"
ffmpeg version N-67731-gce80f9f Copyright (c) 2000-2014 the FFmpeg developers
  built on Nov 15 2014 22:54:40 with gcc 4.9.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-font
config --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-
libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3la
me --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --e
nable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab
 --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libw
ebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54. 13.100 / 54. 13.100
  libavcodec     56. 12.101 / 56. 12.101
  libavformat    56. 13.100 / 56. 13.100
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
[dshow @ 0000000002c457c0] DirectShow video device options
[dshow @ 0000000002c457c0]  Pin "Capture"
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=160x90 fps=5 max s=160x90 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=160x120 fps=5 max s=160x120 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=176x144 fps=5 max s=176x144 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=320x180 fps=5 max s=320x180 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=352x288 fps=5 max s=352x288 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=432x240 fps=5 max s=432x240 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=640x360 fps=5 max s=640x360 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=800x448 fps=5 max s=800x448 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=800x600 fps=5 max s=800x600 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=864x480 fps=5 max s=864x480 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=960x720 fps=5 max s=960x720 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=1024x576 fps=5 max s=1024x576 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=1280x720 fps=5 max s=1280x720 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=1600x896 fps=5 max s=1600x896 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=1920x1080 fps=5 max s=1920x1080 fps=30
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=2304x1296 fps=2 max s=2304x1296 fps=2
[dshow @ 0000000002c457c0]   pixel_format=bgr24  min s=2304x1536 fps=2 max s=2304x1536 fps=2
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=160x90 fps=5 max s=160x90 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=160x120 fps=5 max s=160x120 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=176x144 fps=5 max s=176x144 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=320x180 fps=5 max s=320x180 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=352x288 fps=5 max s=352x288 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=432x240 fps=5 max s=432x240 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=640x360 fps=5 max s=640x360 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=800x448 fps=5 max s=800x448 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=800x600 fps=5 max s=800x600 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=864x480 fps=5 max s=864x480 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=960x720 fps=5 max s=960x720 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=1024x576 fps=5 max s=1024x576 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=1280x720 fps=5 max s=1280x720 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=1600x896 fps=5 max s=1600x896 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=1920x1080 fps=5 max s=1920x1080 fps=30
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=2304x1296 fps=2 max s=2304x1296 fps=2
[dshow @ 0000000002c457c0]   pixel_format=yuv420p  min s=2304x1536 fps=2 max s=2304x1536 fps=2
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=160x90 fps=5 max s=160x90 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=160x120 fps=5 max s=160x120 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=176x144 fps=5 max s=176x144 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=320x180 fps=5 max s=320x180 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=352x288 fps=5 max s=352x288 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=432x240 fps=5 max s=432x240 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=640x360 fps=5 max s=640x360 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=800x448 fps=5 max s=800x448 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=800x600 fps=5 max s=800x600 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=864x480 fps=5 max s=864x480 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=960x720 fps=5 max s=960x720 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=1024x576 fps=5 max s=1024x576 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=1280x720 fps=5 max s=1280x720 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=1600x896 fps=5 max s=1600x896 fps=30
[dshow @ 0000000002c457c0]   vcodec=mjpeg  min s=1920x1080 fps=5 max s=1920x1080 fps=30
[dshow @ 0000000002c457c0]  Pin "Capture"
[dshow @ 0000000002c457c0]   vcodec=h264  min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=160x90 fps=5 max s=160x90 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=160x120 fps=5 max s=160x120 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=176x144 fps=5 max s=176x144 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=320x180 fps=5 max s=320x180 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=352x288 fps=5 max s=352x288 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=432x240 fps=5 max s=432x240 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=640x360 fps=5 max s=640x360 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=800x448 fps=5 max s=800x448 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=800x600 fps=5 max s=800x600 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=864x480 fps=5 max s=864x480 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=960x720 fps=5 max s=960x720 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=1024x576 fps=5 max s=1024x576 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=1280x720 fps=5 max s=1280x720 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=1600x896 fps=5 max s=1600x896 fps=30
[dshow @ 0000000002c457c0]   vcodec=h264  min s=1920x1080 fps=5 max s=1920x1080 fps=30
video=Logitech HD Pro Webcam C920: Immediate exit requested
Brad
  • 5,686
  • 8
  • 52
  • 83
  • Does `ffmpeg -list_options true -f dshow -i video="Logitech HD Pro Webcam C920"` show additional info about the input? (But I'm not sure it will as I am not a Windows user). – llogan Jul 01 '16 at 22:12
  • @LordNeckbeard It does! Thanks. Now the tricky part... there are two pins, both called "Capture". Any idea how I can specify which pin when there is a redundant name? – Brad Jul 02 '16 at 01:38
  • @LordNeckbeard `ffmpeg -f dshow -vcodec h264 -video_size 1920x1080 -framerate 30 -i video="Logitech HD Pro Webcam C920 -vcodec copy test.mp4` shows the video stream correctly as an input and output, but no frames seem to run. Camera lights up like it's recording, but FFmpeg just sits at frame 0, time 00:00:00.00, bitrate=N/A. Letting it run for a couple minutes, it never seems to start. Any suggestions? – Brad Jul 02 '16 at 02:06
  • Perhaps `-video_pin_name 1` to choose the second so-called "pin". Not sure why that word was chosen... I'll have access to a Windows machine on Monday if someone else doesn't offer more useful info. – llogan Jul 02 '16 at 04:00

1 Answers1

0

ffmpeg -s 1920x1080 -framerate 30 -rtbufsize 100MB -f dshow -vcodec h264 -i video="Logitech HD Pro Webcam C920" -copyinkf -vcodec copy fileOut.mp4

Will get you a full HD 3mbps video only stream from the camera to disk without re-encoding. I haven't been able to find a way to request a different bitrate. There is also a delay of about 7 seconds at startup. I believe the delay is related to key frames but I haven't been able to verify that or reduce the delay. If anyone else can help please do.

I'm using:

ffmpeg version N-80906-gd5edb6c Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass -
-enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libop
enjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable
-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
libavutil      55. 28.100 / 55. 28.100
libavcodec     57. 48.101 / 57. 48.101
libavformat    57. 41.100 / 57. 41.100
libavdevice    57.  0.102 / 57.  0.102
libavfilter     6. 47.100 /  6. 47.100
libswscale      4.  1.100 /  4.  1.100
libswresample   2.  1.100 /  2.  1.100
libpostproc    54.  0.100 / 54.  0.100
ScottC
  • 1
  • 2
  • I try it and i get: `[dshow @ 00000000006c2cc0] Could not set video options` and `video=Logitech HD Pro Webcam C920: I/O error` – Dzwiedziu-nkg Feb 22 '17 at 13:58