首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在流媒体分发过程中保存合成音频

如何在流媒体分发过程中保存合成音频
EN

Stack Overflow用户
提问于 2022-04-07 02:28:02
回答 1查看 50关注 0票数 0

我想通过ffmpeg流一个麦克风,音频和数字声源的组合,并保存到一个m3u8文件。

下面是我实际尝试过的命令。

代码语言:javascript
复制
ffmpeg -rtbufsize 100M -f dshow -i video=<my webcam>:audio=<my microphone> -re -stream_loop -1 -i <my sound source> -filter_complex "[0]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,adelay=2100|2100,volume@voice=volume=10dB[voice],[1]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,azmq,volume@bgm=volume=0.2[bgm],[voice][bgm]amerge=inputs=2[out]" -map 0:v -map [out]:a -f mpegts -flush_packets 0 udp://XXX.XXX.XXX.XXX:XXX?pkt_size=1316 -f hls -hls_time 5 hls.m3u8

我用这种方式演奏了一个m3u8,但是我听不到我应该合成的数字声源。即使合成的音频是可听到的,当流。

在保存到-map 0:v -map [out]:a文件时,您可能需要设置类似m3u8的东西,在这种情况下,Output with label 'out' does not exist in any defined filter graph, or was already used elsewhere.消息会出现,但无法工作。

EN

回答 1

Stack Overflow用户

发布于 2022-04-07 13:41:28

每个输出都定义了-map选项,因此,如果有两个输出具有相同的映射,则需要单独映射(正如您所猜测的那样)。错误消息是[out]流已经被第一个输出所接受。查看是否将asplit添加到末尾,并为每个流生成输出流,从而解决以下问题:

代码语言:javascript
复制
ffmpeg -rtbufsize 100M -f dshow -i video=<my cam>:audio=<my mic> \
       -stream_loop -1 -i <my sound> \
       -filter_complex "[0]volume@voice=volume=20dB[voice],[1]azmq,volume@bgm=volume=0.2[bgm]; \
                        [voice][bgm]amix=inputs=2,asplit[out1][out2]" \
       -map 0:v -map [out1] -f mpegts -flush_packets 0 udp://192.168.117.39:1234?pkt_size=1316 \
       -map 0:v -map [out2] -f hls -hls_time 5 hls.m3u8

在处理过滤器输出标签时,我已经看到了不一致的行为,所以对您所收到的错误感到有点惊讶。(您正在使用最新的主/发行版吗?)

还有几件事:

第二个输入url不应该需要

  1. -re。该选项保留给模拟的实时流,不用于streaming.
  2. -amix weights选项,以替代当前使用azmqvolume的实现。他们会做一些稍微不同的事情,所以你可能已经考虑过了,但我想我在这里提一下,以防万一它会把你的过滤图缩短一些。就像这样:

代码语言:javascript
复制
-filter_complex "[1]azmq,[0]amix=inputs=2:weights=1|0.2,asplit[out1][out2]"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71775653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档