2012-01-17 62 views
1

嘗試了很多選項,並且用盡了想法。我希望這裏有人能夠提供幫助。我正在嘗試在python中編寫一些代碼,用於從視頻(.avi或.wmv)中提取幀(比如說每十幀)並創建一張圖片(.jpg最好 - 但其他格式可以)。我沒有成功,並想知道是否有人可以幫助我解決我的問題,提供替代我嘗試和失敗的方法。使用python將視頻轉換爲圖片的問題2.7

我已經試過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. 

我已經試過V2.2的OpenCV的Python但也不工作(我可以讓大部分的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 \下安裝了所有其他python軟件包(pygames,pymedia,numpy,scipy)站點包...」我下載和安裝可執行文件,所有的包建爲Python 2.7。我的PATH變量包含Python27和OpenCV,我有一個PYTHONPATH變量。

感謝您的任何意見或建議。

回答

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年7月7日的最新版本的openCV和Numpy Python 2.7。