Python OpenCV实现视频片段截取与保存

顾星河
顾星河
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍使用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列表用于存储截取的时间段,内部嵌套的列表分别代表起始和结束时间(单位:秒)。该列表也可作为参数传入,从而将截取逻辑封装为通用的函数。

以上内容即为本文的全部介绍,希望能为读者的学习带来帮助,同时也欢迎大家继续关注和支持本站后续的技术分享。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表