from moviepy.editor import VideoFileClip, concatenate_videoclips import os import json def concat_videos(video_paths, output_path): """ 拼接多个视频文件为一个视频。 :param video_paths: 视频文件路径列表,例如 ['1.mp4', '2.mp4'] :param output_path: 输出视频文件路径,例如 'output.mp4' """ if not video_paths: raise ValueError("视频路径列表不能为空") clips = [] for path in video_paths: if not os.path.isfile(path): raise FileNotFoundError(f"视频文件不存在: {path}") clips.append(VideoFileClip(path)) # 拼接所有视频片段 final_clip = concatenate_videoclips(clips, method="compose") # 使用 compose 可处理不同尺寸 # 写入输出文件 final_clip.write_videofile( output_path, codec='libx264', audio_codec='aac', temp_audiofile='temp-audio.m4a', remove_temp=True ) # 关闭所有 clip 以释放资源 for clip in clips: clip.close() final_clip.close() # 示例用法 if __name__ == "__main__": # 生成视频片段 with open("./output/storyboards_with_segments.json", "r", encoding='utf-8') as f: final_storyboards = json.load(f)[0]["storyboards"] segments = [] for storyboard in final_storyboards: storyboard_path = storyboard["storyboard"] for item in storyboard_path: clip_path = item["clip_path"] segments.append(clip_path) videos = segments[30:40] print(videos) concat_videos(segments, "output_combined_4.mp4")