关于ide:16k-Star一个开源的命令行视频播放器

42次阅读

共计 3521 个字符,预计需要花费 9 分钟才能阅读完成。

起源: 高效程序员

mpv 是一个收费、开源、跨平台的多媒体播放器,可用于 Windows、Linux、MacOS、BSD 以及 Android 等平台。

mpv 带有极简的 GUI 界面以及丰盛的命令行管制,它反对各种媒体文件格式、音频和视频编解码器以及字幕类型。

mpv 介绍

mpv 是由 Vincent Lang(首席开发者)在 2012 年从 mplayer2 fork 进去的,而 mplayer2 是在 2010 年从 MPlayer fork 进去的。至于 fork 的动机:次要是(通过删除不可保护的代码以及放弃对老旧零碎的反对)激励开发者,让大家放弃活跃性。

毫不意外,mpv 一经推出,便受到了很高的评估,并取得了大量的奉献。截至目前,已取得了 16K+ Star。

mpv 的几个次要网址:

  • mpv 官网:https://mpv.io
  • mpv GitHub:https://github.com/mpv-player…
  • mpv 装置:https://mpv.io/installation
  • mpv 使用手册:https://mpv.io/manual/master
  • mpv 维基百科:https://github.com/mpv-player…
  • mpv 常见问题:https://github.com/mpv-player…

其次要个性有:

  • 脚本解决

    弱小的脚本能力简直能够让播放器做任何事件,Wiki 上有大量用户脚本可供选择。(https://github.com/mpv-player…)

  • 屏幕控制器

    尽管 mpv 力求简洁,并没有提供真正的 GUI,但它在视频顶部有一个小控制器,用于根本管制。

  • 高品质视频输入

    mpv 具备基于 OpenGL、Vulkan 和 D3D11 的视频输入,可能反对视频发烧友青睐的许多性能,例如:应用风行的高质量算法进行视频缩放、色调治理、帧时序、插值、HDR 等。

  • GPU 视频解码

    mpv 能够利用所有平台上的大多数硬件解码 API,硬件解码可在运行时按需启用。

  • 可嵌入

    mpv 从头开始设计了一个简略的 C API,使其能够作为一个库应用,并便于和其余利用轻松集成。

  • 踊跃开发

    mpv 正在踊跃开发中,专一于代码重构和清理以及增加性能。想要一个性能个性?点这儿吧!(https://github.com/mpv-player…)

基于 mpv 的利用

mpv 的用户群很广,这里有个 第三方利用列表(https://github.com/mpv-player…),简略列举几个:

我的项目 介绍 地址
Baka MPlayer 收费、开源、跨平台,基于 libmpv 的多媒体播放器(Qt5) https://github.com/u8sand/Bak…
Bomi 弱小易用的多媒体播放器(Qt5) https://bomi-player.github.io/
GNOME MPV 简略的 mpv 前端(GTK+3) https://github.com/celluloid-…
SMPlayer Qt 写的领有额定个性的多媒体播放器(CSS 主题、YouTube 整合等)(Qt5) https://www.smplayer.info/
Deepin Movie 由深度开发的全功能视频播放器,反对多种视频格式的本地和流媒体播放(Qt5) https://github.com/linuxdeepi…

SMPlayer 挺好用的,反对大部分的音视频文件。可进行音频轨道切换,容许亮度、对比度、色调等调节,并依照倍速、4 倍速等多种速度回放,还可进行音频和字幕提早调整以实现它们之间的同步。

装置 mpv

mpv 是一个罕用利用,已退出到了大多数 Linux 发行版的默认仓库中。

以 Ubuntu 为例,执行以下命令便能够疾速装置 mpv:

$ sudo apt update
$ sudo apt install mpv
$ sudo apt install libmpv-dev

实现之后,可通过以下命令查看 mpv 的帮忙信息:

$ mpv --help

如果要查看其反对的选项,可执行以下命令:

$ mpv --list-options

选项有很多,总共 400 多个。所以千万不要小看它,只管 mpv 播放器只有极简的界面,但它的性能超级弱小,其次要能力都来自于命令行。

应用 mvp 播放器

关上 mpv 播放器,拖放 一个本地媒体文件到窗口中,即可主动进行播放。

留神: 界面没有任何菜单项,只能通过拖放媒体文件来操作。

能够看到,mpv 的界面很简洁,只有一个控制面板(在鼠标挪动到播放窗口上才会显示),该面板上有播放 / 暂停、快进 / 快退以及全屏等性能。

若要播放在线视频,只能应用命令行模式:
$ mpv http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4

留神:mpv 的默认大小,取决于所播放的视频画质。比方一个 240p 的视频,播放窗口会比拟小,而在全高清显示器上播放 1080p 视频时,简直会占满整个屏幕。

基于 libmvp 二次开发

如果想基于 libmpv 进行二次开发,能够从官网提供的 demo 着手(https://github.com/mpv-player…),简直各种语言版本的都有,例如:C#、Java、Qt、SDL、wxWidgets …… 当然,也可参考下面提到的第三方利用。

上面以 Qt 为例,编写一个简略的 mpv 播放器:

源码如下:

#include <QApplication>
#include <QWidget>
#include <QtDebug>

#include <mpv/client.h>

static inline void checkError(int status)
{if (status < 0) {qWarning() << QString("mpv error: %1").arg(mpv_error_string(status));
        exit(1);
    }
}

int main(int argc, char* argv[])
{QApplication app(argc, argv);

    /*
     * QApplication 设置了 setlocale(LC_ALL, ""),* 但 mpv 须要将 LC_NUMERIC 设置为 "C",所以得改回来。*/
    std::setlocale(LC_NUMERIC, "C");

    // 创立一个 Qt 界面
    QWidget widget;
    widget.setMinimumSize(640, 480);

    // 创立 mpv 实例
    mpv_handle *mpv = mpv_create();
    if (mpv == nullptr) {qWarning() << "failed creating context";
        return 1;
    }

    // 设置播放句柄
    WId wid = widget.winId();
    mpv_set_property(mpv, "wid", MPV_FORMAT_INT64, &wid);

    /*
     * 启用默认的按键绑定,这样就能够与播放器交互了
     * 例如:{和} 倍速播放、P/SPACE 键暂停 / 复原
     * 通常应用 mpv 作为后盾的播放器,会实现本人的按键绑定
    */
    mpv_set_option_string(mpv, "input-default-bindings", "yes");

    // 启用 X11 窗口的键盘输入
    mpv_set_option_string(mpv, "input-vo-keyboard", "yes");

    // 设置音量
    double volume = 60.0;
    checkError(mpv_set_property(mpv, "volume", MPV_FORMAT_DOUBLE, &volume));

    // 初始化 mpv 实例
    checkError(mpv_initialize(mpv));

    // 启用日志(级别为 Info 或更高)checkError(mpv_request_log_messages(mpv, "info"));

    // 播放文件
    QString fileName = "/home/waleon/video/big_buck_bunny.mkv";
    QByteArray file = fileName.toUtf8();
    const char *args[] = {"loadfile", file.constData(), Q_NULLPTR};
    mpv_command_async(mpv, 0, args);

    // 显示界面
    widget.show();

    int ret = app.exec();

    // 开释 mpv 实例
    mpv_terminate_destroy(mpv);

    return ret;
}

是不是很简略,只有几十行代码就搞定了!

开源前哨 日常分享热门、乏味和实用的开源我的项目。参加保护 10 万 + Star 的开源技术资源库,包含:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

正文完
 0