【问题标题】:How to redirect an audio stream to a virtual pulseaudio microphone with ffmpeg?如何使用 ffmpeg 将音频流重定向到虚拟脉冲音频麦克风?
【发布时间】:2020-09-11 09:47:11
【问题描述】:
如何用 ffmpeg 创建一个虚拟的 pulseaudio 麦克风?
我有一个mkv 文件,使用 v4l2 我可以将视频流重定向到虚拟网络摄像头设备,这里是/dev/video0。
ffmpeg -i myfile.mkv -f v4l2 /dev/video0
现在,同时我想将音频流重定向到虚拟脉冲音频麦克风(而不是输出设备)。我怎样才能做到这一点?
【问题讨论】:
标签:
audio
video
ffmpeg
audio-recording
pulseaudio
【解决方案1】:
创建一个虚拟输出设备,并从它的监视器创建一个虚拟源。
pactl load-module module-null-sink sink_name="virtual_speaker" sink_properties=device.description="virtual_speaker"
pactl load-module module-remap-source master="virtual_speaker.monitor" source_name="virtual_mic" source_properties=device.description="virtual_mic"
播放到“virtual_speaker”的任何声音都将发送到“virtual_mic”。
您可以使用 -f pulse 直接从 ffmpeg 播放声音,但将其与 -re(您希望将视频播放到虚拟网络摄像头)一起使用似乎会给音频增加几秒钟的延迟...
在我的测试中,这也导致视频输出滞后(仍然显示它以 1x 运行)。我能够获得流畅的音频和视频的唯一方法是并行运行两个 ffmpeg 实例......这不是一个很好的解决方案。
ffmpeg -nostdin -re -i myfile.mkv -f v4l2 /dev/video0 &
PULSE_SINK=virtual_speaker ffmpeg -i myfile.mkv -f pulse "stream name"
kill $!
-
需要
-nostdin 才能在后台运行。
-
PULSE_SINK=virtual_speaker 可用于任何音频播放器。
-
"stream name" 只是音频流将获得的显示名称。
-
如果音频编码器退出,
kill $! 将终止视频编码器。