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

Python调用ffmpeg失败:subprocess/os.system无法执行视频处理任务

问题分析与解决步骤

你的代码存在几处关键错误,导致ffmpeg执行失败(返回值1通常表示命令语法错误或执行异常),以下是具体问题和修复方案:

1. 第二个subprocess调用的参数错误

你在第二个ffmpeg调用中,把变量拼接写在了字符串字面量里:

"'FR' + str(c) + '.mp4'"

这会被当作字面文件名,而不是动态生成的FR0.mp4/FR1.mp4等,ffmpeg找不到这个文件,自然报错。正确写法是直接生成变量:

f'FR{c}.mp4'  # 或者 'FR' + str(c) + '.mp4'

2. 循环范围错误

range(0, len(b)-1)会直接跳过文本文件的最后一行,应该改用enumerate遍历每行,既获取索引又避免漏行:

for c, line in enumerate(b):

3. 未处理文本行的换行符与多余空格

readlines()读取的每行末尾会带有\n换行符,直接split会导致空字符串元素,需要先strip处理:

line = line.strip()
if not line:  # 跳过空行
    continue
words = line.split(" ")

4. 原ffmpeg命令的语法错误

文本文件中的-a copy是错误参数,ffmpeg中音频流复制的正确参数是-c:a copy或-acodec copy,原命令本身就无法执行,这也是返回值1的原因之一。

5. 未捕获ffmpeg的错误输出

建议改用subprocess.run并捕获stderr,方便排查具体错误:

result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode != 0:
    print(f"命令执行失败: {result.stderr}")

修复后的完整代码

import subprocess
import os

os.chdir('/home/Downloads/SRs/')

with open('SRt.txt', 'r') as a:
    lines = a.readlines()

for c, line in enumerate(lines):
    line = line.strip()
    if not line:
        continue
    
    # 替换输出文件为临时文件FRx.mp4
    words = line.split(" ")
    original_output = words[-1]
    temp_output = f'FR{c}.mp4'
    crop_cmd = line.replace(original_output, temp_output)
    
    # 执行裁剪命令
    print(f"执行裁剪命令: {crop_cmd}")
    crop_result = subprocess.run(crop_cmd, shell=True, capture_output=True, text=True)
    if crop_result.returncode != 0:
        print(f"裁剪失败,错误信息: {crop_result.stderr}")
        continue
    
    # 执行缩放命令
    scale_cmd = [
        'ffmpeg',
        '-i', temp_output,
        '-vf', 'scale=320:240',
        original_output
    ]
    print(f"执行缩放命令: {' '.join(scale_cmd)}")
    scale_result = subprocess.run(scale_cmd, capture_output=True, text=True)
    if scale_result.returncode != 0:
        print(f"缩放失败,错误信息: {scale_result.stderr}")
    else:
        # 缩放成功后删除临时文件
        os.remove(temp_output)

额外注意事项

  • 确保/home/Downloads/SRs/目录存在且有读写权限
  • 确保系统已正确安装ffmpeg,且在PATH环境变量中
  • 大数量文件处理时,可以考虑添加进度提示,避免无响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:10:20