ffmpeg拼接音频时用aevalsrc生成静音报Invalid stream specifier错误
问题原因解答
1. [silence]无法匹配流的原因
FFmpeg 滤镜图中的每个流标签仅可被消费一次。你通过aevalsrc=0:d=500ms[silence]生成的是单条独立的静音音频流,在拼接序列中第一次引用[silence]后,该流就已经被完全消耗,第二次再引用[silence]时不存在可匹配的流,因此触发报错。
网上的示例可以正常运行,大概率是示例中仅需插入一次静音,仅引用一次[silence]标签,不会触发重复消费的问题。
2. 拆分静音标签是必须操作吗
是的,拆分是必须的。你需要在3段音频的2个间隙各插入一段静音,必须生成2个独立的静音流实例,分别对应不同的标签,不可复用同一个流标签。
优化后的可运行命令参考
除了拆分静音流,你提供的输入音频采样率、格式不统一,建议增加aformat滤镜统一音频参数,避免concat滤镜出现兼容性问题:
ffmpeg -y -i a.mp3 -i b.mp3 -i c.wav \ -filter_complex " aevalsrc=0:d=500ms[s1]; aevalsrc=0:d=500ms[s2]; [0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=mono[0a]; [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=mono[1a]; [2:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=mono[2a]; [0a][s1][1a][s2][2a]concat=n=5:v=0:a=1[out] " \ -aq 5 -acodec libmp3lame -map "[out]" out.mp3
内容的提问来源于stack exchange,提问作者Mickel
相关产品推荐
相关产品推荐

