python-mpv, python 接口到出色的mpv媒体播放器

分享于 

7分钟阅读

GitHub

  繁體 雙語
Python interface to the awesome mpv media player
  • 源代码名称:python-mpv
  • 源代码网址:http://www.github.com/jaseg/python-mpv
  • python-mpv源代码文档
  • python-mpv源代码下载
  • Git URL:
    git://www.github.com/jaseg/python-mpv.git
    Git Clone代码到本地:
    git clone http://www.github.com/jaseg/python-mpv
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/jaseg/python-mpv
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    python-mpv

    python mpv是一款基于ctypes的python 媒体播放器接口。 它让你或多或少地完全控制播放机的所有特性,就像lua接口所做的那样。

    安装

    pip install python-mpv

    尽管你可以将 mpv.py 插件复制到你的项目中,因为它们都很好地包含在一个文件中。

    要求

    ( no )

    libmpv.so 本地( 在你当前的工作目录中) 或者系统库搜索路径中的某个位置。 这个模块对 libmpv 版本有些简单,但是因为 libmpv 变得非常频繁,所以在使用最新版本时。 这里模块的单元测试执行一些基本的自动版本兼容性检查。 如果发现这里缺少任何东西,请打开一个发行文件,或者提交一个请求请求( github )。

    python 3.5

    master 分支只支持最近的python 发布版本,但是有一些过时但功能功能的 py2compat分支插件,提供 python 2兼容。

    支持平台

    的Linux,英镑的Windows 和的OSX似乎都能很好地工作。 有关在 Windows 上安装的一些说明,请参见注释。 共享库处理在 Windows 上非常糟糕,因此需要一些痛苦。 在OSX上,事件逻辑似乎有一些 Bug 接口。 有关详细信息,请参阅问题 36问题 61. 创建一个is窗口似乎是一个解决方案( 大约 10处),但是如果你想要这样做,请重新调度。

    用法

    import mpv
    player = mpv.MPV(ytdl=True)
    player.play('https://youtu.be/DOmdB7D-pUU')

    线程

    由于MPV发送必须快速处理的事件,所以 mpv 模块为事件处理启动一个线程。 事件队列具有固定的maxmimum大小,某些操作可能会导致发送大量事件。

    如果要自己处理线程,可以将 start_event_thread=False 传递给 mpv 构造函数,并手动调用对象函数的mpv_loop。 如果你有一些强大的需要不使用线程和使用一些外部事件循环( 如 asyncio ),也可以使用一些工作。 后端 libmpv的API有一个函数,用于为句柄生成一种事件文件描述符。 可以使用它生成可以传递给事件循环的文件描述符,以告诉它在每个传入事件中唤醒 python cer事件处理程序。

    所有API函数都是线程安全的。 如果没有,请在github上提交一个问题。

    高级用法

    日志,属性,键绑定,截图和 youtube dl
    #!/usr/bin/env python3import mpvdefmy_log(loglevel, component, message):
     print('[{}] {}: {}'.format(loglevel, component, message))
    player = mpv.MPV(log_handler=my_log, ytdl=True, input_default_bindings=True, input_vo_keyboard=True)# Property access, these can be changed at runtime@player.property_observer('time-pos')deftime_observer(_name, value):
     # Here, _value is either None if nothing is playing or a float containing# fractional seconds since the beginning of the file.print('Now playing at {:.2f}s'.format(value))
    player.fullscreen =Trueplayer.loop_playlist ='inf'# Option access, in general these require the core to reinitializeplayer['vo'] ='opengl'@player.on_key_press('q')defmy_q_binding():
     print('THERE IS NO ESCAPE')@player.on_key_press('s')defmy_s_binding():
     pillow_img = player.screenshot_raw()
     pillow_img.save('screenshot.png')
    player.play('https://youtu.be/DLzxrzFCyOs')
    player.wait_for_playback()del player
    播放列表句柄
    #!/usr/bin/env python3import mpv
    player = mpv.MPV(ytdl=True, input_default_bindings=True, input_vo_keyboard=True)
    player.playlist_append('https://youtu.be/PHIGke6Yzh8')
    player.playlist_append('https://youtu.be/Ji9qSuQapFY')
    player.playlist_append('https://youtu.be/6f78_Tf4Tdk')
    player.playlist_pos =0whileTrue:
     # To modify the playlist, use player.playlist_{append,clear,move,remove}. player.playlist is read-onlyprint(player.playlist)
     player.wait_for_playback()
    嵌入式PyQT嵌入
    #!/usr/bin/env python3import mpvimport sysfrom PyQt5.QtWidgets import*from PyQt5.QtCore import*classTest(QMainWindow):
     def__init__(self, parent=None):
     super().__init__(parent)
     self.container = QWidget(self)
     self.setCentralWidget(self.container)
     self.container.setAttribute(Qt.WA_DontCreateNativeAncestors)
     self.container.setAttribute(Qt.WA_NativeWindow)
     player = mpv.MPV(wid=str(int(self.container.winId())),
     vo='x11', # You may not need thislog_handler=print,
     loglevel='debug')
     player.play('test.webm')
    app = QApplication(sys.argv)# This is necessary since PyQT stomps over the locale settings needed by libmpv.# This needs to happen after importing PyQT before creating the first mpv.MPV instance.import locale
    locale.setlocale(locale.LC_NUMERIC, 'C')
    win = Test()
    win.show()
    sys.exit(app.exec_())

    编码约定

    通用目标是 PEP,具有"一致性"部分的自由应用功能。 120单元格线条宽度。4 个空格。 没有标签。可能不需要做纯格式化,除非你认为它真的很有用,或者你真的很喜欢它,如果你不这么做的话,你可以 irks。


    INT  play  接口  媒体  awe  播放器