| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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")
|