視頻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)