思路: 结合原文件、场景的帧位置和存储是否是关键帧的数组,来生成gif
首先得到帧位置的代码
datasetF = h5py.File('csv/changan12NewALL.h5', 'r')
#这里的h5文件是之前自己生成的h5文件
dataFeature=datasetF['video_1']['features'][...]
#之后就用dataFeature得到场景的帧位置
之前确认是否是关键帧的数据储存在machine_summary中,这里也会利用h5文件再把这个数据提取出来,将关键帧单独提取出来
相关代码:
dirsSummary = os.listdir('/opt/data/private/xuyunyang/Video-Summarization-Pytorch/output/changan')
这里的h5文件就是有关键帧的代码片段,至于为什么是一个文件夹,是因为此项目第一步实际上是对视频进行场景切分,第二步才是提取关键帧,生成gif片段,这个过程中会生成很多片段的h5文件,放在一个文件夹中
dirsSummary.sort()
for file in dirsSummary:
datasetSummary = h5py.File('/opt/data/private/xuyunyang/Video-Summarization-Pytorch/output/changan/'+file, 'r')
tempD=datasetSummary['video_1']['machine_summary'][...]
#for num in datasetSummary['video_1']['machine_summary'][...]:
for num in tempD:
data.append(num)
for nn in range(tempShot[temmpShotNum+1]-tempShot[temmpShotNum]-len(tempD)+1):
data.append(0)
temmpShotNum=temmpShotNum+2
提取了关键帧的相关数据,此时储存在了data的数组中
然后是原视频的相关操作
dataset = []
path='video/changan12NewALL.mp4'
cap = cv2.VideoCapture(path)
frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)
# 获取视频宽度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 获取视频高度
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
new_width=int(frame_width*0.5)+1
new_hight=int(frame_height*0.5)+1
fps = cap.get(cv2.CAP_PROP_FPS) #视频平均帧率
count=0
success=1
while(success):