我想通过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.消息会出现,但无法工作。
发布于 2022-04-07 13:41:28
每个输出都定义了-map选项,因此,如果有两个输出具有相同的映射,则需要单独映射(正如您所猜测的那样)。错误消息是[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在处理过滤器输出标签时,我已经看到了不一致的行为,所以对您所收到的错误感到有点惊讶。(您正在使用最新的主/发行版吗?)
还有几件事:
第二个输入url不应该需要
-re。该选项保留给模拟的实时流,不用于streaming.-amix weights选项,以替代当前使用azmq和volume的实现。他们会做一些稍微不同的事情,所以你可能已经考虑过了,但我想我在这里提一下,以防万一它会把你的过滤图缩短一些。就像这样:-filter_complex "[1]azmq,[0]amix=inputs=2:weights=1|0.2,asplit[out1][out2]"https://stackoverflow.com/questions/71775653
复制相似问题