怎么做网站教程 用的工具,有关做橡胶品的网站,免费高清图片素材网站有哪些,codepen wordpressPython 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果 目录
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果
一、简单介绍
二、简单指定视频某片段重复播放…Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果 目录
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果
一、简单介绍
二、简单指定视频某片段重复播放效果实现原理
三、简单指定视频某片段重复播放效果案例实现简单步骤
四、注意事项 一、简单介绍
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言最初被设计用于编写自动化脚本(shell)随着版本的不断更新和语言新功能的添加越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言可以应用于以下领域 Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
这里使用 Python 基于 OpenCV 进行视觉图像处理...... 二、简单指定视频某片段重复播放效果实现原理
要在 Python 中使用 OpenCV 指定视频某段连续帧然后重复播放若干次。当指定的起始帧和结束帧超出视频的有效范围时我们需要进行安全校验以防止越界访问。
并将重复的视频片段插入原始视频中分别处理重复片段之前和之后的部分然后再将它们组合起来。 实现原理 读取原始视频文件。分别处理重复片段之前、重复片段和重复片段之后的部分。将这些部分按顺序合并成新的视频。 具体方法 使用 OpenCV 中的 cv2.VideoCapture() 函数读取原始视频文件。获取原始视频的帧率、总帧数和尺寸等信息。对指定的重复片段之前、重复片段和重复片段之后的部分进行逐帧处理。利用 cv2.VideoWriter() 创建输出视频文件对象并按照顺序将处理好的视频帧写入其中。 实现中涉及了以下关键函数 cv2.VideoCapture()用于从视频文件中读取视频帧的函数。它创建了一个视频捕获对象可以用来逐帧读取视频内容。 cv2.VideoWriter()用于创建视频写入对象的函数。它创建了一个视频写入对象可以用来将视频帧写入到输出视频文件中。 cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)用于设置视频文件读取的起始帧。这个函数可以将视频文件的读取位置设置为指定的帧序号。 cap.get(cv2.CAP_PROP_FPS)用于获取视频帧率的函数。它返回视频文件中的帧率信息以便在创建输出视频对象时保持一致。 cap.get(cv2.CAP_PROP_FRAME_COUNT)用于获取视频总帧数的函数。它返回视频文件中的总帧数信息以便在处理视频片段时进行判断。 cap.read()用于逐帧读取视频内容的函数。它返回一个布尔值和一个视频帧布尔值表示是否成功读取了视频帧视频帧则是一个 NumPy 数组表示当前读取的视频帧内容。 out.write(frame)用于将视频帧写入输出视频文件的函数。它将指定的视频帧写入到输出视频对象中。 cap.release() 和 out.release()分别用于释放视频捕获对象和视频写入对象的函数。它们释放了底层的资源确保在程序结束时资源得到正确释放。 通过这些关键函数的组合和调用实现了从原始视频中提取指定片段、重复播放指定次数并生成新的视频文件的功能。 三、简单指定视频某片段重复播放效果案例实现简单步骤
1、编写代码 2、运行效果 3、具体代码 简单指定视频某片段重复播放效果1、使用 OpenCV 中的 cv2.VideoCapture() 函数读取原始视频文件。2、获取原始视频的帧率、总帧数和尺寸等信息。3、对指定的重复片段之前、重复片段和重复片段之后的部分进行逐帧处理。4、利用 cv2.VideoWriter() 创建输出视频文件对象并按照顺序将处理好的视频帧写入其中。
import cv2def repeat_video_segment(input_video_path, output_video_path, start_frame, end_frame, repeat_count):指定视频片段重复若干次:param input_video_path::param output_video_path::param start_frame::param end_frame::param repeat_count::return:# 读取原始视频文件cap cv2.VideoCapture(input_video_path)# 获取原始视频的帧率和总帧数fps cap.get(cv2.CAP_PROP_FPS)total_frames int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# 校验起始帧和结束帧是否有效if start_frame 0 or end_frame 0 or start_frame total_frames or end_frame total_frames:print(Error: Invalid start or end frame.)return# 获取原始视频的宽度和高度width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 定义视频编码器fourcc cv2.VideoWriter_fourcc(*mp4v)# 创建输出视频文件对象out cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))# 设置视频文件读取的起始帧cap.set(cv2.CAP_PROP_POS_FRAMES, 0)# 写入重复片段之前的部分for frame_index in range(start_frame):ret, frame cap.read()if ret:out.write(frame)else:break# 写入重复片段for _ in range(repeat_count):# 设置视频文件读取的起始帧为重复片段的起始帧cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame)# 逐帧读取重复片段并写入输出视频对象for frame_index in range(start_frame, end_frame 1):ret, frame cap.read()if ret:out.write(frame)else:break# 写入重复片段之后的部分for frame_index in range(end_frame 1, total_frames):cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)ret, frame cap.read()if ret:out.write(frame)else:break# 释放资源cap.release()out.release()cv2.destroyAllWindows()def main():# 调用函数并指定输入和输出视频文件路径以及要重复播放的视频段的起始帧和结束帧以及重复播放的次数input_video_path Videos/CatRun.mp4output_video_path Videos/VideoRepeatSegment.mp4start_frame 130 # 重复片段的起始帧end_frame 200 # 重复片段的结束帧repeat_count 3 # 重复播放的次数repeat_video_segment(input_video_path, output_video_path, start_frame, end_frame, repeat_count)if __name__ __main__:main()四、注意事项
校验起始帧和结束帧是否有效确保不会越界。在处理视频片段之前和之后需要设置视频文件读取的起始帧。在循环读取视频帧时需要判断视频文件是否读取到了末尾。最后需要释放资源包括释放视频文件对象和关闭所有窗口。