gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:17:01 25 4
gpt4 key购买 nike

我正在使用 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。

关于python - 使用 os.popen3() 在 python 中提取视频的缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22824785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com