当前位置: 首页 > article >正文

Python 视频合并工具

Python 视频合并工具

1.简介:

这是一个使用 moviepy 和 tkinter 创建的简单图形用户界面(GUI)应用程序,用于合并两个视频文件,并在两个视频之间添加淡入淡出过渡效果。程序的功能是:

  • 选择两个视频:用户可以选择两个视频文件,将它们合并成一个新的视频。
  • 过渡效果:在两个视频之间添加 1 秒钟的淡出淡入过渡效果,使合并后的视频更加平滑自然。
  • 输出视频:用户可以指定合并后视频的输出路径,并保存为 MP4 格式。

2.使用方法:

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

3.源码如下:

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()

http://www.kler.cn/a/415316.html

相关文章:

  • uniapp定义new plus.nativeObj.View实现APP端全局弹窗
  • SQL Server数据库日志(ldf文件)清理
  • linux内核读写硬盘文件 kernel_writekernel_read
  • 前端学习笔记之文件下载(1.0)
  • 《Vue 数据绑定:开启动态页面之旅》
  • 介绍SSD硬盘
  • 乐鑫发布 esp-iot-solution v2.0 版本
  • RPC——Remote Procedure Call(远程过程调用)
  • I/O流程图
  • 大数据新视界 -- 大数据大厂之 Hive 数据质量保障:数据清洗与验证的策略(上)(17/ 30)
  • Web开发基础学习——HTTP的理解
  • 工控网络安全系列一
  • 马斯克的 AI 游戏工作室:人工智能与游戏产业的融合新纪元
  • Oracle-—系统包使用
  • 医疗废物检测
  • Unity图形学之BRDF双向反射分布函数
  • 3.3 指针类型
  • telnet IP某个端口,但是ping不通IP :网络连接中的不同境遇
  • Redis(5):哨兵
  • 如何把产品3D模型放到网站上进行3D展示或3D互动?
  • 淘宝架构演化
  • 论文翻译 | BERTese: Learning to Speak to BERT
  • docker搭建socks5代理
  • ASUS/华硕天选5锐龙版 FA507U 原厂Win11-23H2系统 工厂文件 带ASUS Recovery恢复
  • k8s中pause镜像的作用
  • 计算机组成原理:程序计数器实验