使用vid.stab在python中将ffmpeg的输出文件捕获到变量中

时间:2019-03-24 12:36:04

标签: python video ffmpeg image-stabilization

我正在尝试编写python脚本,以使用ffmpeg和vid.stab库稳定视频。 我的问题是输出文件似乎没有通过stdout,所以使用subprocess.Popen()返回一个空变量。

cmd1=["ffmpeg", "-i","./input.MOV", "-vf", "vidstabdetect=stepsize=6:shakiness=10:accuracy=15", "-f","null","pipe:1"]
p = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
vectors, err = p.communicate()

问题在于,vibstabdetect会使用一个名为result的过滤器,并将文件输出到在那里指定的文件,并且stdout保持为空。 (如果未指定结果,则默认为transforms.trf。)

是否可以获取结果文件的内容? 当使用上面的代码运行脚本时,脚本执行无误,但是使用默认名称创建了文件,并且变量保持为空。

1 个答案:

答案 0 :(得分:2)

您需要为过滤器日志记录数据指定stdout,而不是ffmpeg的转码输出,这就是您当前的-f null pipe:1所做的事情。

但是,与大多数其他使用内部avio_open的过滤器不同,vidstabdetect过滤器使用POSIX fopen打开转换数据的目标。对于fopen,pipe:1是不可接受的。如您所确认的,对于Windows,CON和linux,/dev/stdout是必需的。