FFMPEG录屏入门指南【转载】

文章非原创,为防失联而转载:【原创】FFMPEG录屏入门指南 - 博客园 (cnblogs.com)


【原创】FFMPEG录屏入门指南

最近部门内部在做技术分享交流,需要将内容录制成视频存档。很自然的想到了去网上找一些录屏的软件,试过了几款诸如屏幕录像大师 Captura之类的录屏软件,要么操作太繁琐,要么压缩率太低不支持H265编码。于是想到了音视频处理的神器ffmpeg!于是查了一些资料,踩了若干坑之后,总结出了本文。现在分享给大家!

1. 下载ffmpeg

  • 点击 ffmpeg官网,选择windows,然后点击Windows builds from gyan.dev

  • 也可以直接点击 Builds - CODEX FFMPEG @ gyan.dev ,在点击ffmpeg-git-full.7z,即可下载:

  • 下载到的文件格式为7z(一种压缩格式),用电脑安装的压缩工具解压即可。如果没有安装支持7z的压缩工具,可以点击7-Zip,下载:
     


    下载完,双击打开,一路同意下一步直到完成即可。

  • 解压后剪切至自己习惯放软件的文件夹下即可:

    我把它放在了D:\opt\ffmpeg\然后记住这个路径D:\opt\ffmpeg\bin,后面的录屏命令用的到

  • 选做:将D:\opt\ffmpeg\bin添加到系统环境变量。目的是不用记住上一步的这个路径D:\opt\ffmpeg\bin,就可以用ffmpeg。具体方法请自行百度。

至此,ffmpeg就安装完了。

按下Windows+R键,输入cmd,回车,打开命令提示符窗口:
 


依次输入以下命令

 
# 跳转至ffmpeg程序所在路径,设置了ffmpeg环境变量的可以略过
d:
cd /opt/ffmpeg/bin/
# 上面的盘符`d:`和路径`/opt/ffmpeg/bin/` 要根据你ffmpeg的安装路径灵活修改!

2. 查看输入设备

输入:ffmpeg -list_devices true -f dshow -i dummy,查看可用设备的清单(每台电脑的结果都不太一样,但是相似,可以根据我下面的结果甄别自己电脑的设备):

  • 我这次录屏,需要录制电脑画面和麦克风的声音,于是用到了上面结果中的麦克风阵列 (Realtek(R) Audio) 设备,注意不包含引号:

电脑画面该选哪个呢?有两种方案:

  • 安装Screen Capturer Recorder然后选择上面的设备清单中的screen-capture-recorder(见上图;安装好后再重新执行查看设备的命令才会出现)。
  • 直接使用ffmpeg内置的gdigrab
    第一种我操作失败了,所以我选用第二种。

现在我需要记住的的是音频输入设备名称麦克风阵列 (Realtek(R) Audio),后面的录屏命令用的到。

3. 查看可用编码器

输入ffmpeg -encoders |findstr "hevc 265",查看可用的编码器。

我的电脑支持这些:

该选择哪一个呢?

  • 首先libx265是通用的,选这个最保守,但是它在不做优化的情况下是靠cpu运算。简单理解,一旦开启录屏,你的电脑cpu使用率会飙升,甚至造成电脑卡顿。尝试一下,如果没有造成卡顿,就可以继续用这个编码器了。
  • 如果电脑配置有限,或者有独立显卡的话,咱们可以挑一个独显支持的编码器。我的电脑是NVIDIA的独显,所以我选择与之对应的hevc_nvenc编码器。

findstr 后面除了按编码检索,还可以按自己的独显检索:AMD/Intel/NVIDIA,可以更方便找到自己独显支持的编码器。

你该怎么找到适合的呢?首先要知道自己的电脑有没有独显,其次搞清楚独显是Intel的,还是NVIDIA的,还是AMD的,然后从关键词里面找对应的就可以了。拿我的清单举例:如果是AMD的,就选hevc_amf,如果是Intel的,就选hevc_qsv。 或者干脆挨个尝试一下,反正又不多。
怎么判断录屏是否用到了独显呢?

  • 如果开始录屏后,cpu飙升,说明使用的cpu进行编码运算:

  • 如果是GPU生生明显,cpu上升不明显,则说明编码器再用独显计算:

 
