Dan*_*son 15 audio ubuntu ffmpeg docker
ffmpeg当我捕捉屏幕时,我想录制音频.我在使用时遇到的错误alsa是我的图像没有声卡-f alsa -ac 2 -i hw:0
以下是如何在新版本的Ubuntu上重现
在新的ubuntu docker镜像中启动会话.
docker pull ubuntu
docker run -it --rm ubuntu
Run Code Online (Sandbox Code Playgroud)
安装alsa(高级Linux声音架构)
apt-get update
apt-get install alsa-utils
Run Code Online (Sandbox Code Playgroud)
列出声卡
aplay -l
# aplay: device_list:268: no soundcards found...
Run Code Online (Sandbox Code Playgroud)
播放此声音将失败,因为此图像没有任何声卡
sudo aplay /usr/share/sounds/alsa/Front_Center.wav
Run Code Online (Sandbox Code Playgroud)
spa*_*kle 15
编辑:在阅读第一条关于不需要播放到本地计算机的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
Run Code Online (Sandbox Code Playgroud)
然后在一个单独的终端
paplay /usr/share/sounds/alsa/Front_Center.wav
Run Code Online (Sandbox Code Playgroud)
WAV文件的音频由ffmpeg捕获并出现在out.mp3中
我真的不知道你的X设置是什么样的,但是如果你可以将音频转到pulseaudio,那么ffmpeg将捕获音频而不需要真正的声卡
原文答案:如果你想让音频进入Mac OS声卡
我最初到了这个页面,因为我试图从VM内部播放音频到Mac OS.但是如果你不关心从虚拟机中获取它,那么以下内容过于复杂.我把它留在这里虽然这个想法是为什么我最终来到这里
可以在VM内使用pulseaudio将WAV文件播放到物理声卡.我在Mac OS Sierra上使用docker 17.03.1-ce并使用brew来安装sox.这个设置还需要在VM上安装socat,但是具有更多脉冲知识(或者如果我有更多时间)的人应该能够删除这个部分,我认为
策略是使用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
Run Code Online (Sandbox Code Playgroud)
2. VM:更新并安装require软件包
apt-get update
apt-get install pulseaudio socat
apt-get install alsa-utils
Run Code Online (Sandbox Code Playgroud)
我只为wav文件安装alsa-utils,所以你可以删除它
3. VM:启动pulseaudio服务器
pulseaudio -D --exit-idle-time=-1
Run Code Online (Sandbox Code Playgroud)
这告诉服务器分叉到后台,而不是基于不活动退出
4. VM:为pulseaudio创建一个"接收器"
接收器是pulseaudio以特定格式发送音频数据的地方:
pacmd load-module module-pipe-sink file=/dev/audio format=s16 rate=44100 channels=2
Run Code Online (Sandbox Code Playgroud)
这将以44100Hz的速率将音频发送到带符号的16位双通道文件/ dev/audio.
5. VM:将文件附加到网络
此文件现在需要"附加"到网络,socat用于在发布的地址创建一个侦听套接字(注意:此处没有身份验证),当Mac端连接时,该套接字已准备好发送音频
socat file:/dev/audio tcp-listen:3000
Run Code Online (Sandbox Code Playgroud)
6. MAC:从网络读取数据到sox
在Mac端,我们现在需要连接到此端口并通过sox将详细信息发送到音频驱动程序:
nc 127.0.0.1 3000 | sox -traw -r44100 -b16 -c2 -e signed-integer - -d
Run Code Online (Sandbox Code Playgroud)
默认情况下,mac使用netcat(nc),所以我在这里使用它连接到已发布的端口,然后将数据传递给sox,使用sox标志来匹配上面"load-module"语句中设置的值.
7. VM:玩!
最后,使用pulseaudio包中的paplay可以播放WAV文件:
paplay /usr/share/sounds/alsa/Front_Center.wav
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
反向操作(即将VM音频发送到VM上的pulseaudio)也应该可以使用类似的,但是向后设置(模块管道源?)
我没有对ffmpeg页面上的命令进行测试,因为我没有X服务器.
| 归档时间: |
|
| 查看次数: |
3659 次 |
| 最近记录: |