会员登录 立即注册

搜索

随机播放媒体文件

[复制链接]
崎山小鹿
4 天前 171 4 看全部
用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 = [f for f in os.listdir(folder) if f.endswith(('.mp3', '.wav', '.ogg'))]
    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 = [f for f in os.listdir(folder) if f.endswith(('.mp3', '.wav', '.ogg'))]
    if 0 <= index < len(files):
        pygame.mixer.music.pause()  # 暂停文件夹1的音乐
        print(f"线程暂停,开始播放:{folder}:{index}")
        pygame.mixer.music.load(os.path.join(folder, files[index]))
        pygame.mixer.music.play()
        while pygame.mixer.music.get_busy():
            pass  # 等待音乐播放完
        pygame.mixer.music.unpause()  # 播放完后恢复文件夹1的音乐

    else:
        print("序号超出范围。")

def list_media_files(folder):
    """列出文件夹内的媒体文件"""
    files = [f for f in os.listdir(folder) if f.endswith(('.mp3', '.wav', '.ogg'))]
    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)
天不生墨翟,万古如长夜!加我微信:qishanxiaolu
想制作数字人或直播平台的请和我们联系,微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 4 天前 | 显示全部楼层
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()
天不生墨翟,万古如长夜!加我微信:qishanxiaolu
想制作数字人或直播平台的请和我们联系,微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 4 天前 | 显示全部楼层
用python实现一个功能,有两个文件夹,文件内都放有若干个MP4文件,要求程序控制播放器随机播放文件1里的MP4文件,当键盘输入文件夹2内文件序号时,播放文件夹2内对应的MP4文件,播放完后回到随机播放文件夹1内的mp4文件。
天不生墨翟,万古如长夜!加我微信:qishanxiaolu
想制作数字人或直播平台的请和我们联系,微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 4 天前 | 显示全部楼层
如果需要播放 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 = [f for f in os.listdir(folder) if f.endswith('.mp4')]
    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 = [f for f in os.listdir(folder) if f.endswith('.mp4')]
    if 0 <= index < len(files):
        video = VideoFileClip(os.path.join(folder, files[index]))
        video.preview()  # 播放指定视频
    else:
        print("序号超出范围。")

def list_media_files(folder):
    """列出文件夹内的 MP4 文件"""
    files = [f for f in os.listdir(folder) if f.endswith('.mp4')]
    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)
天不生墨翟,万古如长夜!加我微信:qishanxiaolu
想制作数字人或直播平台的请和我们联系,微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 3 天前 | 显示全部楼层
#使用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 = [f for f in os.listdir(folder) if f.endswith('.mp4')]
    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 = [f for f in os.listdir(folder) if f.endswith('.mp4')]
    if 0 <= index < len(files):
        player.play_video(os.path.join(folder, files[index]))
    else:
        print("序号超出范围。")

def list_media_files(folder):
    """列出文件夹内的 MP4 文件"""
    files = [f for f in os.listdir(folder) if f.endswith('.mp4')]
    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)
天不生墨翟,万古如长夜!加我微信:qishanxiaolu
想制作数字人或直播平台的请和我们联系,微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

  • 您可能感兴趣
  • 用神经网络自动玩游戏
    用神经网络自动玩游戏
    用神经网络玩游戏 CartPole是OpenAI gym中的一个游戏测试,车上顶着一个自由摆动的杆子
    10-21
  • 尝试给视频换脸
    尝试给视频换脸
    今天尝试修改一个视频,就是将视频中的人物通过换脸换成我的脸,看看最终效果怎么样。
    10-20
  • 可拆卸太阳能充电屋
    可拆卸太阳能充电屋
    可拆卸太阳能充电屋
    10-19
  • 农村无人菜园
    农村无人菜园
    网上的客户通过操控无人机进菜园摘菜,称重,付款,打包,邮寄。 这样可以激活很多
    10-19
  • 站长日记-天道与畜生道
    站长日记-天道与畜生道
    天道无情,但众生平等,无为却处处体现博爱。畜生道有情,讲的是尊卑次序只为繁衍,处
    06-20
您需要登录后才可以回帖 登录 | 立即注册 |

本版积分规则 返回列表

管理员给TA私信
加我微信:qishanxiaolu

查看:171 | 回复:4

  • 用神经网络自动玩游戏

    用神经网络玩游戏 CartPole是OpenAI gym中的一个游戏测试,车上顶着一个自由摆动的杆子

    阅读:63|2024-10-21
  • 尝试给视频换脸

    今天尝试修改一个视频,就是将视频中的人物通过换脸换成我的脸,看看最终效果怎么样。

    阅读:128|2024-10-20
  • 可拆卸太阳能充电屋

    可拆卸太阳能充电屋

    阅读:110|2024-10-19
  • 农村无人菜园

    网上的客户通过操控无人机进菜园摘菜,称重,付款,打包,邮寄。 这样可以激活很多

    阅读:136|2024-10-19
  • 墨家的起源以及发展

    墨家真的是武士演变而来的吗?在冯友兰的《中国哲学简史》中有这样的描述。儒家和墨家

    阅读:230|2024-10-18
  • 根据语音生成视频33搜帧

    33搜帧,是一个能根据语音生成视频的网站, https://fse.agilestudio.cn/ 33搜帧是一

    阅读:290|2024-10-18
  • 无人机拍摄卖素材

    使用无人机拍摄各大城市的地标建筑,不同季节、不同时间下的美景,然后挂到光厂上卖。

    阅读:214|2024-10-17
  • 利用闲置宽带提供CDN服务赚钱

    内容分发网络CDN,阿里云CDN每G数据成本在0.24元,idc收入1G 8万 每年,家宽1G 大几百

    阅读:245|2024-10-16
  • 定制激光雕刻

    几乎支持任何材质的雕刻 啄木鸟4代激光雕刻机 木质用蓝光雕刻 石板用红光雕刻 金属用

    阅读:224|2024-10-16
  • 在线字数统计

    https://www.eteste.com/ 能将一段文字统计出文字数量以及标点符号的数量

    阅读:272|2024-10-16
金双石科技,软件开发20年,技术行业领先,您的满意,就是我们的目标,认真负责,开拓进取,让成品物超所值
关于我们
公司简介
发展历程
联系我们
本站站务
友情链接
新手指南
内容审核
商家合作
广告合作
商家入驻
新闻合作

手机APP

官方微博

官方微信

联系电话:15876572365 地址:深圳市宝安区西乡街道宝民二路宝民花园 ( 粤ICP备2021100124号-1 ) 邮箱:qishanxiaolu@qq.com
QQ|Powered by Discuz! X3.5 © 2001-2024 Discuz! Team.
快速回复 返回顶部 返回列表