使用os.popen3()提取python中视频的缩略图

使用os.popen3()提取python中视频的缩略图,python,python-2.7,video,ffmpeg,popen,Python,Python 2.7,Video,Ffmpeg,Popen,我正在使用ffmpeg从视频中提取帧。当我从命令行使用ffmpeg时,这很好,但是,当我尝试使用python执行相同的操作时: os.popen3('ffmpeg -i videoPath -an -ss 00:00:02 -an -r 1 -vframes 1 -y picturePath') 我不知道如何获得提取的图像。到目前为止,我只收到一条文字(ffmpeg版本N-62039-gc00f368版权所有(c)2000…),这是我在命令行中看到的。请你指导我如何提取图像。谢谢。操作系统已被

我正在使用ffmpeg从视频中提取帧。当我从命令行使用ffmpeg时,这很好,但是,当我尝试使用python执行相同的操作时:

os.popen3('ffmpeg -i videoPath -an -ss 00:00:02 -an -r 1 -vframes 1 -y picturePath')

我不知道如何获得提取的图像。到目前为止,我只收到一条文字(ffmpeg版本N-62039-gc00f368版权所有(c)2000…),这是我在命令行中看到的。请你指导我如何提取图像。谢谢。

操作系统已被弃用。您应该使用。

对于这类任务,我通常使用以下函数。它包括一个超时参数,用于自动中止运行时间过长的进程。对于用户上传的内容,这通常很方便:

import subprocess
from threading import Timer

def run_with_timeout(cmd, sec):
    def kill_proc(p, killed):
        killed['val'] = True
        p.kill()
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    killed = {'val': False}
    timer = Timer(sec, kill_proc, [p, killed])
    timer.start()
    stdout, stderr = p.communicate()
    timer.cancel()
    return p.returncode, stdout, stderr, killed['val']
这样,您就可以简单地调用任何带有选项的shell命令,并同步运行。这意味着函数将等待进程完成。因此,当函数完成时,将创建缩略图或返回错误:

videoPath = '/path/to/video/source/file.mp4'
picturePath = '/path/to/output.jpg'
result = run_with_timeout(['ffmpeg', '-i', videoPath, '-an', '00:00:02', '-r', '1', '-vframes', '1', '-y', picturePath], 30)
if result[0] != 0:
    print 'error'
else:
    print 'success'
    # do something with videoPath 

在当前的Python版本2.7.x中工作。

没有弃用
os
模块,但是
os.popen*()
和相关函数都是。但是,仍然没有回答如何将图像恢复到代码中以便我可以进一步使用它的问题。我也尝试过使用子流程。当您从命令行运行ffmpeg时,如何获得提取的图像?是的,这就是我想要的,如果可能的话。这不是一个“是”或“否”的问题:)您说“当我从命令行使用ffmpeg时,这很好”是什么意思?无关:我可以从命令行使用ffmpeg获取视频缩略图,我找到PNG ina文件夹,但我想从Python执行ffmpeg并将PNG作为返回值,以便我可以进一步使用它。运行命令(创建PNG文件)需要帮助吗?或者加载已保存的PNG文件以在Python中编辑需要帮助吗<代码>电影副本我上面链接的模块将两者结合起来。