Python调用subprocess.check_output执行ffprobe报TypeError错误如何解决
错误原因
- 核心报错根源为
'-i' % inputfile的写法错误:Python中%为字符串格式化运算符,要求左侧字符串必须包含对应数量的格式化占位符(例如字符串类型对应%s),但此处左侧字符串'-i'无任何占位符,无法完成格式化逻辑,因此抛出TypeError: not all arguments converted during string formatting。 - 附加的参数规则问题:
subprocess.check_output传入参数列表时,命令的每个独立参数都要作为列表的单独元素存在,-i和输入文件路径是ffprobe的两个独立参数,不能合并处理。
修复后的可运行代码
import subprocess # inputfile为你的视频文件路径变量 lengthofvideo = subprocess.check_output([ 'ffprobe', '-i', inputfile, '-show_entries', 'format=duration', '-v', 'quiet', '-of', 'csv=p=0' ]) # 若需将结果转为数值可添加以下处理:check_output默认返回bytes类型,需先解码 duration = float(lengthofvideo.decode('utf-8').strip())
补充说明
- 原写法中
csv="p=0"的多余引号可以删除:使用参数列表传参时不会经过shell解析,无需额外加引号处理转义,直接写csv=p=0即可正常识别。
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

