You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Moviepy合并指定目录下的所有视频文件【已解决】

Python+MoviePy按文件名序号合并目录内视频的实现方法

你不能直接将目录路径传入concatenate_videoclips()完成合并——这个函数的入参要求是按拼接顺序排列的VideoFileClip对象列表,不支持直接传入文件夹路径,直接传路径会触发类型错误。
以下是可直接运行的完整实现,自动适配file1、file2...fileN这种命名规则的文件,还能避免默认字典序导致file10排在file2前面的排序错乱问题:

前置依赖

先确保已经安装moviepy库:

pip install moviepy

完整实现代码

import os
import re
from moviepy.editor import VideoFileClip, concatenate_videoclips

# -------------------------- 配置项 按需修改 --------------------------
TARGET_VIDEO_DIR = "./your_video_folder"  # 替换为你存放视频的目标目录路径
OUTPUT_VIDEO_PATH = "./merged_final.mp4"  # 合并后视频的保存路径
SUPPORTED_VIDEO_FORMATS = (".mp4", ".mov", ".avi", ".mkv", ".flv")  # 要识别的视频后缀
# --------------------------------------------------------------------

# 遍历目录筛选所有符合格式的视频文件
video_path_list = []
for file_name in os.listdir(TARGET_VIDEO_DIR):
    file_suffix = os.path.splitext(file_name)[1].lower()
    if file_suffix in SUPPORTED_VIDEO_FORMATS:
        full_path = os.path.join(TARGET_VIDEO_DIR, file_name)
        video_path_list.append(full_path)

# 按文件名中的数字序号排序
def extract_seq_num(file_full_path):
    base_name = os.path.basename(file_full_path)
    num_match = re.search(r"\d+", base_name)
    # 文件名没有数字的默认排最前面
    return int(num_match.group()) if num_match else 0

video_path_list.sort(key=extract_seq_num)

# 加载所有视频片段
clip_list = [VideoFileClip(path) for path in video_path_list]

# 执行拼接
final_video = concatenate_videoclips(clip_list, method="compose")

# 导出合并后的视频
final_video.write_videofile(OUTPUT_VIDEO_PATH)

# 释放占用的内存
for clip in clip_list:
    clip.close()
final_video.close()

踩坑提示:不要直接用os.listdir返回的默认顺序加载视频,操作系统默认返回的文件顺序不保证按数字序号排列,不做自定义排序很容易出现拼接顺序错乱的问题。

使用说明

  • 如果目录下所有视频的分辨率、帧率、编码格式完全一致,可以把concatenate_videoclips的method参数改为"chain",拼接速度会大幅提升,不需要做转码适配
  • 如果视频参数不统一,保持method="compose"即可,程序会自动统一参数,避免输出视频花屏、音画不同步

注意:运行前记得把配置项里的目录路径改成你自己的实际路径

内容的提问来源于stack exchange,提问作者Sting3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:01:15