一、FFmpeg简介
FFmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的便携性。FFmpeg 可以在 Linux、Mac OS X、Microsoft Windows、BSDs、Solaris 等各种构建环境、机器架构和配置下编译、运行,并通过测试基础设施 FATE。
它包含 libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale 和 libswresample等程序集,可以被程序开发者调用使用。还有 ffmpeg、ffplay 和 ffprobe等可执行程序,可以被用户直接使用。
二、Windows下安装配置FFmpeg
1、下载
1)进入下载页面 https://ffmpeg.org/download.html 下载Windows可执行文件到本地。
2、解压安装
下载好后解压到你想安装的文件目录下,我的安装目录是D:\dev\app\ffmpeg-win64
3、配置环境变量
配置FFmpeg环境变量,如下:
先进入bin目录获取路径:D:\dev\app\ffmpeg-win64\bin
打开系统开始菜单--右击计算机--点击属性--选中高级系统设置--选择高级--选择环境变量设置
在系统变量里选择path,选择编辑,将FFmpeg的bin目录的路径D:\dev\app\ffmpeg-win64\bin;加进去,记得加上分号(win7),点击“确定”保存,即配置完成。(win10直接新建即可。)
4、检验是否配置成功
使用命令行窗口检验是否安装成功
调用命令行(windows+R输入cmd)输入“ffmpeg –version”,如果出现如下说明配置成功。
接下来我们就可以在命令提示行中使用FFmpeg相关命令进行各种操作了。
三、屏幕录制
1、试用
在命令行中输入如下命令:
ffmpeg -f gdigrab -i desktop -f mp4 d:/out.mp4
回车后,如下效果:
代表正在录屏,最后一行可以看实时状态。可以按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
</article>