看完本篇文章,可以解决使用ffmpeg录屏时需要的screen capture recorder软件过大问题
在windows下使用ffmpeg 的-gdigrab方法录屏是没有声音的!
ffmpeg -f gdigrab -i desktop test.mp4
解决办法就是注册dshow软件 Screen Capturer Recorder的虚拟音频捕捉设备(virtual-audio-capturer)获取音频。现在网上大多数的教程都是直接从
https://sourceforge.net/projects/screencapturer/files/ 下载安装Screen Capturer Recorder 然后用:
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" test.mp4
或
ffmpeg -f gdigrab -i desktop -f dshow -i audio="virtual-audio-capturer" test.mp4
录屏;虽然这种方法可用,但为了录个音还要再去安装一个48M的软件?
显然太麻烦了(当然我之前也是这么做的hhh),尤其是做要打包分发的项目时。
我们分析一下上面的录屏代码,发现我们需要的只是virtual-audio-capturer(捕获音频的虚拟设备)而已,有没有办法可以直接获得这个dshow设备呢?
再看一下安装 Screen Capturer Recorder的安装目录
virtual-audio(文件夹名称)?screen-capture-recorder.dll?这不正是我们需要的dshow设备名称嘛,再看一下GitHub上的项目,里面也标明了如果需要的较小体积可以直接注册dll。
现在我们知道了可以通过注册这两个dll(分了64和32位版本所以有4个)获得相应的dshow设备。
其实,screen capture recorder软件那么大是因为它本身就是一个录屏软件,自带了ffmpeg,当然大了,而我们只需要它的virtual-audio-capturer的功能,所以直接注册dll即可!实际使用中,笔者发现GitHub上的那个dll是不能使用的…不知道为什么,所以以下教程是直接从安装的Screen Capturer Recorder软件中提取dll并注册。
安装Screen Capturer Recorder(那个48M的软件)后,
我们先测试一下ffmpeg中是否可以读取到screen-capture-recorder和virtual-audio-capturer
ffmpeg -list_devices true -f dshow -i dummy
然后我们把上面提到的那俩个dll复制出来放好,注意要拿和你的ffmpeg位数相同的dll(我用的ffmpeg是64位的所以复制了带有x64的)。
然后安装的screen capture recorder软件就可以卸载了
现在我们再看一下有没有dshow软件
显然已经没有了(说明已经卸载完了)
接着我们就要把刚才复制出来的两个dll注册到系统中让ffmpeg识别出来
这个就当作普通dll的注册方法:
注册dll一般是在dll目录下打开有管理员权限的命令行,直接输入regsvr32+xxx.dll注册,注意一定要是管理员权限,dll可以放在任何文件夹
例如:
我的dll在E盘根目录下(实际使用可以放在项目目录)
然后打开管理员命令行:右键左下角win图标-windows powershell(管理员)
cd 到dll所在目录下(我的是E: \)
输入注册dll命令:regsvr32 audio_sniffer-x64.dll 注册virtual-audio-capturer dshow滤镜,下图这样就是注册成功了
然后看一下ffmpeg是否能够读取到dll
ffmpeg -list_devices true -f dshow -i dummy
可以看到virtual-audio-capturer 滤镜已经注册到系统了,再用:
ffmpeg -f gdigrab -i desktop -f dshow -i audio="virtual-audio-capturer" test.mp4
测试一下录屏是否能录到系统的声音了(麦克风的声音要把virtual-audio-capturer改成麦克风设备)
同样道理,如果想用screen capture recorder的虚拟显示捕获设备,也可以注册screen-capture-recorde.dll也注册了,这里不再累赘。与直接安装screen capture recorder软件相比,dll的注册只占了几十k的空间,美滋滋~
想要卸载dll可以用:regsvr32 /u audio_sniffer-x64.dll 命令
注意一定要用管理员权限的命令行!!!
下载地址:有32位和64位https://download.csdn.net/download/Fandes_F/12273068
就不用再去下载那个48M的exe文件了(我还能混点积分hhh)
总结:ffmpeg录屏中直接注册audio_sniffer.dll可以获得"virtual-audio-capturer" dshow滤镜用以录系统声音;注册screen-capture-recorder.dll可以获得"screen-capture-recorder" dshow滤镜录屏
菜鸟的经验分享,大佬轻喷。。。。
参考: screen-capture-recorder和virtual-audio-capture的官方说明
https://github.com/rdp/screen-capture-recorder-to-video-windows-free
https://github.com/rdp/virtual-audio-capture-grabber-device