使用FFMPEG在Windows下抓取视频
FFMPEG在Windows下也可以抓取视频。下面就是一个例子:
ffmpeg.exe -r 5 -f vfwcap -i 0 -s 176×144 -f rawvideo -pix_fmt yuv420p ss.yuv
其中,
-r 5表示输入视频为每秒5帧,
-f vfwcap表示从vfwcap设备中抓取视频。只要是VFW驱动都可以抓取视频,一般的摄像头都支持VFW驱动。
-i 0表示从第0个设备中抓取
-s 176×144表示输出的视频为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, 176×144, 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, 176×144, 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.”的错误。
版权声明:本文为doctorbill原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。