You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python subprocess调用ffmpeg拼接音频片段时报错如何解决

问题根源

你出现报错的核心原因是subprocess.run的传参规则用错了:
当你给subprocess.run传入列表形式的参数时,每个列表元素对应终端执行时的一个独立参数,不需要手动加引号(终端里的引号是用来标记带空格的内容是单个参数的,列表形式传参已经天然实现了这个效果,你额外加的引号会被当成参数内容的一部分传给ffmpeg,导致识别失败)。同时你把-af对应的完整过滤器参数拆成了多个列表元素,相当于给ffmpeg传入了多个无法识别的无效参数。

修正后的代码

import subprocess
input_url = 'input.mp3'
output_file = 'out.wav'
clips = [[4, 6], [70,80]] # 片段起止时间,单位秒
clip_parts = []
for start, end in clips:
    temp_part = f"between(t, {start}, {end})"
    clip_parts.append(temp_part)
# 构造完整的音频过滤器参数,作为单个字符串
audio_filter = f"aselect='{'+'.join(clip_parts)}', asetpts=N/SR/TB"
subprocess.run([
    "ffmpeg",
    "-i",
    input_url,
    "-af",
    audio_filter,
    output_file
])

修改说明

  • 把-af对应的完整过滤器表达式作为单个字符串传入参数列表,不需要额外添加外层引号,subprocess会自动处理转义
  • 去掉了无效的clip_parts is None判断(你初始化时已经给clip_parts赋值为空列表,这个判断永远不会触发)
  • 用f-string简化了时间片段的字符串拼接逻辑,可读性更高

内容的提问来源于stack exchange,提问作者Suraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:15:05