You need to enable JavaScript to run this app. 如何将ffmpeg命令适配为ffmpy可用格式以批量提取音频片段
优惠活动
大模型
产品
解决方案
定价
更多

如何将ffmpeg命令适配为ffmpy可用格式以批量提取音频片段

ffmpy执行报错FFRuntime Exited With Status Code 1解决方案

核心问题成因

你遇到的报错核心是ffmpy的使用方式错误:

  • 不要手动拼接字符串覆盖ff.cmd属性,ffmpy执行命令时默认不走系统shell,你手动加的路径引号会被当成路径的一部分,导致ffmpeg找不到输入/输出文件,这就是同样的命令在终端能跑、代码跑不了的根本原因
  • 初始化FFmpeg对象时传入的inputs、outputs参数完全未生效,属于冗余代码

正确实现代码

首先按照ffmpy的规范传参,同时可以用os.path处理路径避免跨平台问题:

import os
from ffmpy import FFmpeg

# 你的csv读取逻辑保留
for line in reader:
    print(line)
    # 拆分路径用os.path更稳妥,兼容不同系统的路径分隔符
    path_parts = os.path.normpath(line[1]).split(os.sep)
    folder_name = path_parts[-2]
    file_name = path_parts[-1]
    file_stem = os.path.splitext(file_name)[0]

    audio_file_path = os.path.join("./audio_files", folder_name, f"{file_stem}.mp3")
    output_path = os.path.join("./audio_files", folder_name, f"{file_stem}_cut.mp3")
    start_time = line[2]
    end_time = line[3]

    # 按ffmpy规范传参,-ss放在输入参数位,实现快速跳转
    ff = FFmpeg(
        inputs={audio_file_path: f"-ss {start_time}"},
        outputs={output_path: f"-to {end_time} -c copy -async 1 -y"}
    )
    # 打印生成的命令确认是否正确
    print(ff.cmd)
    # 执行时加参数打印ffmpeg的输出和报错,方便后续排查问题
    ff.run(print_stdout=True, print_stderr=True)

补充说明

  • 输出参数加了-y,会自动覆盖已存在的输出文件,避免ffmpeg等待用户输入确认导致卡住
  • -ss放在输入参数前,ffmpeg会直接跳转到起始时间点再解码,比放在-i后快很多
  • 如果需要保留原始的转码逻辑,去掉-c copy即可,-c copy是流复制模式,剪辑速度极快但要求起始时间点落在关键帧上,如果你剪辑出来的片段开头有异常,去掉这个参数就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:27:03