> 可以通过这个判断自己的编码器选择是否合适

PS:同等画质下,目前压缩率较高的是H265/HEVC,故本文以此为例讲解。还有压缩率更高的编码 —— av1,咱们可以修改一下参数执行查看编码器的命令:ffmpeg -encoders |findstr av1,会拿到av1的编码器,但是目前没有独显支持的av1编码器,CPU配置高的同学可以尝试av1编码器,录制的视频会更小,大约是h265的三分之二!

现在我要记住适合我的编码器hevc_nvenc,后面的录屏命令用的到。

4. 录屏

通过上面两步,我记住了我的音频输入设备是麦克风阵列 (Realtek(R) Audio),编码器是hevc_nvenc。下面在命令提示符窗口输入我的录屏命令

 
:: 切换到ffmpeg所在的盘符和路径,设置了环境变量的可以省略
D:
cd /opt/ffmpeg/bin/
:: 录屏命令
ffmpeg.exe ^
-f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" %要采集的音频设备(这里需要换成你电脑银屏输入设备的名称,不能直接用这个)% ^
-f gdigrab -i desktop %要采集的视频设备% ^
-c:v hevc_nvenc %指定视频编码(可以用通用的libx265或者libx264,也可以换成自己电脑独显支持的编码器,这个hevc_nvenc仅适用于英伟达显卡)% ^
-r 8 %指定帧率% ^
-b:v 0.8M -minrate 0.4M -maxrate 2M -bufsize 4M %指定码率% ^
-y ^
D:\录屏.mp4

按下回车,录屏就开始了!结束录屏的话,选中录屏的命令提示符窗口,按下Q键就可以了。

  • 其中-f dshow -i audio="麦克风阵列 (Realtek(R) Audio)"是指定采集的音频设备,你可以将麦克风阵列 (Realtek(R) Audio) 换成你想要采集的音频输入设备。

  • 其中-f gdigrab -i desktop是指定采集的视频设备,含义为采集电脑屏幕画面,此项无需修改。(还记得上面说过,录制电脑画面有两种方案吗,这是第二种。)

  • 其中-c:v hevc_nvenc是指定视频编码器,你可以将hevc_nvenc 换成适合你的编码器。如果实在不知道该选哪个,就用libx265,如果用这个电脑录屏会卡,就用libx264。还卡?就放弃吧。

  • 其中-r 8是指定视频的帧率。(帧率是什么,可自行百度。)简单说,这个值越高,视频就会越流畅,但是录屏后的视频文件越大(其他参数不变的情况下);反之,视频就会越跳跃,极端情况下会变成ppt的效果,但是视频文件的体积会越小。对于录屏来说,建议设置在5--30之间,通过多次尝试,找到自己满意的数值

  • 其中-b 0.6M -minrate 0.4M -maxrate 2M -bufsize 4M 是设置视频的比特率,就是每秒会产生多大的体积。0.6M就是每秒会占600kbp,简单说就是一秒的视频体积是600➗8也就是不到100K。-b后面跟的是基准比特率,-minrate是最小比特率 -maxrate是最大比特率。比特率不能过低,虽然会降低文件体积,但是过低会导致画面的清晰度惨不忍睹!过高也没有意义,因为画面的效果还收其他参数的影响,比如分辨率、帧率等等。推荐的最小值是-b 0.6M -minrate 0.4M -maxrate 2M -bufsize 4M,最大值是-b 2M -minrate 1M -maxrate 4M -bufsize 8M

  • 其中D:\Personal\Desktop\录屏%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4 是录屏文件保存位置和名称。可根据自己的需要修改。

5. 调优

  • ffmpeg关于音视频的参数非常多,本文仅仅是入门用,像是分辨率、音视频质量、音频编码等等一系列参数并没有完全列出来。未指定的参数,ffmpeg会使用默认参数,如分辨率,会使用屏幕的分辨率。
  • 对与帧率-r,码率-b,分辨率等参数,可以在多次尝试中找到文件体积和录制效果间的一个权衡。这里给出一个参考:通常H265编码下,1080p的视频大小应该在300M到1.5G之间,我按照上述参数录制的视频在400M左右。
  • 找到适合自己的参数后,可以将其保存为bat批处理文件,以后双击该文件,就可以一键录屏了!下面给出我的以作参考:
 
