對於任何人都好奇,這裏是我的解決方案。它使用OpenCV
。當我問這個問題時,我並沒有意識到這一點,但OpenCV
具有在幕後使用ffmpeg
的某些功能。由於我的程序已經在使用OpenCV
,我只是在提到的問題中提到了這個問題(因爲我認爲它不重要),使用OpenCV
內置的功能來執行我想要的功能並不是很困難。下面是代碼:
cap = cv2.VideoCapture("video.mpg")
count = 0
frame_q = queue.Queue()
while cap.grab():
success, frame = cap.read()
if count % 5 == 0 and success:
frame_alpha = np.insert(frame, 3, 255, axis=2)
frame_q.put(frame_alpha)
count += 1
正如你所看到的,我只是把每五幀到幀的Queue
。這樣做的核心是以下三行:
cap = cv2.VideoCapture("video.mpg")
while cap.grab():
success, frame = cap.read()
第一行打開捕捉,而子句檢查是否存在使用cap.grab()
任何一個以上幀(返回True
如果存在下一個幀),然後我讀使用cap.read()
將幀編碼爲numpy
陣列。success
是一個布爾值,指示操作是否成功。後來,我加入一個alpha通道frame
,並把它放入frame_q
。
然後,程序get
小號幀的另一個線程的是Queue
的。這樣,我根本不必處理文件系統 - 就像Marcus說的那樣,我將它們直接加入到程序中。
注:爲cv2.VideoCapture()
上班opencv_ffmpeg.dll
需要在系統路徑或者您正在使用哪個的Python
安裝的根目錄。你可能有其中XYZ是OpenCV
版本號減去小數點將其重命名爲opencv_ffmpegXYZ.dll
。所以對我來說,這是opencv_ffmpeg330.dll
因爲我有版本3.3.0
。它也可能在x64系統上被稱爲opencv_ffmpeg330_64.dll
。
的opencv_ffmpeg.dll
位置取決於你如何安裝OpenCV
,我只想在OpenCV
目錄搜索opencv_ffmpeg
,看看它出現。在你把它複製到Python
目錄,一定要檢查,如果它已經存在。這可能是,取決於你如何安裝OpenCV
。