• 【原创】FFMPEG录屏入门指南


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

    1. 下载ffmpeg

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

    • 也可以直接点击 https://www.gyan.dev/ffmpeg/builds/ ,在点击ffmpeg-git-full.7z,即可下载:

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

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

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

      我把它放在了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。它除了支持基本的录屏参数配置之外,还可以录制光标和键盘输入,特别适合录制视频教程。

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

  • 相关阅读:
    神经网络是参数模型吗,神经网络参数量计算
    OpenMMLab-AI实战营第二期-课程笔记-Class 4:深度学习预训练与MMPretrain
    Windows10专业版系统安装Hyper-V虚拟机软件
    Redis代替session 实现登录流程
    全网最全系统MySQL5.7.17安装教程配置(配详细的图文解释)
    Spring Boot 整合 MyBatis
    软件设计模式
    【动手学深度学习PyTorch版】18 使用块的网络 VGG
    汇编精讲02
    加锁和解锁-ReentrantLock详解-AQS-并发编程(Java)
  • 原文地址:https://www.cnblogs.com/qfsz168/p/16710193.html