使用 FFmpeg 将 DirectShow 视频捕获为 MPEG-4

使用 FFmpeg 将 DirectShow 视频捕获为 MPEG-4

使用时FFmpeg dshow 模块,MJPEG 作为来自网络摄像头的数据。

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

我的网络摄像头支持硬件 MPEG-4 编码,这肯定能帮助我节省一些 USB 带宽,然后我就不必转码为 MPEG-4,从而释放大量的 CPU。

是否可以将 MPEG-4 网络摄像头与 DirectShow API 结合使用?如果可以,是否可以使用 FFmpeg dshow 模块来实现这一点?

编辑:输出来自-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

答案1

ffmpeg -s 1920x1080 -framerate 30 -rtbufsize 100MB -f dshow -vcodech264-i 视频="Logitech HD Pro 网络摄像头 C920"-复制链接-vcodec复制文件输出.mp4

将为您提供从相机到磁盘的全高清 3mbps 视频流,无需重新编码。我找不到请求不同比特率的方法。启动时也有大约 7 秒的延迟。我相信延迟与关键帧有关,但我无法验证或减少延迟。如果其他人可以提供帮助,请帮忙。

我在用着:

ffmpeg 版本 N-80906-gd5edb6c 版权所有 (c) 2000-2016 FFmpeg 开发人员
使用 gcc 5.4.0 (GCC) 构建
配置:--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-
-启用-libbluray --启用-libbs2b --启用-libcaca --启用-libfreetype --启用-libgme --启用-libgsm --启用-libilbc --启用-libmodplug --启用-libmp3lame --启用-libopencore-amrnb --启用-libopencore-amrwb --启用-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

相关内容