FFmpeg屏幕录制

一、FFmpeg简介

        FFmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的便携性。FFmpeg 可以在 Linux、Mac OS X、Microsoft Windows、BSDs、Solaris 等各种构建环境、机器架构和配置下编译、运行,并通过测试基础设施 FATE。
        它包含 libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale 和 libswresample等程序集,可以被程序开发者调用使用。还有 ffmpeg、ffplay 和 ffprobe等可执行程序,可以被用户直接使用。

  • Github:https://github.com/FFmpeg/FFmpeg
  • 官网:http://ffmpeg.org/
  • 下载页面直达:https://ffmpeg.org/download.html

二、Windows下安装配置FFmpeg

1、下载

1)进入下载页面 https://ffmpeg.org/download.html 下载Windows可执行文件到本地。

FFmpeg屏幕录制_第1张图片

2、解压安装

下载好后解压到你想安装的文件目录下,我的安装目录是D:\dev\app\ffmpeg-win64

FFmpeg屏幕录制_第2张图片

3、配置环境变量

 

配置FFmpeg环境变量,如下:
先进入bin目录获取路径:D:\dev\app\ffmpeg-win64\bin

 

FFmpeg屏幕录制_第3张图片
打开系统开始菜单--右击计算机--点击属性--选中高级系统设置--选择高级--选择环境变量设置

 

FFmpeg屏幕录制_第4张图片

 

FFmpeg屏幕录制_第5张图片

 

FFmpeg屏幕录制_第6张图片
在系统变量里选择path,选择编辑,将FFmpeg的bin目录的路径D:\dev\app\ffmpeg-win64\bin;加进去,记得加上分号(win7),点击“确定”保存,即配置完成。(win10直接新建即可。)

FFmpeg屏幕录制_第7张图片

 

4、检验是否配置成功

使用命令行窗口检验是否安装成功
调用命令行(windows+R输入cmd)输入“ffmpeg –version”,如果出现如下说明配置成功。

FFmpeg屏幕录制_第8张图片

接下来我们就可以在命令提示行中使用FFmpeg相关命令进行各种操作了。

三、屏幕录制

1、试用

在命令行中输入如下命令:

ffmpeg -f gdigrab -i desktop -f mp4 d:/out.mp4

回车后,如下效果:

FFmpeg屏幕录制_第9张图片

代表正在录屏,最后一行可以看实时状态。可以按q键终止录屏

终止录屏后,在 d 盘下就可以看到刚才录的 out.mp4视频文件了。

2、命令详解

官方全文档地址:https://ffmpeg.org/ffmpeg.html#Stream-specifiers-1    全英文,唉……

附一个录屏教学视频,挺好的(能找的到就不错了):https://www.zhihu.com/zvideo/1240037588020662272

Windows下ffmpeg采集设备的主要方式是dshow(directshow)、vfwcap、gdigrab,其中dshow可以用来抓取摄像头、采集卡、麦克风等,vfwcap主要用来采集摄像头类设备,gdigrab则是抓取Windows窗口程序。

在Windows平台下,ffmpeg 录制屏幕的方式大体上有2种,一种是基于gdigrab的录屏,一种是基于dshow的录屏。directrow的录屏方式详见简书文章FFMPEG windows录屏。网上有人说:dshow的渲染效率高,占用资源小,需要安装directx的驱动。而gdigrab的方式,则简单很多,缺点是占用资源大,帧率不高,但勉强能用。但是通过我自行测试发现,反而是gdigrab占用资源小一些。使用者自行选择吧

网上搜了搜录屏命令的结构,就拿下面一行来举例说吧:

ffmpeg -f gdigrab -t 30 -framerate 15 -i desktop -f dshow -i audio="virtual-audio-capturer" -b:v 3M -pixel_format yuv420p -vcodec libx264 -s 1366x768 -y d:/test.flv

重要注释:

  • -f 指定采集数据方式,一般为dshow 或 gdigrab。gdigrab为系统自带,只能录屏幕,没声音;dshow需装directX,优点是可以指定多个输入,比如下载安装screen capture recorder后,可将其作为dshow模式下的视频输入,可将virtual-audio-capturer作为dshow模式下的音频输入,实现录屏的同时录音。
  • -i 指定输入,desktop表示gdigrab采集模式输入全部桌面。dshow模式下自己指定,如:-i video="screen-capture-recorder" -i audio="virtual-audio-capturer" 
  • -t 表示录屏时间,缺省则没有录屏时间限制,会一直录,录到手动停止或强制关闭
  • -framerate 表示帧率。对屏幕录制来说,一般15帧就够了,太大的话会很占资源,cpu占用率、内存、存储空间占用等都会很高。
  • - s 表示分辨率
  • -b:v 表示码率,如:-b:v 3M。大一点清楚,但是占资源,自己权衡吧。
  • -pixel_format 表示像素格式,如yuv420p等,注意选择不同的像素格式会影响资源占用率和视频质量,自己研究吧。
  • -vcodec 表示编码方式。libx264表示软编码,编码器的库为x264。你可以选择其他的,不同的编码方式也会影响资源占用率和视频质量,自己研究吧。此外可以用硬件加速,硬编解码有3种常见的方式,例如:-vcodec h264_qsv,即使用集显加速;例如: -vcodec h264_nvenc,即使用N卡加速;例如: -vcodec h264_amf,即使用A卡加速。开启硬件加速的情况下可大大降低CPU的占用率
  • -y 表示覆盖同名文件
  • d:/test.flv为输出文件名,格式虽然mp4较为常见,但我建议用flv格式,因为如果中间有录制损坏,mp4整个就播放不了了,但flv能。

三、问题总结

捕获图像不清晰。

解决办法:

添加参数:-preset ultrafast

你可能感兴趣的:(FFmpeg屏幕录制)