import os
import cv2
import time
def on_mouse(event,x,y, flag, para):
global status_value, start_frame, end_frame, times
if event == cv2.EVENT_LBUTTONDOWN: # 鼠标左键点击
times += 1
status_value = not status_value
if status_value:
start_frame = frame_number
# print(f"Start frame: {start_frame}")
else:
split_flag = 'd' + str(int(times/2))
# print('split_flag: ', split_flag)
end_frame = frame_number
# print(f"End frame: {end_frame}")
extract_and_save_video(split_flag,para[0], para[1])
def extract_and_save_video(split_flag, folder, video_name):
now_time = time.time()
print('now_time:', now_time)
out = cv2.VideoWriter('{}_{}_{}.avi'.format(video_name, folder, split_flag), cv2.VideoWriter.fourcc(*'XVID'), fps, size)
print('start frame: {}'.format(start_frame))
print('end frame: {}'.format(end_frame))
for i in range(start_frame, end_frame + 1):
cap.set(cv2.CAP_PROP_POS_FRAMES, i)
ret, frame = cap.read()
if ret:
out.write(frame)
out.release()
print('video saved *********************')
cv2.waitKey(5000)
videos_folder = 'E:\\河南深丛信息科技\\datasets\\record_night'
action_folders = os.listdir(videos_folder)[:2]
for folder in action_folders:
video_folder = os.path.join(videos_folder, folder)
video_files = os.listdir(video_folder)
for video_file in video_files:
video_name = video_file.split('.mkv')[0]
video_file_path = os.path.join(video_folder, video_file)
print('video file path:', video_file_path)
cap = cv2.VideoCapture(video_file_path)
fps = cap.get(cv2.CAP_PROP_FPS)
print('fps: {}'.format(fps))
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print("frame_count:", frame_count)
status_value = 0
# 初始化变量
start_frame = None
end_frame = None
frame_number = 0
times = 0
event = 0
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
while True:
ret, frame = cap.read()
if not ret:
break
frame_number += 1
cv2.imshow('Video', frame)
cv2.setMouseCallback('Video', on_mouse, [folder, video_name])
if frame_number == 1:
cv2.waitKey(3000)
if cv2.waitKey(50) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
print(video_file + ' is done......\n')
cv2.waitKey(3000)
python opencv 持续点选开始帧,结束帧,切割视频成几个小段
Deepcong2024-06-25 23:27
相关推荐
悠悠小茉莉25 分钟前
Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)m0_6256865540 分钟前
day53Real_man1 小时前
告别 requirements.txt,拥抱 pyproject.toml和uv的现代Python工作流站大爷IP2 小时前
Python文件操作的"保险箱":with语句深度实战指南运器1232 小时前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)视觉人机器视觉4 小时前
Visual Studio2022和C++opencv的配置保姆级教程PyAIExplorer4 小时前
图像旋转:从原理到 OpenCV 实践巴里巴气4 小时前
selenium基础知识 和 模拟登录selenium版本19894 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成JavaEdge在掘金4 小时前
Redis 数据倾斜?别慌!从成因到解决方案,一文帮你搞定