gpt4 book ai didi

ffmpeg - 如何在流分发期间保存合成音频

转载 作者:行者123 更新时间:2023-12-04 23:09:58 32 4
gpt4 key购买 nike

我想通过 ffmpeg 流式传输麦克风音频和数字声源的组合,并将传输保存到 m3u8 文件中。
以下是我实际尝试过的命令。

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.消息出现并且不起作用。

最佳答案

-map每个输出都定义了选项,因此如果您有 2 个具有相同映射的输出,则需要单独映射(如您所料)。错误消息是 [out]流已被第一个输出占用。看看是否添加asplit到最后并为每个流生成输出流修复问题:

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
我在处理过滤器输出标签时看到了不一致的行为,所以对你得到的错误有点惊讶。 (您使用的是最新的主/从属吗?)
其他几件事:
  • -re第二个输入网址不需要。该选项保留用于模拟实时流式传输,而不用于流式传输。
  • -amix weights使用 azmq 作为当前实现的替代选项和 volume .他们做了一些稍微不同的事情,所以你可能已经考虑过了,但我想我会在这里提到它以防万一,因为它会大大缩短你的过滤器图。像这样:
  • -filter_complex "[1]azmq,[0]amix=inputs=2:weights=1|0.2,asplit[out1][out2]"

    关于ffmpeg - 如何在流分发期间保存合成音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71775653/

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