最近需要用python对视频进行抽帧处理,网上给出的主要做法是两种,即调用imgeio或cv2的相关方法。但是却没看到有人对他们的性能进行对比,选择困难症的我决定写个demo测试一下。我的需求是抽取指定某帧,比如抽取第15帧,上诉两种方法都能实现,贴上代码如下:
import cv2
import time
import matplotlib.pyplot as plt
import imageio
import skimage
import numpy as np
position = [1, 5, 10, 15, 20, 25, 30] # 所要抽取帧的索引
imageio_start = time.time() # imgeio方法的时间计算
vid = imageio.get_reader("test.mp4", 'ffmpeg')
length = len(position)
frames2 = []
for i, img in enumerate(vid):
if i in position: # 抽取指定帧
image2 = skimage.img_as_float(img).astype(np.float32) # 转换为numpy数组
frames2.append(image2)
# plt.figure(0)
# plt.imshow(image2)
# plt.show()
if len(frames2) == length:
break
print('Time of imageio: ', time.time()-imageio_start)
######################################################################
cv2_start = time.time() # 计算cv2花费的时