Windows
Windows采集设备的主要方式是dshow、vfwcap、gdigrab.
其中dshow可以用来抓取摄像头、采集卡、麦克风等,vfwcap主要用来采集摄像头类设备,gdigrab则是抓取Windows窗口程序。
ffmpeg -hide_banner -devices
方法一:dshow
首先需要安装一个软件,screen capture recorder
编译好的下载地址是:
http://sourceforge.net/projects/screencapturer/files/ 安装后才能使用
源码地址是:
https://github.com/rdp/screen-capture-recorder-to-video-windows-free
查看可用的设备:
ffmpeg -list_devices true -f dshow -i dummy
[dshow @ 000001d73b78b400] DirectShow video devices
[dshow @ 000001d73b78b400] "screen-capture-recorder"
[dshow @ 000001d73b78b400] DirectShow audio devices
[dshow @ 000001d73b78b400] "virtual-audio-capturer"
ffmpeg已经可以捕获到DirectShow视频设备,和音频设备了.
"screen-capture-recorder" 这个就是桌面捕获设备,如果电脑上连有摄像头,也会列出来.
"virtual-audio-capturer" 这个是音频捕获设备
捕获视频:
读取屏幕数据并编码为H.264,最后保存成desktop.mkv
ffmpeg -f dshow -i video="screen-capture-recorder" -vcodec libx264 -preset ultrafast desktop.mkv
捕获声音:
ffmpeg -f dshow -i audio="virtual-audio-capturer" -acodec aac desktop.aac
同时捕获桌面和声音并录制成flv格式:
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -pix_fmt yuv420p -acodec aac desktop.flv
如果想提高x264编码速度可使用 -preset:v ultrafast -tune:v zerolatency 两个参数。
1)如果不设置ultrafast,捕获的视频比较模糊。
2)如果不设置-pix_fmt yuv420p,捕获的是黑白图像
3)如果不设置-pix_fmt yuv420p,封装格式改为mp4的话,捕获的也是彩色图像。
捕获桌面音视频并推流
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -preset:v ultrafast -pix_fmt yuv420p -acodec aac -f flv rtmp://172.17.178.120/myapp/test
推流服务器的搭建可以参考这边文章:centos7+nginx+rtmp+ffmpeg搭建流媒体服务器
方法二:gdigrab
gdigrab是基于GDI的抓屏设备,可以用于抓取屏幕的特定区域。在这里记录一下gdigrab的用法。
gdigrab通过设定不同的输入URL,支持两种方式的屏幕抓取:
(1)“desktop”:抓取整张桌面。或者抓取桌面中的一个特定的区域。
(2)“title={窗口名称}”:抓取屏幕中特定的一个窗口。
下面举几个例子。
最简单的抓屏:
ffmpeg -f gdigrab -i desktop out.mpg
从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5
ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg
方法三:vfwcap
使用vfwcap枚举支持采集的设备
ffmpeg -f vfwcap -i list
(2)使用vfwcap生成mp4文件
ffmpeg -f vfwcap -i 0 -r 25 -vcodec libx264 out.mp4
linux
使用x11grab
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 v-out.mp4
上面的参数,指的是从屏幕的左上角(x=100, y=200)的位置,录制分辨率为1024×768的视频。
可以使用ALSA同时录制声音
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 av-out.mkv
也可以使用Pulse声音输入设备
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f pulse -ac 2 -i default av-out.mkv
问题总结
捕获图像不清晰。
解决办法:
添加参数:-preset ultrafast
参考
FFmpeg获取DirectShow设备数据(摄像头,录屏)
利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能