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
相关推荐
西猫雷婶18 小时前
pytorch基本运算-分离计算数新网络18 小时前
PyTorch自信的小螺丝钉19 小时前
【大模型手撕】pytorch实现LayerNorm, RMSNorm深耕AI19 小时前
PyTorch图像预处理:ToTensor()与Normalize()的本质区别鲸屿19519 小时前
python之socket网络编程里昆19 小时前
【AI】Tensorflow在jupyterlab中运行要注意的问题AI视觉网奇19 小时前
pycharm 最新版上一次编辑位置荼蘼20 小时前
OpenCV 高阶 图像金字塔 用法解析及案例实现2401_8288906420 小时前
使用 BERT 实现意图理解和实体识别多恩Stone21 小时前
【3DV 进阶-2】Hunyuan3D2.1 训练代码详细理解下-数据读取流程