1

尝试了很多选择,但我的想法已经不多了。我希望这里有人可以提供帮助。我正在尝试在 python 中编写一些代码,这些代码将从视频(.avi 或 .wmv)中提取帧(比如每十帧)并创建图片(最好是 .jpg - 但其他格式也可以)。我没有成功,并且想知道是否有人可以通过提供替代我尝试和失败的方法来帮助我解决我的问题。

我已经尝试过 PyMedia(他们的教程http://pymedia.org/tut/src/dump_video.py.html中的示例不起作用 - 程序在寻找视频编解码器时会爆炸):

#dm= muxer.Demuxer( inFile.split( '.' )[ -1 ] )  This line does not work

  dm= muxer.Demuxer( 'avi' )  #This modified line does seem to work however

  i= 1

  inFile = "VideoTest.avi"

  f= open( inFile, 'rb' )

  s= f.read( 400000 )

  r= dm.parse( s )

  v= filter( lambda x: x[ 'type' ]== muxer.CODEC_TYPE_VIDEO, dm.streams )

  v_id= v[ 0 ][ 'index' ]

  print 'Assume video stream at %d index: ' % v_id

  c= vcodec.Decoder( dm.streams[ v_id ] )     #this is the point where it crashes.

我已经为 Python 尝试过 OpenCV v2.2,但这也不起作用(我可以让大部分 OpenCV 工作 - 除了我需要的一个函数 CaptureFromFile 不起作用)。我相信这个功能不起作用的原因是因为在 Windows 上它需要 highGui 才能运行,并且由于某种原因,python 和 opencv 无法找到 highgui,即使它位于正确的目录中。我也了解 OpenCV 在查找和应用正确的视频编解码器方面存在问题,所以我不确定是哪一个是我的问题的原因。

我看过 pyFFMPEG,但最后一个版本是 2.6 版,我正在运行 python 2.7。

我在 Windows Vista 和 Windows 7 机器上运行它,在 C:\ 上加载了 Python 2.7 和 OpenCV 2.2,在 C:\python27\Libs\site-packages 中安装了所有其他 python 包(pygames、pymedia、numpy、scipy)。 ..” 我从可执行文件下载并安装,所有包都是为 python 2.7 构建的。我的 Path 变量包括 Python27 和 OpenCV,我有一个 PYTHONPATH 变量。

感谢您的任何想法或建议。

4

1 回答 1

1

我尝试了以下方法将每个帧提取为单独的图像:

import cv2

file_path = "some\path\to\the\file.avi"
video_object = cv2.VideoCapture(path)

success = True
while success:
    success,frame = video_object.read()
    if success:
        cv2.imwrite(path[:-4]+"_"+str(i)+".jpg",frame)
print("Done!")

此脚本将每个帧作为图像保存在与源文件相同的文件夹中。这可能不是最有效的方法,但它对我有用!我知道我的字符串解析不是最推荐的,但它确实有效。 video_object.read()返回两个对象。第一个是bool指示读取操作是否成功,第二个是图像。

视频编解码器可能存在限制,我不知道。截至 2013 年 11 月 7 日,我正在使用 Python 2.7 和最新版本的 openCV 和 Numpy。

于 2013-11-07T16:58:20.297 回答