视频压缩工具

用python制作视频压缩工具

代码介绍

这是一个基于Tkinter库和FFmpeg的视频压缩工具,支持选择输入文件、选择输出路径,以及设置输出视频大小,通过新线程执行视频压缩操作并弹出消息框提示压缩完成。其中FFmpeg是第三方工具,自己下载一个然后把环境变量配好就可以使用。

具体功能包括:
  1. 选择输入文件:点击“选择视频”按钮弹出文件选择对话框,选择要压缩的视频文件。
  2. 选择输出路径:点击“选择路径”按钮弹出目录选择对话框,选择压缩后的视频要保存到的目录,同时会弹出一个对话框要求输入已处理好的视频的名字。
  3. 设置输出视频大小:在“压缩大小”文本框中输入要设置的视频大小,单位为kbps。
  4. 开始压缩:点击“开始压缩”按钮,会弹出两个消息框,第一个提示如果视频大小太大了,请耐心等待,第二个提示正在后台处理视频,处理完毕后会有相关的提示。
  5. 压缩完成提示:压缩完成后会弹出一个消息框提示压缩完成,并显示输出路径。
  6. 退出程序:点击“退出程序”按钮可以退出程序,同时会弹出一个确认对话框。
代码如下:
import threading
import tkinter as tk
from tkinter import filedialog, simpledialog
import subprocess
from tkinter import messagebox
import tkinter.font as tkFont
import os

class VideoCompressorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("欢迎使用力江视频压缩工具")

        # 输入路径部分
        self.input_label = tk.Label(root, text="输入路径:")
        self.input_label.place(x=60, y=10)

        self.input_path_var = tk.StringVar()
        self.input_entry = tk.Entry(root, textvariable=self.input_path_var)
        self.input_entry.place(x=130, y=10)

        self.input_button = tk.Button(root, text="选择视频", command=self.choose_input_file, bg="#FFD45E")
        # self.input_button.grid(row=0, column=2)
        self.input_button.place(x=280, y=5)

        # 输出路径部分
        self.output_label = tk.Label(root, text="输出路径:")
        self.output_label.place(x=60, y=50)

        self.output_path_var = tk.StringVar()
        self.output_entry = tk.Entry(root, textvariable=self.output_path_var)
        self.output_entry.place(x=130, y=50)

        self.output_button = tk.Button(root, text="选择路径", command=self.choose_output_path, bg="#FFCCBE")
        # self.output_button.grid(row=1, column=2)
        self.output_button.place(x=280, y=45)

        # 压缩大小部分
        self.bitrate_label = tk.Label(root, text="压缩大小(kbps):")
        self.bitrate_label.place(x=7, y=90)

        self.bitrate_var = tk.StringVar(value="200")
        self.bitrate_entry = tk.Entry(root, textvariable=self.bitrate_var)
        self.bitrate_entry.place(x=130, y=90)

        # 开始压缩按钮
        self.compress_button = tk.Button(root, text="开始压缩", command=self.start_compression, bg="#499C54")
        self.compress_button.place(x=70, y=150)

        # 退出程序按钮
        self.quit_button = tk.Button(root, text="退出程序", command=root.quit, bg="#C75450")
        self.quit_button.place(x=260, y=150)

        myFont = tkFont.Font(size=10)  # 创建一个字号为20的字体对象
        self.text = tk.Label(root, text="***感谢你的使用!还需要别的程序设计的小伙伴请关注作者***", fg="blue", font=myFont)
        self.text1 = tk.Label(root, text="***CSDN账号:https://blog.csdn.net/weixin_64801028***", fg="blue", font=myFont)
        self.text.place(x=10, y=240)
        self.text1.place(x=10, y=265)

    def choose_input_file(self):
        file_path = filedialog.askopenfilename(filetypes=[("Video files", "*.mp4")])
        self.input_path_var.set(file_path)

    def choose_output_path(self):
        output_path = filedialog.askdirectory()
        if output_path:
            # 如果用户选择了目录,则弹出对话框让用户输入视频名字
            video_name = simpledialog.askstring("已处理好的视频名字", "请输入视频名字:")
            if video_name:
                # 如果用户输入了视频名字,则将输出路径和视频名字拼接起来
                output_file = os.path.join(output_path, f"{video_name}.mp4")
                output_file = output_path + "/" + f"{video_name}.mp4"
                self.output_path_var.set(output_file)


    def start_compression(self):
        input_file = self.input_path_var.get()
        output_file = self.output_path_var.get()
        target_bitrate = self.bitrate_var.get() + "k"

        if not input_file or not output_file or not target_bitrate:
            self.show_message_box("错误", "请选择文件并输入压缩大小!")
            return

        messagebox.showinfo('提示', '如果视频大小太大了,请耐心等待')
        messagebox.showinfo('提示', '后台正在给你处理,当处理完毕以后会有相关的提示!')

        # 创建新的线程来执行视频压缩
        t = threading.Thread(target=self.compress_video, args=(input_file, output_file, target_bitrate))
        t.start()

    def compress_video(self, input_file, output_file, target_bitrate):
        # 在这里执行视频压缩操作,并将压缩结果保存到输出文件中
        ffmpeg_cmd = f'ffmpeg -i {input_file} -vcodec libx264 -b:v {target_bitrate} -acodec aac -b:a 128k {output_file}'

        subprocess.call(ffmpeg_cmd, shell=True)
        self.show_message_box("压缩完成", "视频压缩已完成!")

        self.show_message_box("输出路径", f"输出路径:{output_file}")

    def show_message_box(self, title, message):
        # 弹出消息框,提示视频压缩完成
        messagebox.showinfo(title, message)


def on_close():
    if messagebox.askokcancel("退出程序", "确定要退出吗?"):
        root.destroy()


if __name__ == "__main__":
    root = tk.Tk()
    root.geometry('400x300')
    root.resizable(False, False)
    root.protocol("WM_DELETE_WINDOW", on_close)  # 指定点击关闭按钮时的回调函数
    app = VideoCompressorApp(root)
    root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

力江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值