当前位置:首页>python>零基础Python开发「图片批量转MP4视频」工具,本地离线、免费无水印 【脚本】

零基础Python开发「图片批量转MP4视频」工具,本地离线、免费无水印 【脚本】

  • 2026-09-30 22:35:03
零基础Python开发「图片批量转MP4视频」工具,本地离线、免费无水印 【脚本】

零基础Python开发「图片批量转MP4视频」工具,本地离线、免费无水印!

做自媒体、剪辑视频、制作数字人素材、相册宣传片的朋友,大概率都遇到过这个痛点:

一堆高清图片,想要合成连贯的MP4视频,网上工具要么强制加水印、要么限制分辨率、要么需要付费会员,批量处理还得开VIP。

今天教大家用 100行左右Python代码,手写一个免费、无水印、本地离线、批量转换的图片转视频工具。

支持自定义帧率、分辨率、自动排序、批量合成,写完一次,终身免费使用,还能搭配HeyGen数字人、开源TTS配音做完整AI视频!

📑 文章目录

  • 🔥 工具核心优势(吊打在线工具)

  • 🛠 开发依赖环境

  • 💻 完整可运行源码(新增转场+分辨率适配)

  • 📝 超详细使用教程(新手零门槛)

  • ✨ 高阶优化 & 自媒体实用搭配

  • 💡 写在最后


🔥 工具核心优势(吊打在线工具)

  • 完全免费:无会员、无水印、无次数限制

  • 本地离线运行:不上传图片,保护隐私素材

  • 自定义参数:自由设置帧率、视频分辨率、图片单帧时长

  • 全自动批量处理:自动读取文件夹所有图片,智能排序

  • 格式兼容全:支持 jpg、jpeg、png、bmp 常见图片格式

  • 画质无损:原生合成,不压缩模糊画质


🛠 开发依赖环境

我们核心用到两个Python库:

  • opencv-python:专业视频合成、图像读取处理

  • os:Python内置库,读取文件夹图片、遍历文件

打开终端,一键安装依赖:

pip install opencv-python

💻 完整可运行源码(新增转场+分辨率适配)

本次升级版新增核心功能:自动统一1080P分辨率、智能黑边填充(无拉伸变形)、全局淡入淡出转场、首尾渐变开场结尾,完全达到自媒体成片质量。

