配置文件单参数为空时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逻辑,改成动态追加参数:不管是单个参数有效还是两个都有效/无效,都会正确生成对应的命令 - 输出文件放在最后统一添加,保证命令结构的正确性
现在测试你提到的几种场景:
- 当
codesplit为空、codec=copy时,生成的命令是:['ffmpeg.exe', '-i', 'video.avi', 'copy', 'videoaudio.mp4'] - 当
codec为空、codesplit=-vn时,生成的命令是:['ffmpeg.exe', '-i', 'video.avi', '-vn', 'audio.mp3'] - 两个参数都为空或都有值的情况,也能保持原来的正确输出
备注:内容来源于stack exchange,提问作者Oussama Gamer
相关产品推荐
相关产品推荐

