ffmpeg中使用screen capture recorder录音的问题

看完本篇文章,可以解决使用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提取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:

接着我们就要把刚才复制出来的两个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 命令

注意一定要用管理员权限的命令行!!!

文中提到的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

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
C#使用 ffmpeg 开发录制视频工具,可以通过调用 ffmpeg 的命令行参数实现。在 Unity 使用时,可以将 ffmpeg 的可执行文件放到 Unity 项目的 Assets 文件夹下,并在代码调用命令行参数来实现录制视频的功能。 以下是一个简单的示例代码: ```csharp using System.Diagnostics; public class VideoRecorder : MonoBehaviour { private Process process; private string ffmpegPath = Application.dataPath + "/ffmpeg.exe"; private string videoName = "output.mp4"; public void StartRecording() { if (!File.Exists(ffmpegPath)) { Debug.LogError("ffmpeg.exe not found!"); return; } string arguments = "-f dshow -i video=\"screen-capture-recorder\" -r 60 \"" + videoName + "\""; ProcessStartInfo processInfo = new ProcessStartInfo(ffmpegPath, arguments); processInfo.CreateNoWindow = true; processInfo.UseShellExecute = false; process = Process.Start(processInfo); } public void StopRecording() { if (process != null && !process.HasExited) { process.Kill(); process = null; } } } ``` 在上述代码,StartRecording() 方法启动了一个新的进程,调用 ffmpeg 的命令行参数进行视频录制,StopRecording() 方法则停止了该进程,结束录制。其,参数 "-f dshow -i video=\"screen-capture-recorder\" -r 60" 表示使用 DirectShow API 捕获屏幕视频,并以 60 帧的速度进行录制。 请注意,上述代码仅适用于 Windows 系统下的 ffmpeg 可执行文件,如果使用其他系统或版本的 ffmpeg,需要相应地修改命令行参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fandes_F

饿饿~饭饭~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值