Python OpenCV实现视频片段截取与保存
本文介绍使用Python和OpenCV库进行视频截取与保存的方法。通过设定起止时间或帧数,程序可读取视频文件,根据指定时间段筛选图像帧,并将其编码保存为新的视频文件。文中提供了完整的函数实现代码,包括参数设置、帧率获取及循环处理逻辑,供开发者参考学习。
Python OpenCV视频截取与保存概述
本文详细讲解了如何利用Python结合OpenCV库完成视频的截取与保存操作。文中提供了详细的示例代码,旨在为相关学习或实际工作提供有价值的参考。
在进行图像处理任务前,通常需要对原始数据进行筛选。针对视频数据,核心需求往往是从长视频中提取出特定的一个或多个片段。
整体实现逻辑较为直观:通过定义视频截取的起始和结束时间(或对应的帧数),程序将提取该时间段内的所有图像帧,并将其合成为一个新的视频文件。
视频截取代码实现
具体实现代码如下所示。
"""
【函数名称】 截取视频
【参数】 输入参数 视频文件名称
【详细介绍】 输入不同时间段 进行截取拼接
【创建日期】 20191128 by wangxioabei
【修改日期】 NOTE.1:
"""
def CutVideoFromFile(video_file_name,windows_name = 'videoShowing'):
cap = cv2.VideoCapture(video_file_name) # 打开视频文件
# 需要明确视频保存的格式
fourcc = cv2.VideoWriter_fourcc(*'XVID')
fps = cap.get(cv2.CAP_PROP_FPS)
print('帧率:%d'%fps)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter('BeltTear.avi',fourcc,fps, size)
SaveTime = [[38*60+38,39*60+59],[42*60+54,44*60+11],[47*60+8,48*60+24],[51*60+20,52*60+39]]
print(SaveTime[0][0])
now_frame = 0
while (cap.isOpened()):
ret, frame = cap.read() # 捕获一帧图像
img_h, img_w, img_ch = frame.shape
# print(frame.shape)
if ret:
# 【1】 不能直接将灰度或二值化的图片保存成视频,需要转换成彩色
if img_ch==1:
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
# cv2.imshow(windows_name, frame)
for i in range(len(SaveTime)):
if now_frame > SaveTime[i][0]*fps and now_frame < SaveTime[i][1]*fps:
out.write(frame)
print(now_frame)
now_frame += 1
if now_frame > SaveTime[2][1]*fps:
break;
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
# cv2.waitKey(25)
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
代码中的SaveTime列表用于存储截取的时间段,内部嵌套的列表分别代表起始和结束时间(单位:秒)。该列表也可作为参数传入,从而将截取逻辑封装为通用的函数。
以上内容即为本文的全部介绍,希望能为读者的学习带来帮助,同时也欢迎大家继续关注和支持本站后续的技术分享。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













