使用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代码:

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. 转换完成后,将会显示转换成功或失败的提示框。

完整代码

python 复制代码
import wx
import os
import subprocess

class 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)
            return

        if not output_folder:
            wx.MessageBox("请选择输出文件夹", "错误", wx.OK | wx.ICON_ERROR)
            return

        file_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文件。

相关推荐
岁月小龙2 小时前
如何让ffmpeg运行时从当前目录加载库,而不是从/lib64
ffmpeg·origin·ffprobe·rpath
丕羽3 小时前
【Pytorch】基本语法
人工智能·pytorch·python
bryant_meng3 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
m0_594526304 小时前
Python批量合并多个PDF
java·python·pdf
工业互联网专业4 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
钱钱钱端4 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
慕卿扬4 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn
Json____5 小时前
python的安装环境Miniconda(Conda 命令管理依赖配置)
开发语言·python·conda·miniconda
小袁在上班5 小时前
Python 单元测试中的 Mocking 与 Stubbing:提高测试效率的关键技术
python·单元测试·log4j
白狐欧莱雅5 小时前
使用python中的pygame简单实现飞机大战游戏
经验分享·python·游戏·pygame