-
视频转GIF小工具
Python写的,一个很简单的小工具,闲来无事做了一个玩玩。 代码部分: import tkinter as tk from tkinter import filedialog, messagebox, ttk from moviepy.editor import VideoFileClip import threading import os def video_to_gif(input_video_path, output_gif_path, start_time=None, end_time=None, progress_var=None): """ 将视频转换为GIF。 参数: - input_video_path: 输入视频文件路径 - output_gif_path: 输出GIF文件路径 - start_time: GIF的开始时间(以秒为单位),默认为视频开头 - end_time: GIF的结束时间(以秒为单位),默认为视频结尾 - progress_var: 用于显示进度的 tk.IntVar 对象 """ try: # 加载视频文件 video_clip = VideoFileClip(input_video_path) # 裁剪视频到指定时间段 if start_time is not None and end_time is not None: video_clip = video_clip.subclip(start_time, end_time) # 将视频转换为GIF并保存 video_clip.write_gif(output_gif_path) # 更新进度为100% if progress_var: progress_var.set(100) messagebox.showinfo("完成", f"GIF已成功保存为 {output_gif_path}") except Exception as e: messagebox.showerror("错误", f"转换过程中出现错误: {e}") def convert_to_gif(files): start = start_time.get() end = end_time.get() try: start = float(start) if start else None end = float(end) if end else None except ValueError: messagebox.showerror("错误", "请输入有效的起始和结束时间。") return # 为每个文件创建线程 for file_path in files: output_path = os.path.splitext(file_path)[0] + ".gif" # 创建一个进度条 progress_var = tk.IntVar() progress_bar = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate", variable=progress_var) progress_bar.pack(pady=5) progress_bar_label = tk.Label(root, text=f"转换中: {os.path.basename(file_path)}") progress_bar_label.pack() # 启动转换线程 conversion_thread = threading.Thread(target=video_to_gif, args=(file_path, output_path, start, end, progress_var)) conversion_thread.start() def select_files(): file_paths = filedialog.askopenfilenames(filetypes=[("Video files", "*.mp4;*.avi;*.mov;*.mkv")]) if file_paths: # 将选中的文件路径显示在上方框内 file_list.set('\n'.join(file_paths)) convert_button.config(state=tk.NORMAL) # 创建主窗口 root = tk.Tk() root.title("批量视频转GIF工具") root.geometry("600x400") # 视频路径显示 file_list = tk.StringVar() video_label = tk.Label(root, textvariable=file_list, width=60, height=4, relief="sunken", anchor="w", justify="left") video_label.pack(pady=10) # 文件选择按钮 select_button = tk.Button(root, text="选择文件", command=select_files) select_button.pack(pady=10) #…- 11
- 0