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

如何使用Python的MoviePy库拼接两段视频并添加Logo

前置准备

  • 先安装MoviePy库:
    pip install moviepy
    
  • 准备好以下文件:
    • 待批量处理的视频文件(示例放在D:\facemask目录下)
    • 用于拼接的固定视频(示例为D:\peter.mp4)
    • Logo图片(示例为D:\twinkle_logo.png)
    • 提前创建输出目录D:\facemask\out,避免导出时报错

修正后的完整代码

import os
import moviepy.editor as mp
from moviepy.video.compositing.concatenate import concatenate_videoclips

# 遍历目标目录下的所有视频文件
video_dir = "D:\\facemask"
output_dir = "D:\\facemask\\out"
os.makedirs(output_dir, exist_ok=True)  # 确保输出目录存在

for filename in os.listdir(video_dir):
    # 过滤非视频文件(可根据需要添加更多格式)
    if filename.endswith((".mp4", ".mov", ".avi")):
        video_path = os.path.join(video_dir, filename)
        # 加载待处理视频和固定拼接视频
        clip1 = mp.VideoFileClip(video_path)
        clip2 = mp.VideoFileClip("D:\\peter.mp4")
        
        # 创建并配置Logo图层
        logo = mp.ImageClip("D:\\twinkle_logo.png")\
            .set_duration(clip1.duration + clip2.duration)  # Logo时长匹配拼接后总时长\
            .resize(height=50)  # 调整Logo高度,宽度等比缩放\
            .margin(right=8, top=8, opacity=0)  # 设置边距,opacity=0表示边距透明\
            .set_pos(("right", "top"))  # 固定到右上角
        
        # 拼接两段视频
        concatenated_clip = concatenate_videoclips([clip1, clip2])
        
        # 将Logo合成到拼接后的视频上
        final_clip = mp.CompositeVideoClip([concatenated_clip, logo])
        
        # 生成输出路径,避免重复后缀
        output_filename = os.path.splitext(filename)[0] + "_final.mp4"
        output_path = os.path.join(output_dir, output_filename)
        
        # 导出最终视频,可添加参数调整编码等
        final_clip.write_videofile(output_path, codec="libx264")

print("所有视频处理完成")

关键代码解释

  • 视频加载:mp.VideoFileClip()用于加载本地视频文件,支持常见格式。
  • Logo配置:
    • ImageClip()加载Logo图片;
    • set_duration()设置Logo显示时长,需匹配拼接后视频的总时长;
    • resize()调整Logo尺寸,这里按高度缩放,宽度自动等比适配;
    • margin()设置Logo与边缘的距离,opacity=0保证边距区域透明;
    • set_pos()指定Logo位置,支持("right", "top")、("center", "bottom")等相对位置,也可传入具体像素坐标。
  • 视频拼接:concatenate_videoclips()接收视频列表,按顺序拼接,注意必须传入列表而非单独的两个视频对象(原代码此处有错误)。
  • 图层合成:CompositeVideoClip()将拼接后的视频和Logo图层叠加,实现Logo悬浮在视频上方的效果。
  • 视频导出:write_videofile()保存最终视频,codec="libx264"指定H.264编码,保证兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:05:49