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

使用ffmpeg将WebM文件转换为MP4文件的简单应用程序

tiktok网上下载的short视频是webm格式的,有些程序无法处理该程序,比如roop程序,本文介绍了如何使用wxPython库创建一个简单的GUI应用程序,用于将WebM文件转换为MP4文件。这个应用程序使用Python编写,通过调用FFmpeg命令来完成文件转换。
C:\pythoncode\new\convertwebmToMP4.py
在这里插入图片描述

安装所需的库

在开始之前,请确保已经安装了以下库:

  • wxPython
  • FFmpeg

你可以使用pip命令来安装这些库:


pip install wxPython
pip install FFmpeg

代码解析

以下是用于创建文件转换应用程序的Python代码:

import wx
import os
import subprocess# ... 代码省略 ...def main():app = wx.App()frame = FileConversionFrame()frame.Show()app.MainLoop()if __name__ == "__main__":main()

以上代码首先导入了必要的库,并定义了一个名为FileConversionFrame的类,表示应用程序的主窗口。在FileConversionFrame的构造函数中,创建了GUI界面的各个组件,包括选择文件按钮、选择文件夹按钮、文本控件等。同时,定义了事件处理函数来响应用户的操作。

on_convert函数中,通过获取用户选择的输入文件和输出文件夹路径,构建了一个FFmpeg命令,并使用subprocess.check_output函数执行该命令来进行文件转换。转换成功或失败后,会显示相应的提示框。

最后,在main函数中初始化应用程序并显示主窗口。

使用方法

要使用这个应用程序,按照以下步骤操作:

  1. 安装所需的库:wxPython和FFmpeg。
  2. 运行上述代码,将会打开一个GUI窗口。
  3. 点击选择WebM文件按钮,选择要转换的WebM文件。
  4. 点击选择输出文件夹按钮,选择要保存转换后MP4文件的输出文件夹。
  5. 点击转换按钮,应用程序将执行文件转换操作。
  6. 转换完成后,将会显示转换成功或失败的提示框。

完整代码

import wx
import os
import subprocessclass FileConversionFrame(wx.Frame):def __init__(self):super().__init__(None, title="文件转换示例")panel = wx.Panel(self)# 创建选择文件按钮select_file_button = wx.Button(panel, label="选择WebM文件")select_file_button.Bind(wx.EVT_BUTTON, self.on_select_file)# 创建选择文件夹按钮select_folder_button = wx.Button(panel, label="选择输出文件夹")select_folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)# 创建文本控件显示选择的文件和文件夹路径self.selected_file_text = wx.TextCtrl(panel, style=wx.TE_READONLY)self.selected_folder_text = wx.TextCtrl(panel, style=wx.TE_READONLY)# 创建转换按钮convert_button = wx.Button(panel, label="转换")convert_button.Bind(wx.EVT_BUTTON, self.on_convert)# 创建布局vbox = wx.BoxSizer(wx.VERTICAL)vbox.Add(select_file_button, 0, wx.ALL, 10)vbox.Add(self.selected_file_text, 0, wx.EXPAND | wx.ALL, 10)vbox.Add(select_folder_button, 0, wx.ALL, 10)vbox.Add(self.selected_folder_text, 0, wx.EXPAND | wx.ALL, 10)vbox.Add(convert_button, 0, wx.ALIGN_CENTER | wx.ALL, 10)panel.SetSizer(vbox)def on_select_file(self, event):dlg = wx.FileDialog(self, "选择WebM文件", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST, wildcard="WebM files (*.webm)|*.webm")if dlg.ShowModal() == wx.ID_OK:selected_file = dlg.GetPath()self.selected_file_text.SetValue(selected_file)dlg.Destroy()def on_select_folder(self, event):dlg = wx.DirDialog(self, "选择输出文件夹", style=wx.DD_DEFAULT_STYLE | wx.DD_DIR_MUST_EXIST)if dlg.ShowModal() == wx.ID_OK:selected_folder = dlg.GetPath()self.selected_folder_text.SetValue(selected_folder)dlg.Destroy()def on_convert(self, event):input_file = self.selected_file_text.GetValue()output_folder = self.selected_folder_text.GetValue()if not input_file:wx.MessageBox("请选择WebM文件", "错误", wx.OK | wx.ICON_ERROR)returnif not output_folder:wx.MessageBox("请选择输出文件夹", "错误", wx.OK | wx.ICON_ERROR)returnfile_name = os.path.basename(input_file)file_name_without_ext = os.path.splitext(file_name)[0]output_file = os.path.join(output_folder, f"{file_name_without_ext}.mp4")command = f'ffmpeg -i "{input_file}" "{output_file}"'try:subprocess.check_output(command, shell=True)wx.MessageBox("转换成功!", "提示", wx.OK | wx.ICON_INFORMATION)except subprocess.CalledProcessError as e:wx.MessageBox(f"转换失败:{e}", "错误", wx.OK | wx.ICON_ERROR)def main():app = wx.App()frame = FileConversionFrame()frame.Show()app.MainLoop()if __name__ == "__main__":main()

总结

本文介绍了如何使用wxPython库创建一个简单的文件转换应用程序。通过这个应用程序,你可以方便地将WebM文件转换为MP4文件。

相关文章:

使用ffmpeg将WebM文件转换为MP4文件的简单应用程序

tiktok网上下载的short视频是webm格式的,有些程序无法处理该程序,比如roop程序,本文介绍了如何使用wxPython库创建一个简单的GUI应用程序,用于将WebM文件转换为MP4文件。这个应用程序使用Python编写,通过调用FFmpeg命令…...

Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任务”

