我正在尝试编写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。)
是否可以获取结果文件的内容? 当使用上面的代码运行脚本时,脚本执行无误,但是使用默认名称创建了文件,并且变量保持为空。
答案 0 :(得分:2)
您需要为过滤器日志记录数据指定stdout,而不是ffmpeg的转码输出,这就是您当前的-f null pipe:1
所做的事情。
但是,与大多数其他使用内部avio_open的过滤器不同,vidstabdetect过滤器使用POSIX fopen打开转换数据的目标。对于fopen,pipe:1
是不可接受的。如您所确认的,对于Windows,CON
和linux,/dev/stdout
是必需的。