python打包exe3

不好意思,上一个代码运行的时候没有进度条我们无法对运行的时候有一个直观的感受,我们可以添加一个进度条

import tkinter as tk
from tkinter import filedialog, ttk
import cv2
import os

def change_video_speed(input_video_path, output_video_path, speed=1, progress_callback=None):
    # 打开视频文件
    video = cv2.VideoCapture(input_video_path)

    if not video.isOpened():
        print("Error opening video file")
        return

    # 获取视频的基本属性
    fps = video.get(cv2.CAP_PROP_FPS)
    frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
    width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))

    # 新的帧率为原帧率乘以速度因子
    new_fps = fps * speed

    # 创建一个 VideoWriter 对象来写入新的视频
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 也可以选择其他编码格式,例如 'XVID'
    out = cv2.VideoWriter(output_video_path, fourcc, new_fps, (width, height))

    processed_frames = 0
    while video.isOpened():
        ret, frame = video.read()
        if not ret:
            break
        out.write(frame)
        processed_frames += 1
        if progress_callback:
            progress_callback(processed_frames / frame_count * 100)

    # 完成后释放视频对象
    video.release()
    out.release()

def process_video():
    input_path = input_entry.get()
    output_path = output_entry.get()
    speed = float(speed_entry.get())

    if not input_path or not output_path:
        result_label.config(text="请选择输入和输出文件!")
    else:
        try:
            progress_bar['maximum'] = 100
            progress_bar.start()  # 开始进度条动画
            change_video_speed(input_path, output_path, speed, update_progress)
            progress_bar.stop()   # 停止进度条动画
            progress_bar['value'] = 0
            result_label.config(text="视频处理完成!")
            # 清空输入框
            input_entry.delete(0, tk.END)
            output_entry.delete(0, tk.END)
        except Exception as e:
            result_label.config(text=f"处理失败:{e}")

def browse_input():
    filepath = filedialog.askopenfilename(filetypes=[("Video files", "*.mp4 *.avi")])
    input_entry.delete(0, tk.END)
    input_entry.insert(0, filepath)

def browse_output():
    filepath = filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("Video files", "*.mp4 *.avi")])
    output_entry.delete(0, tk.END)
    output_entry.insert(0, filepath)

def update_progress(progress):
    progress_bar['value'] = progress
    root.update_idletasks()

# 创建主窗口
root = tk.Tk()
root.title("视频处理工具")

# 输入文件路径
tk.Label(root, text="输入文件:").pack(pady=5)
input_entry = tk.Entry(root, width=50)
input_entry.pack(pady=5)
browse_input_button = tk.Button(root, text="浏览", command=browse_input)
browse_input_button.pack(pady=5)

# 输出文件路径
tk.Label(root, text="输出文件:").pack(pady=5)
output_entry = tk.Entry(root, width=50)
output_entry.pack(pady=5)
browse_output_button = tk.Button(root, text="浏览", command=browse_output)
browse_output_button.pack(pady=5)

# 设置播放速度
tk.Label(root, text="播放速度 (倍速):").pack(pady=5)
speed_entry = tk.Entry(root, width=10)
speed_entry.pack(pady=5)
speed_entry.insert(0, "2")

# 进度条
progress_bar = ttk.Progressbar(root, orient="horizontal", length=300, mode='determinate')
progress_bar.pack(pady=10)

# 处理按钮
process_button = tk.Button(root, text="处理视频", command=process_video)
process_button.pack(pady=10)

# 结果标签
result_label = tk.Label(root, text="")
result_label.pack(pady=10)

root.mainloop()

感谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值