对于任何人都好奇,这里是我的解决方案。它使用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
。