是否可以使用 ffmpeg 从 ASIO 设备捕获音频?
Posted
技术标签:
【中文标题】是否可以使用 ffmpeg 从 ASIO 设备捕获音频?【英文标题】:Is it possible to capture audio from an ASIO device with ffmpeg? 【发布时间】:2016-04-11 15:10:20 【问题描述】:我们在 Windows 7 机器上安装了 Dante Virtual Soundcard 并启动具有 ASIO 功能的声卡。声卡将通过网络从 Tesira 服务器接收音频。我们希望将音频捕获到文件中(非常喜欢每个通道而不是单独的文件)。这些文件将在稍后播放。可能会有 6 个或更多频道。
在相同的设置中,我们使用 ffmpeg 通过 Direct Show 捕捉一些运行良好的视频。所以对于音频,我们想使用相同的设置,因为 ffmpeg 也能够录制音频。但是,似乎没有选择虚拟声卡可能创建的 ASIO 设备的选项。所以问题是 ffmpeg 使用什么命令行,或者安装什么?或者还有哪个程序可以从命令行记录ASIO?
我已经尝试安装了:
Asio4all(实际上是错误的方式) sox(实际上不知道为什么) HiFi Cable Asio Bridge(来自 VB-audio,即使捐赠版本也没有足够的频道) Voicemeeter(来自 VB-Audio,没有足够的频道,实际上混音) O Deus Asio 链接,这可能是一个有趣的选项,但它没有让我配置任何路线,有什么建议吗?我注意到的一件事是虚拟声卡也可以设置为使用 WDM。然后我可以看到带有ffmpeg -list_devices true -f dshow -i duymmy
的设备,但是录制不会产生任何结果,我必须ctrl-c
让它停止而不是q
,并且文件是零字节。推测这是因为网络上的数据都是 ASIO 格式的,Tesira Server 无法发送“WDM 数据”。 FFmpeg 停止选择仅用于音频的捕获引脚
编辑:
我用高表格ran ffmpeg,选择wdm声卡时,它停止在Selecting pin Capture on audio only
。此外,在请求选项时,它会给出 22 次相同的行:min ch=1 bits=8 rate= 11025 max ch=2 bits=16 rate= 44100
【问题讨论】:
事实证明设置可能有问题,因为 ffmpeg 跟踪记录加上查看代码显示它正在等待一个数据包(一些声音),它显然没有得到 【参考方案1】:回答我自己的问题:无法使用 ffmpeg 从 ASIO 设备捕获声音。如果需要的话,也许我会为它写代码……
但是,我可以通过分离我们拥有的两个音频数据流(AVB 和 Dante)来解决我的问题。这些在同一个交换机上,可能是固件中的错误,可能是配置错误。
感谢您的帮助!
【讨论】:
【参考方案2】:您可以使用 Voicemeeter 代替 HIFI-Cable / ASIO-Bridge。 Voicemeeter 是一个虚拟音频设备混音器,能够将所有东西、任何音频点、任何接口和任何应用程序(包括 ASIO DAW)连接在一起...在 www.voicemeeter.com 上下载和用户手册
【讨论】:
谢谢,我试过这个,但它只有 2 个频道,而我需要更多(也更新了问题) 2 个频道是什么意思? Voicemeeter 可以处理 2 个物理输入设备(单声道或立体声)和一个虚拟输入(1 到 8 个通道)...... Voicemeeter Banana 版本可以管理 3 个物理设备和 2 个虚拟设备......让我知道您在用例中的限制在哪里. 我只能选择 A 和 B,我认为它们都是立体声,所以总共 4 个通道(我所有的输入都是单声道)。但如果我理解正确的话,它们都混合成一个立体声信号,我真的希望它们全部分开,以便最终用户可以混合它们。另外,我有超过 4 个信号,可能是 6 个或 8 个(尚未硬定义) Voicemeeter BUS 支持 8 个通道,但您可以使用 BANANA 版本来获得更好的控制(例如完全混合减功能)。【参考方案3】:How do I get the output from an ASIO device to IceCast2 or FFMpeg?
重复?
如果没有,请将ffmpeg -f dshow -i "audio=your_device_name_in_dshow" -list_options
的输出放置
【讨论】:
听起来确实像重复,但我认为 Edcast 是关于将音频流式传输到网络/互联网。尽管如此,我还是安装了该程序,并且确实显示了该设备。但是在执行命令行时,它会给出找不到设备的错误 此外它只允许选择一对频道,而我需要更多 那么-f show -list_options
呢?你试过了吗?
是的,我试过了,但是它说找不到设备(我使用了我在 Edcast 中得到的名称)
所以您说-list_devices
可以看到它,但是当与-list_options
一起使用时,它说找不到设备?我认为不可能如此以上是关于是否可以使用 ffmpeg 从 ASIO 设备捕获音频?的主要内容,如果未能解决你的问题,请参考以下文章
从作为分离线程运行的 boost::asio::io_service::work 捕获异常