import subprocess import tkinter as tk from tkinter import ttk import threading import time class VideoPlayer: def __init__(self, root, video_path): self.root = root self.video_path = video_path self.is_paused = False self.is_running = True # 创建界面元素 self.canvas = tk.Canvas(root, width=640, height=480) self.canvas.pack() self.play_button = tk.Button(root, text="播放/暂停", command=self.toggle_pause) self.play_button.pack(side=tk.LEFT) self.restart_button = tk.Button(root, text="重新播放", command=self.restart_video) self.restart_button.pack(side=tk.LEFT) self.progress = ttk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL, command=self.update_position) self.progress.pack(fill=tk.X, expand=True) # 启动播放视频线程 self.video_thread = threading.Thread(target=self.play_video) self.video_thread.start() def toggle_pause(self): """切换播放/暂停状态""" if self.is_paused: self.is_paused = False else: self.is_paused = True def restart_video(self): """重新开始播放""" self.is_paused = False self.progress.set(0) self.play_video() def update_position(self, value): """更新进度条位置""" self.current_position = float(value) def play_video(self): """播放视频并更新进度条""" # subprocess.run 会阻塞,启动一个后台进程运行 ffplay ffplay_cmd = ["ffplay", "-i", self.video_path, "-v", "quiet", "-x", "640", "-y", "480", "-autoexit"] # 创建 subprocess 来播放视频 process = subprocess.Popen(ffplay_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) while self.is_running: if self.is_paused: continue # 更新进度条 self.update_progress(process) time.sleep(0.1) # 控制更新频率 process.wait() # 等待视频播放结束 self.restart_video() # 播放结束后自动重播 def update_progress(self, process): """更新进度条""" # 获取 ffplay 的输出并更新进度 stdout, stderr = process.communicate() lines = stderr.decode().splitlines() for line in lines: if "time=" in line: # 提取时间信息 current_time = line.split("time=")[-1].split(" ")[0] hours, minutes, seconds = map(float, current_time.split(":")) total_seconds = hours * 3600 + minutes * 60 + seconds video_duration = 120 # 手动设置视频时长,或者通过其他方式获取时长 progress_percentage = (total_seconds / video_duration) * 100 self.progress.set(progress_percentage) def close(self): """关闭视频播放器""" self.is_running = False self.video_thread.join() # 创建 Tkinter 窗口 root = tk.Tk() root.title("视频播放器") media_path = "E:/抖音-AI风景/data/关注/1515593476095344/视频/7375164244729302272.mp4" # 替换为实际视频文件路径 player = VideoPlayer(root, media_path) root.protocol("WM_DELETE_WINDOW", player.close) root.mainloop()