:: 获取当前时间用作文件名
set NOW_TIME_HH=%time:~0,2%
if "%NOW_TIME_HH%" lss "10" (set NOW_TIME_HH=0%time:~1,1%) else (set NOW_TIME_HH=%time:~0,2%)
set NOW_TIME=%date:~0,4%%date:~5,2%%date:~8,2%%NOW_TIME_HH%%time:~3,2%%time:~6,2%
:: 切换到ffmpeg所在的盘符和路径,设置了环境变量的可以省略
D:
cd /opt/ffmpeg/bin/
:: 录屏命令
ffmpeg.exe ^
-f gdigrab -i desktop %要采集的视频设备:桌面% ^
-f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" %要采集的音频设备:话筒% ^
-c:v hevc_nvenc %指定视频编码% ^
-r 8 %指定帧率% ^
-b:v 0.8M -minrate 0.4M -maxrate 2M -bufsize 4M %指定码率% ^
-y ^
D:\Personal\Desktop\录屏%NOW_TIME%.mp4 %指定文件路径%

注意:上述脚本只适用于我的电脑,是不能直接复制粘贴拿来用的,需要根据注释进行修改!保存后的bat文件编码得是windows默认的ANSI(就是GBK),如果是UTF-8会导致执行失败!

image

ffmpeg能做的事情远不止这些,它还能加水印,多路混采(像是同时录制电脑和话筒的声音,同时录制桌面和摄像头等等),感兴趣的同学可以自己挖掘和研究。

本文的并不是最好(易用且功能丰富)的录屏方式,而是研究的意义更大一些。如果需要实际工作生活中需要录屏,推荐两款录屏软件:

  • OBS:(首推!后期有时间会出一篇有心得的原创使用教程,敬请关注。)下载地址:https://obsproject.com/。它擅长对录屏进行精细化配置,不仅可以设置编码器、帧率等参数,更厉害的是可以设置多路混采,可以编排各输入源的布局,可以采集指定窗口,指定浏览器,各种音频输入等等。(当然,ffmpeg通过插件等方式也可以支持,但是使用的门槛就高很多了!)
  • Captura: 下载地址:https://www.updatestar.com/directdownload/captura/2520679。它除了支持基本的录屏参数配置之外,还可以录制光标和键盘输入,特别适合录制视频教程。

最后,如有交代不清的,或者错误之处,欢迎交流指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/802337.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第13天|CycleGAN 图像风格迁移互换全流程解析

目录 数据集下载和加载 可视化 构建生成器 构建判别器 优化器和损失函数 前向计算 计算梯度和反向传播 模型训练 模型推理 数据集下载和加载 使用 download 接口下载数据集,并将下载后的数据集自动解压到当前目录下。数据下载之前需要使用 pip install dow…

LabVIEW设备检修信息管理系统

开发了基于LabVIEW设计平台开发的设备检修信息管理系统。该系统应用于各种设备的检修基地,通过与基地管理信息系统的连接和数据交换,实现了本地检修工位数据的远程自动化管理,提高了设备的检修效率和安全性。 项目背景 现代设备运维过程中信…

QT小细节

QT小细节 1 QTextToSpeech1.1 cmake1.2 qmake QT6 6.7.2 1 QTextToSpeech 从下图可以看到,分别使用qmake或者cmake编译情况下的,QTextToSpeech的使用方法 QTextToSpeech官方链接,也可以直接在QT Creator的帮助中搜索 1.1 cmake 将上图中的…

jmeter之变量随机参数化以及解决多线程不会随机变化

参考链接: https://www.cnblogs.com/Testing1105/p/12743475.html jmeter 使用random函数多线程运行时数据不会随机变化?_jmeter 线程组循环执行时 变量不变-CSDN博客 1、如下图所示,需要对请求参数 autor 和phone进行随机参数化 2、目前有…

FullCalendar日历组件集成实战(20)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

【Java--数据结构】二叉树

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 树结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合 注意:树形结构中,子…

昇思MindSpore学习开始

昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。 其中,易开发表现为API友好、调试难度低;高效执行包括计算效率、数据预处理效率和分布式训练效率;全场景则指框架同时支持云、边缘以…

