吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 704|回复: 44
上一主题 下一主题
收起左侧

[Python 原创] python视频合并工具

[复制链接]
跳转到指定楼层
楼主
zhhr157 发表于 2024-11-14 09:27 回帖奖励
前段时间,朋友让我将两个视频合在一起,但是我发现市面上的软件都太不方便了,不是收费就是水印,或者就是降低清晰度,于是我就想着合并两个视频应该不难,我就用了一段时间将这种工具使用python开发了出来。
代码介绍如下:
这是一个使用 moviepytkinter 创建的简单图形用户界面(GUI)应用程序,用于合并两个视频文件,并在两个视频之间添加淡入淡出过渡效果。程序的功能是:
  • 选择两个视频:用户可以选择两个视频文件,将它们合并成一个新的视频。
  • 过渡效果:在两个视频之间添加 1 秒钟的淡出淡入过渡效果,使合并后的视频更加平滑自然。
  • 输出视频:用户可以指定合并后视频的输出路径,并保存为 MP4 格式。


完整代码展示如下:
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog, messagebox
from moviepy.editor import VideoFileClip, concatenate_videoclips


# 定义合并视频的函数
def merge_videos_with_transition(video1_path, video2_path, output_path):
    try:
        # 加载两个视频
        video1 = VideoFileClip(video1_path).fadeout(1)  # 1秒淡出
        video2 = VideoFileClip(video2_path).fadein(1)  # 1秒淡入

        # 合并两个视频
        final_video = concatenate_videoclips([video1, video2], method="compose")

        # 输出合并后的视频
        final_video.write_videofile(output_path, codec="libx264", audio_codec="aac")
        messagebox.showinfo("成功", "视频合并成功!")
    except Exception as e:
        messagebox.showerror("错误", f"发生错误: {e}")


# 创建主窗口
root = tk.Tk()
root.title("视频合并工具")

# 设置窗口大小
root.geometry("400x300")


# 定义按钮点击事件,选择视频1文件
def select_video1():
    video1_path.set(filedialog.askopenfilename(filetypes=[("MP4 files", "*.mp4")]))


# 定义按钮点击事件,选择视频2文件
def select_video2():
    video2_path.set(filedialog.askopenfilename(filetypes=[("MP4 files", "*.mp4")]))


# 定义按钮点击事件,选择输出路径
def select_output():
    output_path.set(filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("MP4 files", "*.mp4")]))


# 创建界面控件
video1_path = tk.StringVar()
video2_path = tk.StringVar()
output_path = tk.StringVar()

# 视频1选择框
tk.Label(root, text="选择第一个视频").pack(pady=10)
tk.Button(root, text="选择视频1", command=select_video1).pack(pady=5)
tk.Entry(root, textvariable=video1_path, width=50).pack(pady=5)

# 视频2选择框
tk.Label(root, text="选择第二个视频").pack(pady=10)
tk.Button(root, text="选择视频2", command=select_video2).pack(pady=5)
tk.Entry(root, textvariable=video2_path, width=50).pack(pady=5)

# 输出路径选择框
tk.Label(root, text="选择输出文件路径").pack(pady=10)
tk.Button(root, text="选择输出路径", command=select_output).pack(pady=5)
tk.Entry(root, textvariable=output_path, width=50).pack(pady=5)

# 合并按钮
tk.Button(root, text="合并视频",
          command=lambda: merge_videos_with_transition(video1_path.get(), video2_path.get(), output_path.get())).pack(
    pady=20)

# 启动 GUI 主循环
root.mainloop()




使用方法
  • 选择视频文件:点击 "选择视频1" 和 "选择视频2" 按钮,选择需要合并的两个视频文件。
  • 设置输出路径:点击 "选择输出路径" 按钮,选择保存合并后视频的路径。
  • 合并视频:点击 "合并视频" 按钮,程序会合并两个视频,并添加 1 秒的淡入淡出过渡效果。合并完成后,会显示成功提示。

免费评分

参与人数 1热心值 +1 收起 理由
csgqd + 1 能批量合成就好,比如短剧100集合成一个视频文件

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| zhhr157 发表于 2024-11-23 17:08 |楼主
qqy123 发表于 2024-11-23 14:33
楼主,这个是怎么回事。

