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

配置文件单参数为空时FFmpeg命令生成异常的解决需求

配置文件单参数为空时FFmpeg命令生成异常的解决需求

我明白你的问题啦:当配置文件里codesplit和codec两个参数同时为空或者同时有值时,生成的FFmpeg命令是正常的,但只要其中一个为空、另一个有值,命令就会漏掉那个有值的参数,没法达到你想要的效果。

问题出在你原来的判断逻辑上:if codesplit and codec这个条件只有两个参数都存在时才会把它们加入命令,否则直接只生成基础的命令结构,这就导致单个参数存在时被直接忽略了。

咱们换个思路,动态构建命令列表就可以解决这个问题:先初始化必有的命令部分,然后逐个检查可选参数,只要参数有效(非空)就把它加到命令里,最后再加上输出文件。

修改后的完整代码如下:

import subprocess
import configparser

config = configparser.ConfigParser(allow_no_value=True)
config.read(r"Settings.ini")
videofile = config.get("settings", "videofile")
outputfile = config.get("settings", "outputfile")
# 用strip()处理,避免配置里的空字符串或纯空格被误判为有效参数
codesplit = config.get("settings", "codesplit", fallback="").strip()
codec = config.get("settings", "codec", fallback="").strip()

ffmpeg_path = r"ffmpeg.exe"

# 先构建基础的必选命令部分
command = [
    ffmpeg_path,
    "-i",
    videofile
]

# 逐个检查可选参数,有效就加入命令
if codesplit:
    command.append(codesplit)
if codec:
    command.append(codec)

# 最后添加输出文件
command.append(outputfile)

process = subprocess.Popen(
    command,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True,
    bufsize=1,
    universal_newlines=True,
)
process.communicate()

print(command)

关键修改说明:

  • 对codesplit和codec的取值做了strip()处理,这样配置里的空字符串或者纯空格都会被判定为无效参数,避免误加
  • 抛弃了原来非黑即白的if-else逻辑,改成动态追加参数:不管是单个参数有效还是两个都有效/无效,都会正确生成对应的命令
  • 输出文件放在最后统一添加,保证命令结构的正确性

现在测试你提到的几种场景:

  1. 当codesplit为空、codec=copy时,生成的命令是:['ffmpeg.exe', '-i', 'video.avi', 'copy', 'videoaudio.mp4']
  2. 当codec为空、codesplit=-vn时,生成的命令是:['ffmpeg.exe', '-i', 'video.avi', '-vn', 'audio.mp3']
  3. 两个参数都为空或都有值的情况,也能保持原来的正确输出

备注:内容来源于stack exchange,提问作者Oussama Gamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:28:10