二叉树、B树/B-树

二叉树 在中文语境中,节点结点傻傻分不清楚,故后文以 node 代表 "结点",root node 代表根节点,child node 代表 “子节点” 二叉树是诸多树状结构的始祖,至于为什么不是三叉树,四叉树,或许是因为计算机只能数到二吧,哈哈,开个玩笑。二叉树很简单,每个 no…

在android11 上实现平行视界效果

前言: 平行视界是谷歌为了解决大屏横屏设备 适配为手机等竖屏设备开发的APP , 在这类APP显示时 在横屏设备上不方便用户观看。 android 13 上平行视界的效果如下: 正文: 在android13前 ,各家有各自的解决方案,下面提…

[计算机网络] VPN技术

VPN技术 1. 概述 虚拟专用网络(VPN)技术利用互联网服务提供商(ISP)和网络服务提供商(NSP)的网络基础设备,在公用网络中建立专用的数据通信通道。VPN的主要优点包括节约成本和提供安全保障。 优…

心理健康服务小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,最新资讯管理,心理产品管理,产品分类管理,音乐理疗管理,试题管理 微信端账号功能包括:系统首页,心理产品音…

学习大数据DAY17 PLSQL基础语法6和Git的基本操作

目录 包 存储过程调试功能 作业 阶段复习作业 Git课程目录 什么是版本控制 没有版本控制的缺点 常见的版本工具 版本控制分类 1. 本地版本控制 2. 集中版本控制 3. 分布式版本控制 Git与SVN主要区别 Git软件安装及配置 Windows系统安装Git 安装Tortoise Git(乌龟…

git和gitee的基本操作

目录 git常见命令 1.初始化工作区(在某一文件路径下) 2.查看当前工作区的代码文件状态 3.将工作区的代码文件提交到暂存区 4.将暂存区的代码文件提交到本地仓库 5.工作区和暂存区文件差异化比较 6.暂存区和本地仓库的差异化比较 7.工作区和本地仓库差异化比较 8.版本回…

自适应键盘,自带隐藏键盘的输入框(UITextField)

引言 在iOS开发中,输入框占据着举足轻重的地位。与安卓不同,iOS输入框经常面临键盘遮挡的问题,或者无法方便地取消键盘。为了解决这些问题,有许多针对iOS键盘管理的库,如IQKeyboardManager、TPKeyboardAvoiding和Keyb…

实习随笔【实现Json格式化与latex渲染】

【写在前面】在实习中,遇到了如下需求: 待格式化数据大概长这样,里面存在Json乱码以及由$$包裹的公式 目标格式: 一、Json格式化 我们这里的任务主要分为两部分: 解析一个可能包含嵌套的 JSON 字符串格式化 JSON 对象…

SAP ABAP性能优化分析工具

SAP系统提供了许多性能调优的工具,重点介绍下最常用几种SM50, ST05, SAT等工具: 1.工具概况 1.1 SM50 / SM66 - 工作进程监视器 通过这两个T-code, 可以查看当前SAP AS实例上面的工作进程,当某一工作进程长时间处于running的状态时&#…

支持前端路由权限和后端接口权限的企业管理系统模版

一、技术栈 前端:iview-admin vue 后端:springboot shiro 二、基于角色的权限控制 1、路由权限 即不同角色的路由访问控制 2、菜单权限 即不同角色的菜单列表展示 3、按钮权限 即不同角色的按钮展示 4、接口权限 即不同角色的接口访问控制 三…

C++——类和对象(下)

文章目录 一、再探构造函数——初始化列表二、 类型转换三、static成员静态成员变量静态成员函数 四、 友元友元函数友元类 五、内部类六、匿名对象 一、再探构造函数——初始化列表 之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函…

16_网络IPC2-寻址

进程标识 字节序 采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将高位存放在高地址。 采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前…

QT使用QPainter绘制多边形维度图

多边形统计维度图是一种用于展示多个维度的数据的图表。它通过将各个维度表示为图表中的多边形的边,根据数据的大小和比例来确定各个维度的长度。 一、简述 本示例实现六边形战力统计维度图,一种将六个维度的战力统计以六边形图形展示的方法。六个维度是…