FFMPEG在Windows下捕获摄像头视频

hooface 提交于 周一, 2011-04-11 - 09:39

FFMPEG在Windows下也可以抓取视频。下面就是一个例子:

 
ffmpeg.exe -r 5 -f vfwcap -i 0 -s 176x144 -f rawvideo -pix_fmt yuv420p ss.yuv
 
其中,-r 5表示输入视频为每秒5帧,
      -f vfwcap表示从vfwcap设备中抓取视频。只要是VFW驱动都可以抓取视频,一般的摄像头都支持VFW驱动。
      -i 0表示从第0个设备中抓取
      -s 176x144表示输出的视频为QCIF大小
      -f rawvide表示输出的文件不压缩
      -pix_fmt yuv420p表示输出的格式为YUV 4:2:0的,这也是最常用的格式。摄像头支持的输入格式有很多种,FFMPEG会自动进行转换。
 
   下面是执行的结果
 
FFmpeg version SVN-r25366, Copyright (c) 2000-2010 the FFmpeg developers
  built on Oct  6 2010 04:13:18 with gcc 4.4.2
  configuration: --enable-gpl --enable-version3 --enable-libgsm --enable-pthread
s --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libmp3lame --
enable-libopenjpeg --enable-libschroedinger --enable-libopencore_amrwb --enable-
libopencore_amrnb --enable-libvpx --arch=x86 --enable-runtime-cpudetect --enable
-libxvid --enable-libx264 --extra-libs='-lx264 -lpthread' --enable-librtmp --ext
ra-libs='-lrtmp -lpolarssl -lws2_32 -lwinmm' --target-os=mingw32 --enable-avisyn
th --cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc' --enable-memalign
-hack
  libavutil     50.32. 2 / 50.32. 2
  libavcore      0. 9. 1 /  0. 9. 1
  libavcodec    52.92. 0 / 52.92. 0
  libavformat   52.79. 0 / 52.79. 0
  libavdevice   52. 2. 2 / 52. 2. 2
  libavfilter    1.48. 0 /  1.48. 0
  libswscale     0.12. 0 /  0.12. 0
[vfwcap @ 01d5d470] Estimating duration from bitrate, this may be inaccurate
Input #0, vfwcap, from '0':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: rawvideo, yuyv422, 176x144, 5 tbr, 1k tbn, 5 tbc
[buffer @ 022a5ee0] w:176 h:144 pixfmt:yuyv422
[ffmpeg_output @ 022a6070] auto-inserting filter 'auto-inserted scaler 0' betwee
n the filter 'src' and the filter 'out'
[scale @ 022a6320] w:176 h:144 fmt:yuyv422 -> w:176 h:144 fmt:yuv420p flags:0x4
Output #0, rawvideo, to 'ss.yuv':
  Metadata:
    encoder         : Lavf52.79.0
    Stream #0.0: Video: rawvideo, yuv420p, 176x144, q=2-31, 200 kb/s, 90k tbn, 5
 tbc
Stream mapping:
  Stream #0.0 -> #0.0
Press [q] to stop encoding
frame=    7 fps=  0 q=0.0 size=     260kB time=1.40 bitrate=1520.6kbits/s dup=0
frame=   10 fps=  9 q=0.0 size=     371kB time=2.00 bitrate=1520.6kbits/s dup=0
frame=   13 fps=  8 q=0.0 size=     483kB time=2.60 bitrate=1520.6kbits/s dup=0
frame=   16 fps=  7 q=0.0 size=     594kB time=3.20 bitrate=1520.6kbits/s dup=0
frame=   18 fps=  7 q=0.0 size=     668kB time=3.60 bitrate=1520.6kbits/s dup=0
frame=   21 fps=  6 q=0.0 size=     780kB time=4.20 bitrate=1520.6kbits/s dup=0
frame=   24 fps=  6 q=0.0 size=     891kB time=4.80 bitrate=1520.6kbits/s dup=0
frame=   26 fps=  6 q=0.0 size=     965kB time=5.20 bitrate=1520.6kbits/s dup=0
frame=   29 fps=  6 q=0.0 size=    1077kB time=5.80 bitrate=1520.6kbits/s dup=0
frame=   32 fps=  6 q=0.0 size=    1188kB time=6.40 bitrate=1520.6kbits/s dup=0
frame=   34 fps=  6 q=0.0 size=    1262kB time=6.80 bitrate=1520.6kbits/s dup=0
frame=   37 fps=  6 q=0.0 size=    1374kB time=7.40 bitrate=1520.6kbits/s dup=0
frame=   40 fps=  6 q=0.0 size=    1485kB time=8.00 bitrate=1520.6kbits/s dup=0
frame=   43 fps=  6 q=0.0 size=    1596kB time=8.60 bitrate=1520.6kbits/s dup=0
frame=   45 fps=  6 q=0.0 size=    1671kB time=9.00 bitrate=1520.6kbits/s dup=0
frame=   48 fps=  6 q=0.0 size=    1782kB time=9.60 bitrate=1520.6kbits/s dup=0
frame=   51 fps=  6 q=0.0 size=    1893kB time=10.20 bitrate=1520.6kbits/s dup=0
frame=   53 fps=  5 q=0.0 size=    1968kB time=10.60 bitrate=1520.6kbits/s dup=0
frame=   56 fps=  5 q=0.0 size=    2079kB time=11.20 bitrate=1520.6kbits/s dup=0
frame=   59 fps=  5 q=0.0 size=    2190kB time=11.80 bitrate=1520.6kbits/s dup=0
frame=   61 fps=  5 q=0.0 size=    2265kB time=12.20 bitrate=1520.6kbits/s dup=0
frame=   64 fps=  5 q=0.0 size=    2376kB time=12.80 bitrate=1520.6kbits/s dup=0
frame=   67 fps=  5 q=0.0 size=    2487kB time=13.40 bitrate=1520.6kbits/s dup=0
frame=   69 fps=  5 q=0.0 size=    2562kB time=13.80 bitrate=1520.6kbits/s dup=0
frame=   71 fps=  5 q=0.0 Lsize=    2636kB time=14.20 bitrate=1520.6kbits/s dup=
0 drop=134
 
    在整个例子中,我的摄像头输入的格式是yuyv422,会被自动转换为yuv420p。如果在命令行不指定-pix_fmt参数,则会使用摄像头采集的格式,即yuyv422进行存盘。
 
    在运行的过程中可以按“q”键退出,也可以在命令行使用-t指定抓取的时间。
 
    命令行中的-r是必选的,如果没有,会显示“A time base must be specified.”的错误。