Python实现随机视频播放及1-4秒随机时长遇阻求助
解决视频随机时长播放的问题
你的代码核心问题是随机时长只生成了一次:你把intervall = random.randint(1,4)写在了while循环外面,整个程序运行期间只会产生一个固定的随机数,每次播放都用同一个时长,自然达不到每次随机1-4秒的效果。
接下来给你修正后的方案,同时优化几个潜在问题:
关键修改点
- 将随机生成播放时长的代码移到while循环内部,每次循环都重新生成1-4秒的随机值
- 增加视频长度校验,避免视频本身比随机时长还短导致报错
- 改用ffprobe的结构化输出参数,更稳定地获取视频时长,避免解析文本出错
修正后的完整代码
import random import time import subprocess import vlc import os import json # 创建视频列表(仅包含文件,排除子文件夹) subfolder = "videos" videos = [os.path.join(subfolder, f) for f in os.listdir(subfolder) if os.path.isfile(os.path.join(subfolder, f))] # 初始化VLC播放器 player = vlc.MediaPlayer() try: print("脚本运行中... 按Ctrl+C退出") while True: # 1. 随机选择一个视频 video_path = random.choice(videos) # 2. 每次循环随机生成1-4秒的播放时长 intervall = random.randint(1, 4) # 3. 用ffprobe获取视频时长(更可靠的结构化方式) try: result = subprocess.check_output( ['ffprobe', '-v', 'quiet', '-show_format', '-print_format', 'json', video_path], stderr=subprocess.STDOUT ) data = json.loads(result) video_duration = float(data['format']['duration']) except Exception as e: print(f"获取视频时长失败: {e}") continue # 4. 校验视频时长是否足够,避免报错 if video_duration <= intervall: print(f"视频{video_path}时长不足{intervall}秒,跳过") continue # 5. 计算随机起始位置 max_position = video_duration - intervall position = random.uniform(0, max_position) # 6. 播放视频并跳转到指定位置 player.set_mrl(video_path) player.play() # 短暂等待播放器初始化,确保位置设置生效 time.sleep(0.1) player.set_time(int(position * 1000)) # 7. 播放指定时长后切换下一个视频 time.sleep(intervall) except KeyboardInterrupt: print("脚本已退出")
额外说明
- 优化了视频列表生成逻辑,自动过滤子文件夹
- 用ffprobe的JSON输出解析时长,比原文本匹配方式更稳定,不会因为输出格式变化失效
- 增加异常处理,单个视频出错不会导致整个脚本崩溃
- 添加播放器初始化等待,解决
set_time可能失效的问题
内容的提问来源于stack exchange,提问作者mondher
相关产品推荐
相关产品推荐

