gpt4 book ai didi

ubuntu - 在 Ubuntu Docker 镜像上录制声音

转载 作者:IT老高 更新时间:2023-10-28 12:42:33 25 4
gpt4 key购买 nike

当我 capture my screen 时,我想用 ffmpeg 录制音频.我在使用 alsa 时遇到的错误是我的图像没有声卡 -f alsa -ac 2 -i hw:0

这是在新版本的 Ubuntu 上重现的方法

在新的 ubuntu docker 镜像中启动 session 。

docker pull ubuntu
docker run -it --rm ubuntu

设置 alsa(高级 Linux 声音架构)

apt-get update
apt-get install alsa-utils

列出声卡

aplay -l
# aplay: device_list:268: no soundcards found...

并且播放这个声音会失败,因为这个图像没有任何声卡

sudo aplay /usr/share/sounds/alsa/Front_Center.wav

最佳答案

编辑:在阅读 BMitch 关于不需要在本地计算机上播放的第一条评论后

我推荐使用pulseaudio,因为它的用户空间代码并且不需要内核模块。在我看来,alsa 不太可能适用于 docker(尽管我可能是错的)

如果我这样做:

apt-get update
apt-get install pulseaudio socat
apt-get install alsa-utils
apt-get install ffmpeg

# Start the pulseaudio server
pulseaudio -D --exit-idle-time=-1

# Load the virtual sink and set it as default
pacmd load-module module-virtual-sink sink_name=v1
pacmd set-default-sink v1

# set the monitor of v1 sink to be the default source
pacmd set-default-source v1.monitor

# Start the ffmpeg capture to an audio file
ffmpeg -f pulse -i default out.mp3

然后在一个单独的终端中

paplay /usr/share/sounds/alsa/Front_Center.wav

WAV文件的音频被ffmpeg捕获并出现在out.mp3中

我真的不知道你的 X 设置是什么样的,但如果你可以让音频进入 pulseaudio,那么 ffmpeg 将捕获音频而不需要真正的声卡

原答案:如果您想让音频进入 Mac OS 声卡

我最初访问此页面是因为我试图将音频从 VM 内播放到 Mac OS。但是,如果您不关心将其从 VM 中取出,那么以下内容就过于复杂了。我把它留在这里,因为这个想法是我最终来到这里的原因

可以在 VM 中使用 pulseaudio 将 WAV 文件播放到物理声卡。我在 Mac OS Sierra 上使用 docker 17.03.1-ce 并使用 brew 安装 sox。此设置还需要在 VM 上安装 socat,但我认为具有更多 pulseaduio 知识(或者如果我有更多时间)的人应该能够删除这部分

策略是使用paplay 通过pulseaudio 播放wav 文件,并让pulseaudio 通过网络在VM 启动时发布的端口上发送音频。在 Mac 端,您将连接到这个发布的端口并通过 sox 将数据发送到 Mac。

1. MAC: 使用已发布的端口拉取并运行镜像

    docker pull ubuntu
docker run -it --rm -p 127.0.0.1:3000:3000 ubuntu

<强>2。 VM: 更新并安装所需的包

    apt-get update
apt-get install pulseaudio socat
apt-get install alsa-utils

我只为 wav 文件安装 alsa-utils,所以你可以删除它

3. VM: 启动 pulseaudio 服务器

    pulseaudio -D --exit-idle-time=-1

这告诉服务器 fork 到后台而不是基于不活动退出

4. VM:为pulseaudio创建一个“接收器”

sink 是 pulseaudio 以特定格式发送音频数据的地方:

    pacmd load-module module-pipe-sink file=/dev/audio format=s16 rate=44100 channels=2

这会将音频以 44100Hz 的带符号 16 位 2 声道发送到文件/dev/audio。

5. VM: 将文件附加到网络

这个文件现在需要“附加”到网络上,socat 用于在发布的地址创建一个监听套接字(注意:这里没有身份验证),准备在 Mac 端连接时发送音频

    socat file:/dev/audio tcp-listen:3000

6. MAC:从网络读取数据到sox

在 Mac 端,我们现在需要连接到此端口并通过 sox 将详细信息发送到音频驱动程序:

    nc 127.0.0.1 3000 | sox -traw -r44100 -b16 -c2 -e signed-integer - -d

mac 默认有 netcat (nc),所以我在这里使用它来连接到发布的端口,然后将数据通过管道传输到 sox,并带有标志到 sox 以匹配上面“加载模块”语句中设置的值。

7. VM: 玩!

最后,使用pulseaudio包中的paplay可以播放WAV文件:

    paplay /usr/share/sounds/alsa/Front_Center.wav

8. MAC:听着!在 mac 端,您现在应该在这里看到音频,并且能够看到 sox 的输出,其中包括一个小电平表,这应该会移动:

    $ nc 127.0.0.1 3000 | sox -traw -r44100 -b16 -c2 -e signed-integer - -d
-: (raw)

File Size: 0
Encoding: Signed PCM
Channels: 2 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: unknown

In:0.00% 00:00:06.78 [00:00:00.00] Out:299k [ | ] Clip:0

反向操作(即将 Mac 音频发送到 VM 上的 pulseaudio)也应该可以使用类似但反向的设置(module-pipe-source?)

我没有针对 ffmpeg 页面上的命令对此进行测试,因为我没有 X 服务器。

关于ubuntu - 在 Ubuntu Docker 镜像上录制声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com