Python调用ffplay实现视频YUV直方图可视化报No such filter '"split'问询
问题原因
你出现报错的核心原因是subprocess列表传参时额外添加了多余的引号:
- 直接在命令行执行指令时,引号的作用是告诉shell这一整段是
-vf的参数,避免空格被当做参数分隔符,shell在传递参数给ffplay时会自动去掉这层引号 - 用Python的subprocess传列表形式参数时,每个列表元素本身就是独立的参数,不需要额外加引号,你加的双引号会被直接作为滤镜参数的一部分传给ffplay,导致滤镜语法解析失败。
解决方法
把-vf对应的参数外层的双引号去掉即可,修改后的代码如下:
import subprocess subprocess.call(['ffplay', 'video.mp4', '-vf', 'split=2[a][b],[b]histogram,format=yuva444p[hh],[a][hh]overlay'])
如果特殊场景需要保留shell解析逻辑,也可以把指令合并为字符串传参,同时设置shell=True(不推荐,存在安全风险,更建议用上面的列表无引号方案):
subprocess.call('ffplay video.mp4 -vf "split=2[a][b],[b]histogram,format=yuva444p[hh],[a][hh]overlay"', shell=True)
内容的提问来源于stack exchange,提问作者user16478428
相关产品推荐
相关产品推荐

