如何在python中使用opencv将视频的特定部分保存到单独的视频中?

代码

我有一个视频,我想使用帧号获取该视频的特定部分并保存它们。

例如,如果有一个视频,它总共有 200 帧,我想提取视频的某些特定部分,比如从 15 到 30、50 到 79 帧等,我想分别保存这些部分中的每一个。

cap= cv2.VideoCapture('Trademill.mp4')
video_length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) 
print ("Number of frames: ", video_length)

success,image = cap.read()
count = 0
while success:
cv2.imwrite("frame%d.jpg" % count, image)          
success,image = cap.read()
count += 1

我如何使用 python 和 OpenCV 做到这一点?

曾安

这是我将如何做到的:

import cv2

file = "video.avi"
parts = [(15, 30), (50, 79)]

cap = cv2.VideoCapture(file)
ret, frame = cap.read()
h, w, _ = frame.shape

fourcc = cv2.VideoWriter_fourcc(*"XVID")
writers = [cv2.VideoWriter(f"part{start}-{end}.avi", fourcc, 20.0, (w, h)) for start, end in parts]

f = 0
while ret:
    f += 1
    for i, part in enumerate(parts):
        start, end = part
        if start <= f <= end:
            writers[i].write(frame)
    ret, frame = cap.read()

for writer in writers:
    writer.release()

cap.release()

说明:

  1. 导入cv2模块,定义视频文件的名称以及要保存到不同视频文件中的文件部分:
import cv2

file = "video.avi"
parts = [(15, 30), (50, 79)]
  1. 定义一个视频捕获设备从视频文件中读取帧并从中读取一次以获取视频帧的形状:
cap = cv2.VideoCapture(file)
ret, frame = cap.read()
h, w, _ = frame.shape
  1. 定义一个fourcc (四字符代码),并定义一个视频作者列表;一个用于您要生成的每个视频:
fourcc = cv2.VideoWriter_fourcc(*"XVID")
writers = [cv2.VideoWriter(f"part{start}-{end}.avi", fourcc, 20.0, (w, h)) for start, end in parts]
  1. 定义一个while循环,但在此之前,定义一个变量来跟踪 while 循环在捕获设备中所处的帧:
f = 0
while ret:
    f += 1
  1. for循环内部使用while循环,循环遍历部件的起始帧和结束帧,使用该enumerate方法允许程序在需要时访问每次迭代所在的部件的索引。如果while循环之前定义的变量介于(包括)部分的开始和结束之间,则将该帧写入相应的视频编写器(使用enumerate方法提供的索引
    for i, (start, end) in enumerate(parts):
        if start <= f <= end:
            writers[i].write(frame)
    ret, frame = cap.read()
  1. 最后,释放所有视频编写器和捕获设备:
for writer in writers:
    writer.release()

cap.release()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用OpenCV VideoWriter将视频保存到特定目录-Python

如何使用python将视频的特定帧保存到文件夹中?

如何使用 OpenCV 将数组(帧)列表保存到视频中?

使用Python将功能输出的一部分保存到文件中

如何在Python OpenCV中保存视频

OpenCV Python:无法将数组中的图像保存到视频中

如何使用 OpenCV 保存视频?

如何使用ffmpeg gpu编码将视频中的帧保存到内存中?

如何使用asp.net mvc将视频保存到数据库中

如何在Python中使用OpenCV提取图像的特定部分?

如何在C ++中使用OpenCV以所需的fps捕获视频

如何在openCV中使用视频输入获取屏幕大小?

将视频保存到 DocumentsDirectory

如何在iOS中捕获特定部分而非全屏视频

从文件夹中的所有视频中获取视频帧,使用 openCV 处理,保存到自己的文件夹?

如何在自定义视频输入中使用 OpenCV 视频捕获?

使用openCV在python中保存视频捕获:空视频

使用 OpenCV 将从 Deepstream 管道中提取的帧保存到视频中

如何使用opencv转到视频中的特定时间?

如何在asp.net mvc (C#) 中使用视频控件保存视频播放的进度?

如何使用手刹将压缩的(批处理的)视频文件保存到原始文件夹中?

将每行的一部分保存到bash中的数组

在Python中使用OpenCV裁剪视频(Mac)

如何在使用OpenCV python播放时移动视频窗口

如何使用python从opencv中的特定时间戳播放视频文件?

如何将watsup中的视频保存到诺基亚lumia 520的手机内存中

如何在 Swift Playgrounds 中将视频保存到 URL

如何将视频从AVAssetExportSession保存到相机胶卷?

使用GridFS将视频/图像保存到NodeJS服务器中的MongoDB中