本文的主要内容:演示如何利用命令行采集摄像头的视频数据。
阅读本文之前,建议先阅读《音频录制01_命令行》对常用命令作一个基本认识。
输出结果大致如下所示。
DirectShow video devices (some may be both video and audio devices) "Integrated Camera" DirectShow audio devices "麦克风阵列 (Realtek(R) Audio)"Integrated Camera是我笔记本上自带的摄像头,等会我们就是通过这个摄像头采集视频数据。
dshow支持的参数 ffmpeg -h demuxer=dshow输出结果大致如下所示。
dshow indev AVOptions: -video_size <image_size> set video size given a string such as 640x480 or hd720. -pixel_format <pix_fmt> set video pixel format (default none) -framerate <string> set video frame rate -list_devices <boolean> list available devices (default false) -list_options <boolean> list available options for specified device (default false)-video_size:分辨率
-pixel_format:像素格式
-framerate:帧率(每秒采集多少帧画面)
-list_devices:true表示列出dshow支持的所有设备
-list_options:true表示列出特定设备支持的所有参数
摄像头支持的参数 ffmpeg -f dshow -list_options true -i video="Integrated Camera"输出结果大致如下所示。
DirectShow video device options (from video devices) Pin "捕获" (alternative pin name "捕获") vcodec=mjpeg min s=1280x720 fps=30 max s=1280x720 fps=30 vcodec=mjpeg min s=320x180 fps=30 max s=320x180 fps=30 vcodec=mjpeg min s=320x240 fps=30 max s=320x240 fps=30 vcodec=mjpeg min s=352x288 fps=30 max s=352x288 fps=30 vcodec=mjpeg min s=424x240 fps=30 max s=424x240 fps=30 vcodec=mjpeg min s=640x360 fps=30 max s=640x360 fps=30 vcodec=mjpeg min s=640x480 fps=30 max s=640x480 fps=30 vcodec=mjpeg min s=848x480 fps=30 max s=848x480 fps=30 vcodec=mjpeg min s=960x540 fps=30 max s=960x540 fps=30 pixel_format=yuyv422 min s=1280x720 fps=10 max s=1280x720 fps=10 pixel_format=bgr24 min s=1280x720 fps=10 max s=1280x720 fps=10 pixel_format=yuyv422 min s=320x180 fps=30 max s=320x180 fps=30 pixel_format=bgr24 min s=320x180 fps=30 max s=320x180 fps=30 pixel_format=yuyv422 min s=320x240 fps=30 max s=320x240 fps=30 pixel_format=bgr24 min s=320x240 fps=30 max s=320x240 fps=30 pixel_format=yuyv422 min s=352x288 fps=30 max s=352x288 fps=30 pixel_format=bgr24 min s=352x288 fps=30 max s=352x288 fps=30 pixel_format=yuyv422 min s=424x240 fps=30 max s=424x240 fps=30 pixel_format=bgr24 min s=424x240 fps=30 max s=424x240 fps=30 pixel_format=yuyv422 min s=640x360 fps=30 max s=640x360 fps=30 pixel_format=bgr24 min s=640x360 fps=30 max s=640x360 fps=30 pixel_format=yuyv422 min s=640x480 fps=30 max s=640x480 fps=30 pixel_format=bgr24 min s=640x480 fps=30 max s=640x480 fps=30 pixel_format=yuyv422 min s=848x480 fps=20 max s=848x480 fps=20 pixel_format=bgr24 min s=848x480 fps=20 max s=848x480 fps=20 pixel_format=yuyv422 min s=960x540 fps=15 max s=960x540 fps=15 pixel_format=bgr24 min s=960x540 fps=15 max s=960x540 fps=15可以看到摄像头支持的分辨率、像素格式、帧率等参数。
录制 ffmpeg -f dshow -i video="Integrated Camera" out.yuv输出结果大致如下所示。
Input #0, dshow, from 'video=Integrated Camera': Stream #0:0: Video: mjpeg, yuvj422p, 1280x720, 30 fps Output #0, rawvideo, to 'out.yuv': Stream #0:0: Video: rawvideo, yuvj422p, 1280x720, 30 fps根据输出结果,不难看出:
从摄像头采集的数据,最终存成了YUV格式
摄像头的默认参数
分辨率:1280x720
像素格式:yuvj422p
帧率:30fps
所以,播放YUV时的命令如下所示。
需要注意的是:YUV文件中只存储了图像信息,并没有声音信息
因此,播放YUV时是听不到任何声音的
ffplay的framerate默认值是25
ffplay -video_size 1280x720 -pixel_format yuvj422p -framerate 30 out.yuv可以自定义参数进行录制。
ffmpeg -f dshow -video_size 640x480 -pixel_format yuyv422 -framerate 30 -i video="Integrated Camera" out.yuv播放录制好的YUV。
ffplay -video_size 640x480 -pixel_format yuyv422 -framerate 30 out.yuv Mac avfoundation支持的设备 ffmpeg -f avfoundation -list_devices true -i ''输出结果大致如下所示。
AVFoundation video devices: [0] FaceTime高清摄像头(内建) [1] Capture screen 0 AVFoundation audio devices: [0] Soundflower (64ch) [1] Edu Audio Device [2] MacBook Pro麦克风 [3] Soundflower (2ch)0号设备就是Mac自带的摄像头。
avfoundation支持的参数 ffmpeg -h demuxer=avfoundation输出结果大致如下所示。
AVFoundation indev AVOptions: -list_devices <boolean> .D........ list available devices (default false) -pixel_format <pix_fmt> .D........ set pixel format (default yuv420p) -framerate <video_rate> .D........ set frame rate (default "ntsc") -video_size <image_size> .D........ set video size-video_size:分辨率
-pixel_format:像素格式
默认是yuv420p
-framerate:帧率(每秒采集多少帧画面)
默认是,也就是30000/1001,约等于29.970030
-list_devices:true表示列出avfoundation支持的所有设备
录制 # 使用0号视频设备 ffmpeg -f avfoundation -i 0 out.yuv然后你可能会遇到一个错误:这个设备(摄像头)不支持29.970030的帧率。
Selected framerate (29.970030) is not supported by the device重新设置个30的帧率试试。
ffmpeg -f avfoundation -framerate 30 -i 0 out.yuv然后你会看到以下提示信息。
这个设备(摄像头)不支持yuv420p
只支持uyvy422、yuyv422、nv12、0rgb、bgr0