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.mzph.cn/bicheng/62623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web开发基础学习——HTTP的理解

Web开发基础学习系列文章目录 第一章 基础知识学习之HTTP的理解 文章目录 Web开发基础学习系列文章目录前言一、HTTP 请求方法二、HTTP 状态码三、HTTP 报文四、示例总结 前言 HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在 W…

PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题

目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…

【python量化教程】如何使用必盈API的股票接口,获取最新实时交易数据

实时交易数据简介 股票实时交易数据涵盖股票价格、成交量、涨跌幅等多类信息。其在股票交易中极为关键,高速准确的数据对各方意义重大。投资者可借此及时捕捉机会、优化策略与降低风险;实时准确的实时交易数据是股票市场有效运转的核心要素之一。 使用…

面试小札:ThreadLocal底层实现原理和具体应用场景

ThreadLocal底层实现原理 数据结构 ThreadLocal 内部有一个静态内部类 ThreadLocalMap ,它是 ThreadLocal 实现的关键。 ThreadLocalMap 是一个自定义的哈希表,类似于 java.util.HashMap ,但它的设计更加简单和高效,用于存储每个线…

编程语言中什么是框架?什么是Cocoa?Foundation.framework的底层实现?Swift如何引入ObjC框架?

编程语言中什么是框架? 在编程语言中,框架(Framework)是一种特定的软件库,它提供了一套预先定义的代码和组件,用于加速和简化特定类型的应用程序的开发。框架通常提供了一套标准化的开发工具集和约定&#…

SQL进阶——C++与SQL进阶实践

在C开发中,SQL数据库的操作是开发者常见的任务之一。虽然前面我们已经介绍了如何在C中通过数据库连接执行基本的SQL查询,但在实际项目中,我们通常需要更加复杂和高效的数据库操作。存储过程与函数的调用、复杂SQL查询的编写、以及动态构造SQL…

【Zookeeper】四,Zookeeper节点类型、通知、仲裁、会话

文章目录 Zookeeper的架构znode的版本Zookeeper的节点类型层级树状结构znode的不同类型 Zookeeper监视与通知通知的类型 Zookeeper的仲裁Zk的会话会话的生命周期 Zookeeper的架构 Zookeeper的服务器端运行两种模式:独立模式(standalone)和仲…

Mac安装及合规无限使用Beyond Compare

文章目录 Beyond CompareBeyond Compare简介Beyond Compare安装Beyond Compare到期后继续免费使用 Beyond Compare Beyond Compare简介 Beyond Compare 是一款由 Scooter Software 开发的文件和文件夹比较工具。它主要用于对比两个文件或文件夹之间的差异,并支持文…

[极客大挑战 2019]PHP--详细解析

信息搜集 想查看页面源代码,但是右键没有这个选项。 我们可以ctrlu或者在url前面加view-source:查看: 没什么有用信息。根据页面的hint,我们考虑扫一下目录看看能不能扫出一些文件. 扫到了备份文件www.zip,解压一下查看网站源代码…

毫米波雷达技术:(五)距离-多普勒图谱,以及 FMCW 信号帧结构的设计

(一) 距离-多普勒图谱( R a n g e − D o p p l e r F F T Range-Doppler~FFT Range−Doppler FFT ( 2 D − F F T 2D-FFT 2D−FFT)的结果): 1)range-bins(距离单元): 上述步骤②的…

Linux环境下配置neo4j图数据库

1.下载安装包 openjdk-11.0.1_linux-x64_bin.tar.gz neo4j-community-4.2.19-unix.tar.gz 2.之前配置好的配置文件 neo4j.conf 3.安装 3.1-jdk11的安装(jdk1.8不够用) 解压缩 tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz修改系统环境变量 打开pro…

Mybatis:CRUD数据操作之多条件查询及动态SQL

Mybatis基础环境准备请看:Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之多条件查询 1,编写接口方法 在 com.itheima.mapper 包写创建名为 BrandMapper 的接口。在 BrandMapper 接口中定义多条件查询的方法。 而该功能有三个参数,…

Day3 洛谷 1161+1179+1200+1304

零基础洛谷刷题记录 Day1 2024.11.18 Day2 2024.11.25 Day3 2024.11.26 文章目录 零基础洛谷刷题记录1161:题目描述1161:解题代码1161:学习成果1179:题目描述(成功写出)1179:解题代码1179&…

18:(标准库)DMA二:DMA+串口收发数据

DMA串口收发数据 1、DMA串口发送数据2、DMA中断串口接收定长数据包3、串口空闲中断DMA接收不定长数据包4、串口空闲中断DMA接收不定长数据包DMA发送数据包 1、DMA串口发送数据 当串口的波特率大于115200时,可以通过DMA1进行数据搬运,以防止数据的丢失。如…

【Flink-scala】DataStream编程模型之窗口计算-触发器-驱逐器

DataStream API编程模型 1.【Flink-Scala】DataStream编程模型之数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 文章目录 DataStream API编程模型前言1.触发器1.1 代码示例 2.驱逐器2.1 代码示例 总结 前言 本小节我想…

MATLAB —— 机械臂工作空间,可达性分析

系列文章目录 前言 本示例展示了如何使用可操作性指数对不同类型的机械手进行工作空间分析。工作空间分析是一种有用的工具,可用于确定机器人工作空间中最容易改变末端效应器位置和方向的区域。本示例的重点是利用不同的可操控性指数类型来分析各种机械手的工作空间。了解工作…

提升异步编程性能:使用 uvloop 加速你的 Python 应用

提升异步编程性能:使用 uvloop 加速你的 Python 应用 引言什么是 uvloop?安装 uvloop使用 uvloop示例代码代码解释性能对比性能测试结果 总结参考资料 引言 在现代的 Python 异步编程中,asyncio 是一个非常强大的工具,它允许我们…

Python 小高考篇(8)拓展

目录 列表读取内容修改内容for 循环遍历列表下标越界 ASCII码和字符的相互转换导入库进制转换结尾 本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。 因此,若需转载/引用本文,请注明作者并附原文链接,且…

11.21c++中的函数

练习: 编写mystring类:拥有以下功能: 1.带参、无参构造函数,拷贝构造函数,析构函数 2.编写 append(const mystring r) 为当前字符串尾部,拼接新的字符串r 3.编写 isEqual(const mystring r) 判断当前字符串…

windbg使用定位内核内存泄露

零 打开驱动测试测试工具 verifier /standard /driver fileflt.sys 然后重启电脑等待生效 一 设置 Windows 内核调试的符号路径和模块加载 1. 设置微软符号服务器路径: 在 WinDbg 中,可以通过以下命令设置符号路径: .sympath srv*c:\s…