Loading... 通过代码把视频画面水平横切或垂直竖切。 ## 参数 在脚本中,split\_mode 参数用来指定视频是如何被切分的: ‘horizontal’: 表示视频将被水平切分。这意味着每个视频帧被分割成上下两部分。通常,这适用于需要分析视频的上半部或下半部的场景,比如在监控摄像头录像中只关注地面或天空的部分。 ‘vertical’: 表示视频将被竖直切分。这意味着每个视频帧被分割成左右两部分。这种切分方式适用于视频内容在左右两侧差异较大时,例如在某些体育赛事中,你可能只需要关注场地的一半。 ## 安装库 ``` pip install opencv-python pip install tqdm ``` ## 运行代码 ``` import cv2 import os from glob import glob from tqdm import tqdm def process_videos(video_dir, split_mode='horizontal'): video_files = glob(os.path.join(video_dir, '*.mp4')) # 获取所有mp4视频文件 for video_file in tqdm(video_files, desc="Processing Videos"): cap = cv2.VideoCapture(video_file) if not cap.isOpened(): print(f"Error: Could not open video {video_file}.") continue frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 获取视频帧总数 fps = int(cap.get(cv2.CAP_PROP_FPS)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) if split_mode == 'horizontal': mid_point = height // 2 out1 = cv2.VideoWriter(video_file.replace('.mp4', '_top.mp4'), cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, mid_point)) out2 = cv2.VideoWriter(video_file.replace('.mp4', '_bottom.mp4'), cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, mid_point)) else: mid_point = width // 2 out1 = cv2.VideoWriter(video_file.replace('.mp4', '_left.mp4'), cv2.VideoWriter_fourcc(*'mp4v'), fps, (mid_point, height)) out2 = cv2.VideoWriter(video_file.replace('.mp4', '_right.mp4'), cv2.VideoWriter_fourcc(*'mp4v'), fps, (mid_point, height)) frame_update_interval = 10 # 设置进度条更新频率 frame_counter = 0 # 帧计数器 # 使用 tqdm 来更新进度条 with tqdm(total=frame_count, desc=f"Processing {os.path.basename(video_file)}", leave=False) as pbar: while True: ret, frame = cap.read() if not ret: break if split_mode == 'horizontal': out1.write(frame[:mid_point, :]) out2.write(frame[mid_point:, :]) else: out1.write(frame[:, :mid_point]) out2.write(frame[:, mid_point:]) frame_counter += 1 if frame_counter % frame_update_interval == 0 or frame_counter == frame_count: pbar.update(frame_update_interval if frame_counter % frame_update_interval == 0 else frame_counter % frame_update_interval) cap.release() out1.release() out2.release() if __name__ == "__main__": video_dir = r'F:\mp4' process_videos(video_dir, split_mode='vertical') # 'horizontal' 或 'vertical' ``` 最后修改:2024 年 10 月 07 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