Prompt任务(Prompt Tasks) 通过设计提示(prompt)模板,实现使用更少量的数据在预训练模型(Pretrained Model)上得到更好的效果,多用于:Few-Shot,Zero-Shot 等…...

玩转Mysql系列 - 第6篇:select查询基础篇

这是Mysql系列第6篇。 环境:mysql5.7.25,cmd命令中进行演示。 DQL(Data QueryLanguage):数据查询语言,通俗点讲就是从数据库获取数据的,按照DQL的语法给数据库发送一条指令,数据库将按需求返回数据。 DQ…...

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

为什么要有服务网关? 我们都知道在微服务架构中,系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?难道要一个个的去调用吗?很显然这是不太实际的,我们需要有一个统一的接口与这些微服务打交道&#xf…...

【面试刷题】————STL中的vector是如何实现的?

STL(Standard Template Library)是C标准库中的一部分,它提供了许多常用的数据结构和算法,其中包括了动态数组 vector。 vector std::vector 是一个动态数组,它能够自动调整自己的大小,以适应存储元素的需…...

使用钉钉的扫码会出现多个回调(DTFrameLogin)

官方:地址 标题 出现的问题解决后效果正常使用(按照官网的流程进行使用)自己的理解(路人可忽略该内容!) 出现的问题 1692861955468 解决后效果 1692861665687 正常使用(按照官网的流程进行使用) fn.js 该文件就是钉钉官网的js文件,我下载到了…...

Android | 关于 OOM 的那些事儿

作者:345丶 前言 Android 系统对每个app都会有一个最大的内存限制,如果超出这个限制,就会抛出 OOM,也就是Out Of Memory 。本质上是抛出的一个异常,一般是在内存超出限制之后抛出的。最为常见的 OOM 就是内存泄露(大量…...

珠玑妙算游戏

珠玑妙算游戏,OJ练习 一、描述二、方法一三、方法二 一、描述 珠玑妙算游戏(the game of master mind)的玩法如下: 计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色&#xf…...

【rust语言】rust多态实现方式

文章目录 前言一、多态二、rust实现多态trait的静态方式还有一种方式可以通过动态分发,还以上面那段代码,比如dyn关键字 泛型方式枚举方式优点:缺点: 总结 前言 学习rust当中遇到了这个问题,记录一下,不对…...

两年半机场,告诉我如何飞翔

为说明如何坐飞机离港,故此记录一篇。何为离港,顾名思义,离开港湾,那何为港湾,便是机场。 机场,一个你可能经常去,亦或不曾去之地。我想,管你去没去过,先说下怎么去&…...

【动手学深度学习】--21.锚框

锚框 学习视频:锚框【动手学深度学习v2】 官方笔记:锚框 1.锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(gro…...

C语言学习笔记(完整版)

文章目录 算法算法的基本概念算法的特征算法的优劣 描述算法三种基本结构流程图N-S流程图伪代码 常量和变量了解数据类型常量整形常量实型常量字符型常量转义字符符号常量 变量整形变量实型变量字符型变量 表达式与运算符赋值运算符和赋值表达式变量赋初值强制类型转换 算术运算…...

【Unity3D赛车游戏】【四】在Unity中添加阿克曼转向,下压力,质心会让汽车更稳定

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…...

Python爬虫requests判断请求超时并重新post/get发送请求

在使用Python爬虫中&#xff0c;你可以使用requestsimport requests #Python爬虫requests判断请求超时并重新post发送请求&#xff0c;proxies为代理 def send_request_post(url, data, headers , proxies , max_retries3, timeout5):retries 0while retries < max_retries…...

CSS中如何实现多列布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 多列布局&#xff08;Multi-column Layout&#xff09;⭐ column-count⭐ column-width⭐ column-gap⭐ column-rule⭐ column-span⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧…...

【C++】string简单实用详解

本片要分享的内容是有关于string的知识&#xff0c;在这之前得介绍一下什么是STL&#xff1b; 目录 1.STL简单介绍 2. string简单介绍 3.string简单使用 3.1.string的定义 3.2.字符串的拼接 3.3.string的遍历 3.3.1.循环遍历 3.3.2.迭代器遍历 4.string的函数构造 1.…...

opencv 进阶16-基于FAST特征和BRIEF描述符的ORB(图像匹配)

在计算机视觉领域&#xff0c;从图像中提取和匹配特征的能力对于对象识别、图像拼接和相机定位等任务至关重要。实现这一目标的一种流行方法是 ORB&#xff08;Oriented FAST and Rotated Brief&#xff09;特征检测器和描述符。ORB 由 Ethan Rublee 等人开发&#xff0c;结合了…...

Unity 类Scene窗口相机控制

类Scene窗口相机控制 &#x1f354;效果 &#x1f354;效果 传送门&#x1f448;...

juc基础(三)

目录 一、读写锁 1、读写锁介绍 2、ReentrantReadWriteLock 3、例子 4、小结 二、阻塞队列 1、BlockingQueue 简介 2、BlockingQueue 核心方法 3、案例 4、常见的 BlockingQueue &#xff08;1&#xff09;ArrayBlockingQueue(常用) &#xff08;2&#xff09;Li…...

c语言函数指针和指针函数的区别,以及回调函数的使用。

函数指针是什么&#xff0c;函数指针本质也是指针&#xff0c;不过是指向函数的指针&#xff0c;存储的是函数的地址。 指针函数是什么,指针函数其实就是返回值是指针的函数&#xff0c;本质是函数。 函数指针是如何定义的呢&#xff0c;如下 void (*pfun)(int a,int b) 这…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...