你的环境可能和我的环境不一样,就是淡入淡出那部分有问题,我帮你更改了一下代码,下面这个应该是没有问题的
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog, messagebox
from moviepy.editor import VideoFileClip, concatenate_videoclips, CompositeVideoClip


# 定义合并视频的函数
def merge_videos_with_transition(video1_path, video2_path, output_path):
    try:
        # 加载两个视频
        video1 = VideoFileClip(video1_path)
        video2 = VideoFileClip(video2_path)

        # 添加淡出和淡入效果
        video1 = video1.fadeout(1)  # 1秒淡出
        video2 = video2.fadein(1)  # 1秒淡入

        # 合并两个视频
        final_video = concatenate_videoclips([video1, video2], method="compose")

        # 输出合并后的视频
        final_video.write_videofile(output_path, codec="libx264", audio_codec="aac")
        messagebox.showinfo("成功", "视频合并成功!")
    except Exception as e:
        messagebox.showerror("错误", f"发生错误: {e}")


# 创建主窗口
root = tk.Tk()
root.title("视频合并工具")

# 设置窗口大小
root.geometry("400x300")


# 定义按钮点击事件,选择视频1文件
def select_video1():
    video1_path.set(filedialog.askopenfilename(filetypes=[("MP4 files", "*.mp4")]))


# 定义按钮点击事件,选择视频2文件
def select_video2():
    video2_path.set(filedialog.askopenfilename(filetypes=[("MP4 files", "*.mp4")]))


# 定义按钮点击事件,选择输出路径
def select_output():
    output_path.set(filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("MP4 files", "*.mp4")]))


# 创建界面控件
video1_path = tk.StringVar()
video2_path = tk.StringVar()
output_path = tk.StringVar()

# 视频1选择框
tk.Label(root, text="选择第一个视频").pack(pady=10)
tk.Button(root, text="选择视频1", command=select_video1).pack(pady=5)
tk.Entry(root, textvariable=video1_path, width=50).pack(pady=5)

# 视频2选择框
tk.Label(root, text="选择第二个视频").pack(pady=10)
tk.Button(root, text="选择视频2", command=select_video2).pack(pady=5)
tk.Entry(root, textvariable=video2_path, width=50).pack(pady=5)

# 输出路径选择框
tk.Label(root, text="选择输出文件路径").pack(pady=10)
tk.Button(root, text="选择输出路径", command=select_output).pack(pady=5)
tk.Entry(root, textvariable=output_path, width=50).pack(pady=5)

# 合并按钮
tk.Button(root, text="合并视频",
          command=lambda: merge_videos_with_transition(video1_path.get(), video2_path.get(), output_path.get())).pack(
    pady=20)

# 启动 GUI 主循环
root.mainloop()
推荐
mm3344 发表于 2024-11-18 17:23
Michael613515 发表于 2024-11-18 15:05
感谢楼主,已经打包成软件
https://cowtransfer.com/s/7b505c8cae3d45 点击链接查看 [ 视频合并.exe ] , ...

请问怎么封装的啊,我封装带有moviepy的库的时候老是报错如下
Failed to execute script 'compress' due to unhandled exception: expected str, bytes or os.PathLike object, not None Type
沙发
 楼主| zhhr157 发表于 2024-11-14 09:28 |楼主
本帖最后由 zhhr157 于 2024-11-14 12:13 编辑

如果感觉不太方便的,近期我想办法将它封装成软件
这个库是必要的,忘记讲了
pip install moviepy
3#
yxiaoq 发表于 2024-11-14 10:43
支持大神把它做成软件!!!
4#
yinghui46 发表于 2024-11-14 10:51
小白,支持大神打包成软件,操作更便捷
5#
zhaoleji 发表于 2024-11-14 11:01
您的包装的什么版本啊? 我用PyCharm 默认的 那种安装方式 装不成功呐

微信截图_20241114110019.png (32.91 KB, 下载次数: 0)

微信截图_20241114110019.png
6#
Xiaosesi 发表于 2024-11-14 11:05
感谢分享,刚好最近需要合并视频
7#
fb83cn 发表于 2024-11-14 11:05
支持大佬做成可以直接运行的程序
8#
csfcy 发表于 2024-11-14 11:10
感谢大神分享代码
9#
scp201 发表于 2024-11-14 11:10
感觉再缝个前台页面,弄成docker镜像就完美了
10#
aiguohou 发表于 2024-11-14 11:17

感谢大神分享代码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 07:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表