如何使用Python的MoviePy库拼接两段视频并添加Logo
用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
相关产品推荐
相关产品推荐

