个人感觉很实用方便,一条命令行复制粘贴回车即开始录制,随时可停止并保存当前录好的文件。(注意是停止不是暂停)

本文基于Windows 10系统,非Windows系统不适用。

非代码情况下,up不建议平时用ffmpeg录制。本文只是入门能录,并不能保证录制没问题。(如掉帧、音画不同步等)个人推荐用obs软件录制。

ffmpeg的介绍、下载安装及如何运行看下面这篇。本文就默认都至少有第一篇的基础了(最好有到第三篇第五篇的基础,up这里不讲太细,因为都是我写过的东西看了就一路手把手过来的x

 

一、只录画面,无声音!!
很简单,安装好ffmpeg,能正常运行的话,打开cmd输入以下命令行:(注意有空格!!)

ffmpeg -f gdigrab -i desktop -pix_fmt yuv420p .\out.mp4

 

 

 

按回车就开始录了,像这样最后的out.mp4在桌面。可以自行设定保存目录。这样录制默认分辨率是你系统当前使用的分辨率,默认帧率29.97,目前版本下默认视频编码格式是h264。

如下图即是开始录制成功。

 

 

 

按“Q”键或“ctrl+c”键停止并保存,如下图:

 

 

 

 

这里的“dup”,duplicate指重复帧的数量,“drop”,drop指掉帧丢弃帧数量。太多会有警告。

 

 

 

专栏有修改,这张懒得换了
我们可以加上一些参数来对录制进行一些设定。例如“-c:v h264”表示视频编码格式是h264,“-b:v 2000k”表示视频比特率设为2000k,“-s 1920*1080”表示分辨率设为1080p,“-framerate 25”是帧率为25。(至于更多参数及相关可以翻我的ffmpeg系列教程专栏食用)

强调的是,“-pix_fmt yuv420p”非常重要,一定加上!详情参考https://blog.csdn.net/chqaz123/article/details/101016853(虽然不加这个参数也能录,不影响录制过程,但会产生上面参考里的问题和本地传输文件比如发到手机上看只有灰屏的问题)(专栏有修改过,所以不必要的图片没加上这个参数的up就懒得换了且也不影响图片本身展示的结果)

命令行像下面这样:(注意空格!!)(-framerate一定要在-i前面,这里不展开讲,加上其与“-r”的异同都参考http://www.imooc.com/article/254520)

ffmpeg -f gdigrab -framerate 25 -i desktop -s 1920*1080 -pix_fmt yuv420p -c:v h264 -b:v 2000k .\out.mp4

回车开始,都同上一样。

 

这里介绍一下,gdigrab是ffmpeg内置的用于获取Windows桌面作为输入流的设备。在ffmpeg中,设备可以被视为是一种“格式”,所以可用“-f gdigrab”来调用相关设备。

 

 

二、录画面+声音,无麦克风!!
要加上录制声音,我们需要给ffmpeg“装点东西”~

在下面这个网址下载一个screen capture recorder:

https://sourceforge.net/projects/screencapturer/files

 

 

 

点击红圈内文件,稍等即开始下载。

或者在下面这个网址也行:

https://github.com/rdp/screen-capture-recorder-to-video-windows-free/releases

 

 

 

也是点击红圈内的文件就开始下载。

它的安装就英文界面没啥特殊的,走完就行

 

安装完成后我们打开cmd,输入以下命令行看dshow是否能显示相关设备:

ffmpeg -list_devices true -f dshow -i dummy

如果像下图这样显示则安装成功。

 

 

 

 

现在我们就可以开始录了。和开头一样输入“保底”的命令行如下:

ffmpeg -f gdigrab -i desktop -f dshow -rtbufsize 60M -i audio=”virtual-audio-capturer” -pix_fmt yuv420p .\out.avi

ffmpeg -f dshow -i video=”screen-capture-recorder”:audio=”virtual-audio-capturer” -pix_fmt yuv420p .\out.mp4

也是一样回车。dshow默认帧率30,其它默认值和上面第一节提的一样。音视频相关参数依实际需求及电脑配置相关环境设置。同样地,我们安装的dshow对ffmpeg也是一个设备。dshow也可以录制画面,当然我们也可以gdigrab录画面+dshow录声音。

在录制中,ffmpeg要实时采集音视频流并编码封装输出成视频。若编码封装速度不够,原来默认的缓存区容易堆满,就会出现“堆积”警告,容易导致“掉帧卡顿”。像up的i5 7200U,8g内存出现了下图这种情况:(貌似只有dshow会红字警告,虽然gdigrab不会警告但是不代表不会“卡顿”)

 

 

 

这样我们要用一个“-rtbufsize”参数自行设置缓存区大小,具体值要看电脑配置和录制需求。例如up大概举个例子:(像录视频的话建议设置更大,比如-rtbufsize 1G)

ffmpeg -f dshow -rtbufsize 160M -framerate 30 -i video=”screen-capture-recorder”:audio=”virtual-audio-capturer” -pix_fmt yuv420p -c:v h264 -c:a copy -s 1920*1080 -b:v 3000k -preset veryfast .\out.avi

专栏有修改,这张懒得换了
像下图就算是开始录制成功。

注意,用dhsow录屏的话-framerate设置似乎不能大于30。up也不建议用“-r”来设置帧率,个人觉得因为-frame是对输入设置的参数,-r是输出设置,所以可能受到输入输出之间因帧率不同而多产生出转换帧率这步的影响。并据群友OL提供的经验,用-r会有实际录制时长和录制视频的时长不对等的情况,视频像是被加速了,可能因为-r没有时间戳的限制,根据速率生成新的时间戳导致。

这里up也十分感谢群友OL提供的关于“-pix_fmt”和“-framerate”的经验情况。正因此,up才得以进一步完善本文

 

 

 

专栏有修改,这张懒得换了
如图是“-rtbufsize 160M”,即设置缓存区大小为160M。(保留观点:缓存区也不是越大越好。太大的话因为“堆积”多点也没事,ffmpeg就会把“重头戏”放在保证编码质量上,最后输出的音视频就容易“错位对不上轨”。)

现在我们有两种做法。一是调用显卡硬件来加速编码,二是复制编码或利用预设条件加快编码。up这里是第二种做法,使用“-c:a copy”直接复制音频的编码(就是pcm_s16le,包括和用-c:a aac的区别在最后补充事项里再说)还有“-preset veryfast”。“-preset”参数有“ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo”这些档位。感觉一般看情况用“ultrafast、superfast、veryfast”这三个。

当然这两个做法都会损失一定质量,个人感觉显卡不是很强的话会更损质量。调用显卡的参数例如intel集成显卡是“-c:v h264_qsv”,n卡“-c:v h264_nvenc”,a卡“-c:v h264_amf”。更多相关可以看下面这篇:

(三+1)用显卡加速视频转码压制之ffmpeg、media coder、shana encoder

点击进入查看全文>

思思陆思思18101711

 

 

三、录画面+声音+麦克风!!
首先看第二节一开始的显示测试图,找到我们的麦克风设备名:(因人而异,自己查看!)

 

 

 

 

 

这个便是up的麦克风设备名。但是中文名字乱码了…不过alternative name(另一个名字)一般都能用就行。

up的命令行如下:(这个相关参数设置也是看各人,“麦克风”改成你的麦克风设备名)

ffmpeg -f dshow -rtbufsize 40M -i audio=”virtual-audio-capturer” -f dshow -rtbufsize 40M -i audio=”麦克风” -filter_complex amix=inputs=2 -f dshow -rtbufsize 160M -framerate 25 -i video=”screen-capture-recorder” -pix_fmt yuv420p -c:v h264 -c:a pcm_s16le -s 1920*1080 -b:v 3000k -preset superfast .\out.avi

 

 

 

专栏有修改,这张懒得换了
向懂ffmpeg基础的朋友说明一下。这里的音频编码是直接用原来采集的未压缩编码格式,可以自行设置编码,但不能像之前那样直接copy,因为用了amix滤镜将两个音频输入流混成一个音频流输出。另外这里没有设置amix的输入输出流,默认就是紧接滤镜之前的输入流,因此不要变动现在输入流的顺序。

像下图就算是开始录制成功。

 

 

 

专栏有修改,这张懒得换了
这样最后声音可能会比视频画面略有“延迟”,大概零点几秒,up觉得一般还行(也许是我电脑太菜了qaq)

还可以使用多个麦克风。命令行如下:

ffmpeg -f dshow -rtbufsize 40M -i audio=”virtual-audio-capturer” -f dshow -rtbufsize 40M -i audio=”麦克风1″ -f dshow -rtbufsize 40M -i audio=”麦克风2″ -filter_complex amix=inputs=3:duration=first:dropout_transition=3 -f dshow -rtbufsize 160M -framerate 25 -i video=”screen-capture-recorder” -pix_fmt yuv420p -c:v h264 -c:a pcm_s16le -s 1920*1080 -b:v 3000k -preset superfast .\out.avi

“麦克风”改名同理。而且记得把“-filter_complex amix=inputs=3:duration=first:dropout_transition=3”数值作相应改动。比如现在的“3”就是两个麦克风加电脑自身扬声器的意思。

 

 

四、制作bat文件直接开录!!
可以做个bat文件方便各种需求的录制。首先把相应命令行粘贴到新建的记事本:

 

 

 

保存,后缀txt改为bat,可以起个描述录制需求的名字比如“只录屏无声”“录屏无麦”“一般录制”“游戏录制”……最后如下图:

 

 

 

双击运行就直接开始录制了。

 

 

五、补充事项,注意!!
还能用一些参数设置录屏的时长,区域等。例如“-video_size 960*540 -offset_x 200 -offset_y 80 -t 15”表示以屏幕最左上角为原点(0,0),以点(200,80)为起点框选录制的区域大小及设置分辨率为960*540,录制时长为15秒。当然“-video_size”也可用crop或scale滤镜来代替操作。

开始录制后几秒不要太急着操作!!

 

 

另外,可以用“ffmpeg -devices”查看ffmpeg支持哪些设备(up的例子)

 

 

(保留观点:gdigrab的抓屏效果比dshow差,可能容易出现“掉帧”。另外可能有时录好的视频里开头几秒会存在没有鼠标光标的显示。不过这些一般都还好,没啥影响。up不建议用gdigrab录屏,能用的话还是用dshow)

 

up觉得录制声音还是用“-c:a pcm_s16le”最佳,这样最后声音可能会比视频画面略有延后,大概零点几秒。过来是“-c:a copy”。至于“-c:a aac”,录出来的画面比声音延后较多。录制之后再用“-map”选定音轨压制一下就好。

 

最后,up传了几个录屏参考的模板bat文件在云盘,供大家学习研究啦:https://lusisi.lanzous.com/b015i2qzi 密码:84r3

更多录屏相关可前往ffmpeg官方wiki查看:https://trac.ffmpeg.org/wiki/Capture/Capture/Desktop%E4%B8%AD%E6%96%87%E7%89%88%E6%9C%AC

#############################

电脑录屏+麦克风—自测通过

ffmpeg -f dshow -i audio=”麦克风 (Realtek(R) Audio)” -f gdigrab -i desktop  -vcodec libx264 -r 60.97 -b:v 1500K -codec:a aac -ac 2 -ar 44100  -pix_fmt yuv420p -tune zerolatency -preset ultrafast .\out.mp4 

#############################

转自:https://www.bilibili.com/read/cv4968526/
出处: bilibili