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

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.lryc.cn/news/494696.html

相关文章:

  • JavaScript实用工具lodash库
  • mapstruct DTO转换使用
  • Linux(Centos7)---安装nginx(很简单)
  • 【接口调试】OpenAI ChatGPT API
  • 云轴科技ZStack助力 “上科大智慧校园信创云平台”入选上海市2024年优秀信创解决方案
  • CPU性能优化-CPU特性
  • Idea使用Maven连接MySQL数据库
  • 《深入浅出HTTPS》读书笔记(13):块密码算法之迭代模式(续)
  • 使用Cmake导入OpenCV库的大坑记录
  • UE5 打包报错 Unknown structure 的解决方法
  • MySQL之单行函数
  • spring-boot自定义ApplicationListener及源码分析
  • C语言:深入理解指针
  • 【WPF实现RichTextBox添加文本、自动滚动】
  • 量化交易系统开发-实时行情自动化交易-8.4.MT4/MT5平台
  • 【HarmonyOS】@Observed和@ObjectLink嵌套对象属性更改UI不刷新问题
  • 什么是默克尔树(Merkle Tree)?如何计算默克尔根?
  • 眼部按摩仪WT2605音频蓝牙语音芯片方案 单芯片实现语音提示及控制/手机无线音频传输功能
  • python打包深度学习虚拟环境
  • springboot358智慧社区居家养老健康管理系统(论文+源码)_kaic
  • 复杂网络(二)
  • Kubernetes 01
  • node修改文件名称
  • ArcGIS 软件中路网数据的制作
  • transformers microsoft--table-transformer 表格识别
  • 【Spark源码分析】规则框架-草稿
  • 迪米特原则的理解和实践
  • jQuery零基础入门速通(中)
  • 【设计模式系列】中介者模式(十八)
  • PDF版地形图矢量出现的问题