视频mp4垂直拼接 水平拼接
pinjie_v.py
import imageio
import numpy as np
import os
import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_ok=True)# 获取目录下的所有视频文件video_files_1 = [f for f in os.listdir(dir1) if f.endswith('.mp4')]video_files_2 = [f for f in os.listdir(dir2) if f.endswith('.mp4')]# 确保两个目录下的视频文件是同名的common_files = set(video_files_1).intersection(video_files_2)# 如果没有同名视频,退出if not common_files:print("没有同名的视频文件。")exit()for video_name in common_files:print(f"处理视频: {video_name}")# if "user-4fd103ee-38d4-43c5-bb2a-f496d2fe065e" not in video_name:# continue# 打开视频文件video_path_1 = os.path.join(dir1, video_name)video_path_2 = os.path.join(dir2, video_name)reader1 = imageio.get_reader(video_path_1)reader2 = imageio.get_reader(video_path_2)# 获取视频信息(假设两个视频有相同帧数)fps = reader1.get_meta_data()['fps']num_frames = min(reader1.count_frames(), reader2.count_frames())# 创建输出文件output_path = os.path.join(out_dir, f"v_{video_name}")# writer = imageio.get_writer(output_path, fps=fps)if os.path.exists(output_path):continueouts = []# 逐帧处理for i in range(num_frames):frame1 = reader1.get_data(i)frame2 = reader2.get_data(i)# 获取帧的高度和宽度height1, width1, _ = frame1.shapeheight2, width2, _ = frame2.shapeif height1 > width1:if height1 != height2:y_scale = height1 / height2frame2 = cv2.resize(frame2, (int(width2 * y_scale), height1), interpolation=cv2.INTER_AREA)elif height1 <= width1:if width1 != width2:x_scale = width1 / width2frame2 = cv2.resize(frame2, (width1, int(height2 * x_scale)), interpolation=cv2.INTER_AREA)if height1 > width1:frame = np.hstack([frame1, frame2])else:frame = np.vstack([frame1, frame2])outs.append(frame)try:imageio.mimsave(f'{output_path}', outs, fps=fps, macro_block_size=None)except Exception as e:print(e)# writer.close()print(f"视频 {video_name} 拼接完成,保存在 {output_path}")if __name__ == '__main__':# 设置目录路径dir1 = r'E:\project\smpl\render_blender\linux\hmr_res'dir2 = r'E:\project\smpl\render_blender\linux\hmr2_res'dir1 = r'E:\project\smpl\render_blender\linux\val_out_depth_any_color'dir2 = r'E:\project\smpl\render_blender\linux\val_out_video'dir1 = r'E:\project\smpl\render_blender\linux\val_out_depth_any_color'dir2 = r'E:\project\smpl\render_blender\linux\val_out_video'dir1=r'E:\project\smpl\render_blender\linux\test_lbg_o'dir2 =r'E:\project\smpl\render_blender\linux\test_lbg6'out_dir = 'track_diff'pinjie_v(dir1,dir2,out_dir)