ffmpeg单命令实现播客音频多步处理及流匹配报错解决
错误原因
- 你混用了
-af(简单音频滤镜)和-filter_complex(复杂滤镜)两类独立的滤镜体系:-af下定义的自定义流标签(比如[call]、[response])仅在简单滤镜链路生效,无法被复杂滤镜识别引用,所以才会提示找不到对应流。 - 多个
-af参数并不会串行执行,ffmpeg只会使用最后一个-af的配置,你写的多段处理逻辑本来就不会按预期执行。
正确单命令写法
把所有音频处理逻辑全部整合到同一个-filter_complex里即可:
原生ffmpeg命令
ffmpeg -i intro.mp3 -i call.mp3 -i interstitial.mp3 -i response.mp3 -i outro.mp3 \ -filter_complex "[1:a]silenceremove=1:0:-50dB,silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-50dB,loudnorm=I=-16:LRA=11:TP=0.0[call]; \ [3:a]silenceremove=1:0:-50dB,silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-50dB,loudnorm=I=-16:LRA=11:TP=0.0[response]; \ [0:a][call]acrossfade=d=1:c2=nofade[a01]; \ [a01][2:a]acrossfade=d=1:c1=nofade[a02]; \ [a02][response]acrossfade=d=1:c2=nofade[a03]; \ [a03][4:a]acrossfade=d=1:c1=nofade" \ output.mp3
同个流的多个滤镜直接用逗号分隔就可以串起来执行,不需要拆分多个节点,写法更简洁。
@ffmpeg/ffmpeg 调用代码
await ffmpeg.run( '-i', 'intro.mp3', '-i', 'call.mp3', '-i', 'interstitial.mp3', '-i', 'response.mp3', '-i', 'outro.mp3', '-filter_complex', ` [1:a]silenceremove=1:0:-50dB,silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-50dB,loudnorm=I=-16:LRA=11:TP=0.0[call]; [3:a]silenceremove=1:0:-50dB,silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-50dB,loudnorm=I=-16:LRA=11:TP=0.0[response]; [0:a][call]acrossfade=d=1:c2=nofade[a01]; [a01][2:a]acrossfade=d=1:c1=nofade[a02]; [a02][response]acrossfade=d=1:c2=nofade[a03]; [a03][4:a]acrossfade=d=1:c1=nofade `, 'output.mp3', )
内容的提问来源于stack exchange,提问作者kentcdodds
相关产品推荐
相关产品推荐