import cv2import osimport numpy as npdef images_to_video(    image_folder,     output_video,     fps=5,     target_size=(1920, 1080),     fade_duration=0.5):    """    多张图片批量转MP4视频【增强版】    新增:统一分辨率、自动补黑边防变形、淡入淡出转场    :param image_folder: 图片文件夹路径    :param output_video: 输出视频路径    :param fps: 帧率    :param target_size: 目标分辨率 默认1080P    :param fade_duration: 单张图片淡入淡出总时长(秒)    """    img_suffix = ('.jpg', '.jpeg', '.png', '.bmp')    img_list = [f for f in os.listdir(image_folder) if f.lower().endswith(img_suffix)]    img_list.sort()    if not img_list:        print("❌ 文件夹内未找到任何图片!")        return    target_w, target_h = target_size    fade_frame_num = int(fade_duration * fps / 2)    fourcc = cv2.VideoWriter_fourcc(*'mp4v')    video_writer = cv2.VideoWriter(output_video, fourcc, fps, (target_w, target_h))    def resize_and_pad(img):        """统一尺寸,等比例缩放+补黑边,杜绝拉伸变形"""        h, w = img.shape[:2]        scale = min(target_w / w, target_h / h)        new_w, new_h = int(w * scale), int(h * scale)        img_resized = cv2.resize(img, (new_w, new_h))        # 计算居中填充黑边        top = (target_h - new_h) // 2        bottom = target_h - new_h - top        left = (target_w - new_w) // 2        right = target_w - new_w - left        return cv2.copyMakeBorder(            img_resized, top, bottom, left, right,            cv2.BORDER_CONSTANT, value=[0, 0, 0]        )    def fade_transition(frame1, frame2, fade_frames):        """生成两张图片之间的淡入淡出过渡帧"""        frames = []        for i in range(fade_frames):            alpha = i / fade_frames            blend = cv2.addWeighted(frame1, 1 - alpha, frame2, alpha, 0)            frames.append(blend)        return frames    frame_buffer = []    for idx, img_name in enumerate(img_list):        img_path = os.path.join(image_folder, img_name)        frame = cv2.imread(img_path)        if frame is None:            print(f"⚠️ 读取失败:{img_name}")            continue        # 统一尺寸        frame_pad = resize_and_pad(frame)        frame_buffer.append(frame_pad)        print(f"✅ 预处理完成:{img_name}")    # 逐帧写入 + 首尾淡入淡出 + 图片间转场    total_img = len(frame_buffer)    stay_frames = int(1.0 * fps)    for i in range(total_img):        current_frame = frame_buffer[i]        # 开头淡入        if i == 0:            for n in range(fade_frame_num):                alpha = n / fade_frame_num                blank = np.zeros_like(current_frame)                fade_in = cv2.addWeighted(blank, 1 - alpha, current_frame, alpha, 0)                video_writer.write(fade_in)        # 主体停留帧        for _ in range(stay_frames):            video_writer.write(current_frame)        # 图片之间淡出转场(最后一张不淡出)        if i != total_img - 1:            next_frame = frame_buffer[i+1]            trans_frames = fade_transition(current_frame, next_frame, fade_frame_num)            for f in trans_frames:                video_writer.write(f)        # 结尾淡出        elif i == total_img - 1:            for n in range(fade_frame_num, 0, -1):                alpha = n / fade_frame_num                blank = np.zeros_like(current_frame)                fade_out = cv2.addWeighted(blank, 1 - alpha, current_frame, alpha, 0)                video_writer.write(fade_out)    video_writer.release()    print(f"\n🎉 高清视频合成完成!保存路径:{output_video}")# ==================== 自定义配置区 ====================if __name__ == "__main__":    IMAGE_FOLDER = "./images"    OUTPUT_VIDEO = "./output.mp4"    FPS = 8    RESOLUTION = (1920, 1080)   # 可改为 (1280,720) 720P    FADE_TIME = 0.6             # 转场时长    images_to_video(        image_folder=IMAGE_FOLDER,        output_video=OUTPUT_VIDEO,        fps=FPS,        target_size=RESOLUTION,        fade_duration=FADE_TIME    )

📝 超详细使用教程(新手零门槛)

第一步:新建文件夹

1. 在桌面新建一个文件夹,比如命名为 图片转视频

2. 在文件夹内新建子文件夹,命名为 images

3. 把需要合成的所有图片,全部放入 images文件夹

💡 小技巧:图片按 1.jpg、2.jpg、3.jpg 命名,排序更精准,避免画面错乱

第二步:修改配置参数

代码底部「自定义配置区」可自由修改:

  • FPS帧率
    :数值越小,单张图片停留越久

- 相册慢播放:3-6帧

- 正常短视频:24-30帧

  • OUTPUT_VIDEO
    :自定义视频保存名称和路径

第三步:运行代码

直接运行py文件,等待几秒,即可在根目录生成无水印高清 output.mp4!


✨ 高阶优化 & 自媒体实用搭配

1. 适配AI数字人场景(搭配HeyGen)

很多人用HeyGen做数字人视频,需要静态背景图轮播视频,用这个工具批量合成背景视频,再导入HeyGen叠加数字人,画面质感远超单图静态背景。

2. 搭配开源AI配音

用之前推荐的 ChatTTS、CosyVoice 生成配音音频,再用剪映合并视频和音频,全程免费无版权,完美制作自媒体口播、科普视频。

3. 进阶功能拓展(可自行升级)

  • 已更新:全局淡入淡出转场 + 首尾渐变特效

  • 已更新:智能统一分辨率、自动补黑边,彻底解决画面拉伸变形

  • 批量遍历多级文件夹、自动批量生成多个视频

  • 添加进度条、异常报错提示


💡 写在最后

一个简单的Python脚本,就能替代各类付费剪辑工具、在线转换网站。

最大的优势就是 安全、免费、可控,自媒体素材、私密照片不用上传第三方平台,本地一键合成高清视频。

不用懂复杂开发,复制代码、改个参数就能直接用,新手也能轻松拿捏!


最新文章

随机文章