Python中如何隐藏subprocess调用FFmpeg的输出并存入变量
为什么FFmpeg会在终端打印输出
subprocess.check_output默认仅捕获命令的标准输出(stdout)流,未被捕获的流会直接输出到当前终端。- 你测试的
echo命令所有输出都走stdout流,因此会被完整存入变量,不会在终端显示。 - FFmpeg的媒体信息、转码进度、运行日志默认全部写入标准错误(stderr)流,你的原有代码没有对stderr做重定向捕获,这部分内容就直接打印到终端了。
隐藏输出并存入变量的实现方法
如果需要把FFmpeg的全部输出捕获到变量用于后续正则匹配,只需要在调用时指定将stderr重定向到stdout,和标准输出一起被捕获即可,参考代码:
import subprocess output = subprocess.check_output( "ffmpeg -i audio.mp3 -f null -", shell=True, stderr=subprocess.STDOUT )
执行后FFmpeg的所有输出都会存入output变量(默认是字节类型,使用前可以根据需要用.decode('utf-8')转成字符串),不会在终端打印任何内容。
可选优化:如果你不需要FFmpeg输出全量日志,可以在FFmpeg命令里加日志级别参数过滤无关内容,比如加上-loglevel error就只会输出错误级别的信息,减少后续正则匹配的干扰。
内容的提问来源于stack exchange,提问作者Dev01
相关产品推荐
相关产品推荐

