随机播放媒体文件
用python实现一个功能,有两个文件夹,文件内都放有若干个媒体文件,要求程序控制播放器随机播放文件1里的媒体文件,当键盘输入文件夹2内文件序号时,播放文件夹2内对应的媒体文件,播放完后回到随机播放文件夹1内的媒体文件import os
import random
import pygame
import threading
# 初始化pygame
pygame.mixer.init()
def play_media_from_folder(folder, stop_event):
"""随机播放文件夹内的媒体文件"""
files =
while not stop_event.is_set():
if files:
selected_file = random.choice(files)
pygame.mixer.music.load(os.path.join(folder, selected_file))
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() and not stop_event.is_set():
pass# 等待音乐播放完
def play_specific_media(folder, index):
"""播放指定序号的媒体文件"""
files =
if 0 <= index < len(files):
pygame.mixer.music.pause()# 暂停文件夹1的音乐
print(f"线程暂停,开始播放:{folder}:{index}")
pygame.mixer.music.load(os.path.join(folder, files))
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
pass# 等待音乐播放完
pygame.mixer.music.unpause()# 播放完后恢复文件夹1的音乐
else:
print("序号超出范围。")
def list_media_files(folder):
"""列出文件夹内的媒体文件"""
files =
for i, file in enumerate(files):
print(f"{i}: {file}")
return files
def main(folder1, folder2):
stop_event = threading.Event()# 控制播放线程的停止
# 启动随机播放线程
thread = threading.Thread(target=play_media_from_folder, args=(folder1, stop_event), daemon=True)
thread.start()
print("文件夹2内的媒体文件:")
media_files = list_media_files(folder2)
print("输入文件夹2内文件的序号播放对应媒体,输入 'exit' 退出:")
while True:
command = input()
if command.lower() == 'exit':
stop_event.set()# 设置停止事件,结束播放线程
break
try:
index = int(command)
stop_event.set()
play_specific_media(folder2, index)
stop_event.clear()
thread = threading.Thread(target=play_media_from_folder, args=(folder1, stop_event), daemon=True)
thread.start()
except ValueError:
print("无效的输入,请输入正确的序号。")
except IndexError:
print("无效的序号,请再试一次。")
if __name__ == '__main__':
folder1 = 'm1'# 替换为文件夹1的路径
folder2 = 'm2'# 替换为文件夹2的路径
main(folder1, folder2)
pip install pygame
pip install opencv-python numpy
#打开视频没有声音
def play_video(video_path):
# 打开视频文件
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print("无法打开视频文件。")
return
while True:
# 逐帧读取视频
ret, frame = cap.read()
if not ret:
break# 视频播放完毕
# 显示当前帧
cv2.imshow('Video', frame)
# 按键控制,按 'q' 退出
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# 释放视频捕捉对象
cap.release()
cv2.destroyAllWindows() 用python实现一个功能,有两个文件夹,文件内都放有若干个MP4文件,要求程序控制播放器随机播放文件1里的MP4文件,当键盘输入文件夹2内文件序号时,播放文件夹2内对应的MP4文件,播放完后回到随机播放文件夹1内的mp4文件。 如果需要播放 MP4 文件并且有声音,可以使用 moviepy 库,它支持视频和音频的播放。以下是使用 moviepy 播放 MP4 文件的示例代码:
pip install moviepy
import os
import random
import threading
from moviepy.editor import VideoFileClip
def play_media_from_folder(folder, stop_event):
"""随机播放文件夹内的 MP4 文件"""
files =
while not stop_event.is_set():
if files:
selected_file = random.choice(files)
video = VideoFileClip(os.path.join(folder, selected_file))
video.preview()# 播放视频
if stop_event.is_set():# 检查是否需要停止
break
def play_specific_media(folder, index):
"""播放指定序号的 MP4 文件"""
files =
if 0 <= index < len(files):
video = VideoFileClip(os.path.join(folder, files))
video.preview()# 播放指定视频
else:
print("序号超出范围。")
def list_media_files(folder):
"""列出文件夹内的 MP4 文件"""
files =
for i, file in enumerate(files):
print(f"{i}: {file}")
return files
def main(folder1, folder2):
stop_event = threading.Event()# 控制播放线程的停止
# 启动随机播放线程
thread = threading.Thread(target=play_media_from_folder, args=(folder1, stop_event), daemon=True)
thread.start()
print("文件夹2内的 MP4 文件:")
list_media_files(folder2)
print("输入文件夹2内文件的序号播放对应媒体,输入 'exit' 退出:")
while True:
command = input()
if command.lower() == 'exit':
stop_event.set()# 设置停止事件,结束播放线程
break
try:
index = int(command)
stop_event.set()# 暂停随机播放
thread.join() # 等待随机播放线程结束
play_specific_media(folder2, index)
stop_event.clear()# 清除停止事件,恢复随机播放
thread = threading.Thread(target=play_media_from_folder, args=(folder1, stop_event), daemon=True)
thread.start() # 重新启动随机播放线程
except ValueError:
print("无效的输入,请输入正确的序号。")
except IndexError:
print("无效的序号,请再试一次。")
if __name__ == '__main__':
folder1 = 'path/to/folder1'# 替换为文件夹1的路径
folder2 = 'path/to/folder2'# 替换为文件夹2的路径
main(folder1, folder2)
#使用vlc播放视频
import os
import random
import threading
import vlc
import time
class VideoPlayer:
def __init__(self):
self.instance = vlc.Instance()
self.player = self.instance.media_player_new()
def play_video(self, video_path):
"""使用 VLC 播放视频和音频"""
if not os.path.exists(video_path):
print(f"文件不存在: {video_path}")
return
# 停止任何当前正在播放的媒体
if self.player.is_playing():
self.player.stop()
# 加载并播放新的视频文件
media = self.instance.media_new(video_path)
self.player.set_media(media)
self.player.play()
# 等待视频加载并播放
time.sleep(1)
# 等待播放结束
while self.player.is_playing():
time.sleep(0.1)
def stop(self):
"""停止播放"""
if self.player.is_playing():
self.player.stop()
def play_media_from_folder(folder, player, stop_event):
"""随机播放文件夹内的 MP4 文件"""
files =
while not stop_event.is_set():
if files:
selected_file = random.choice(files)
player.play_video(os.path.join(folder, selected_file))
def play_specific_media(folder, player, index):
"""播放指定序号的 MP4 文件"""
files =
if 0 <= index < len(files):
player.play_video(os.path.join(folder, files))
else:
print("序号超出范围。")
def list_media_files(folder):
"""列出文件夹内的 MP4 文件"""
files =
for i, file in enumerate(files):
print(f"{i}: {file}")
return files
def main(folder1, folder2):
stop_event = threading.Event()# 控制播放线程的停止
player = VideoPlayer()# 创建一个播放器实例
# 启动随机播放线程
thread = threading.Thread(target=play_media_from_folder, args=(folder1, player, stop_event), daemon=True)
thread.start()
print("文件夹2内的 MP4 文件:")
list_media_files(folder2)
print("输入文件夹2内文件的序号播放对应媒体,输入 'exit' 退出:")
while True:
command = input()
if command.lower() == 'exit':
stop_event.set()# 设置停止事件,结束播放线程
player.stop() # 停止播放器
break
try:
index = int(command)
stop_event.set()# 暂停随机播放
thread.join() # 等待随机播放线程结束
play_specific_media(folder2, player, index)
stop_event.clear()# 清除停止事件,恢复随机播放
thread = threading.Thread(target=play_media_from_folder, args=(folder1, player, stop_event), daemon=True)
thread.start() # 重新启动随机播放线程
except ValueError:
print("无效的输入,请输入正确的序号。")
except IndexError:
print("无效的序号,请再试一次。")
if __name__ == '__main__':
folder1 = 'm1'# 替换为文件夹1的路径
folder2 = 'm2'# 替换为文件夹2的路径
main(folder1, folder2)
页:
[1]