IINA - 一个现代的 macOS 视频播放器

2017-01-04 19:14:15 +08:00
 lhc70000

作为一个 Mac 用户,或许你和我一样感到过疑惑:为什么这样一个拥有众多高质量软件的平台,竟没有一个强大而优雅的视频播放器。

说起 macOS 上的视频播放器,大多数人会举出 QuickTime 、 VLC 、 MPlayerX 等名字,然而他们的缺点也显而易见: QuickTime 支持的格式太少; VLC 界面不美观,也时常卡顿; MPlayerX 基于稍稍过时的 mplayer ,不再有大幅更新,而且界面......不是那么 Mac 。

这个知乎问题中,有人推荐过了 mpv 。 mpv 是 mplayer 系唯一活跃开发的分支,也是当前跨平台功能最强大的播放软件之一。两年前的我也是从这个问题才了解到 mpv ,当即装上测试,对它的解码能力和强大配置选项有了很深的印象。但即使作为程序员的我,也用不惯它的命令行界面:一个媒体类软件,怎能没有一个好用好看的 UI 呢?

所以今年暑假,我突然冒出「做一个现代的 macOS 视频播放器」的想法。我经常想出个点子做一两天之后坑掉,但是幸运的是,对于这个项目,虽然中间由于自己懒和课程太忙暂停了好一阵,我还是坚持下来了。

Project IINA,是一个基于 mpv 、契合 macOS 设计风格、力求做到最佳用户体验、轻便且功能强大的视频播放器项目。

解码和播放

IINA 以 mpv 为播放核心,所以享受到了 mpv 解码和图像方面的所有优点。与 MPlayerX 使用的 slave mode 不同, IINA 使用了 libmpv 的 C API ,来提供更加稳定快速的渲染和控制。此外,它使用原始屏幕分辨率渲染,所以比起其他一些播放器画质有显著提高。

( IINA 与 MPlayerX 同分辨率下的字幕渲染对比)

用户界面

不多说,先上截图:

当前 macOS 的毛玻璃效果可以选择材质,所以标题栏和播放控制有四种主题可选: Dark (截图中的主题)、 Ultra Dark 、 Light 和 Medium Light 。

语言方面,开发(和截图中)语言为英文,但目前几乎所有界面都有简体中文支持。

快速设置

或许你试过在其他播放器中,调整音频延迟等选项时,需要不断点击菜单项来一次又一次地加减音频延迟的数值;或者在选择音轨字幕时,展开好几层菜单来找到需要的那一个。当然, IINA 提供了和其他播放器一样,甚至更丰富的菜单项,它也提供了一个快速设置界面,涵盖了所有常用的视频、音频和字幕选项,并使用了各种可交互的控件来大大加快更改各种播放设置的效率。

(视频设置)

(音频设置)

(字幕设置)

这些界面只需一个快捷键即可调出。传统的菜单项设置也全部保留,方便有任何需求的用户。

甚至对于画面剪切(用途有去黑边等),除去快速设置中的按常用长宽比剪切,它甚至提供了一个全交互式的剪切界面(此界面将来可扩展至更多设置):

播放列表和章节

IINA 支持简易的播放列表(更多功能稍后添加)。对于分章节的视频,它更是可以把内容及起始时间一目了然地列出:

(播放列表)

(章节)

点击即可跳转至相应视频或者时间。

丰富的设置项

IINA 希望能迎合尽可能多用户的喜好。在开发过程中,遇到和身边人不同的操作习惯,我会把它们作为可选的设置项加入偏好设置。

比如,播放按钮两边的左右箭头,可以选择调整速度(类似 QuickTime )、上一个 /下一个媒体( MPlayerX )或是前进 /后退;又如鼠标在播放界面单击和双击,都可以有可选的相应动作。

我也尽量满足一些「强迫症」用户的偏好,所以在拖动播放控制时,可以吸附窗口中心;又如在根据视频大小调整窗口大小时,可以选择根据 Retina 屏物理分辨率还是逻辑分辨率。

对于快捷键, IINA 保留了整个 mpv 的 input.conf 系统,以做到与原来 mpv 用户的最大兼容。但是,用户可以有多个快捷键配置文件,并在 GUI 中切换和编辑他们(暂时可以做到快捷键配置的管理和录制新快捷键,但对应命令需要自行输入;此问题会尽快解决)。

欲查看所有设置项的截图,请访问 IINA 的网站(链接在文章底部)。

MPV 的配置文件和脚本系统

当然, IINA 支持 mpv 强大的配置文件和 lua 脚本系统。对于现有的 mpv 用户,只需要打上一个勾, IINA 就会自动使用原有的全部配置(并覆盖偏好设置中的相关项),从而几乎无缝切换到一个同样内核但有强大界面的新播放器。

目前 IINA 也支持 mpv 的日志功能( Debug 用),以及使用 mpv 自己的 osd 。

当然,对于不熟悉 mpv 的用户,这些选项平时会被禁用,不会有任何影响。

面向现代 macOS

现有的播放器有很多都含有不少冗余部分,如 MPlayerX ,含有很多用于兼容 10.6 的代码,而如今几乎没有人在使用此版本。 IINA 仅面向现代 macOS ,支持 macOS 10.10+,推荐使用 macOS 10.12 。

免费,开源,期待你的参与

IINA 由纯 Swift 写成,并在 github 上使用 GPLv3 开源。 IINA 不管现在还是将来,都将免费。

如果你对这个项目感兴趣,可以用各种方式给我反馈:

Alpha 1

目前 IINA 已经推出了第一个版本 v0.0.1 。不过由于我的经验不足,我相信此版本仍有很多待解决的问题。如果你发现了问题,甚至软件根本不能打开,请在 github 上提出 issue 或者通过邮件 /私信等方式联系我。

下载地址等请参见网站,或 github 上的 release 。

Github : https://github.com/lhc70000/iina

网站:https://lhc70000.github.io/iina/zh-cn/

(第一次发帖就是类似广告的东西,还请大家见谅^ ^||)

72289 次点击
所在节点    分享创造
228 条回复
Majirefy
2017-01-04 23:34:34 +08:00
This is 他妈的我正想要的
太棒了!!!!
chiv2
2017-01-04 23:41:06 +08:00
怎么读? I 还是 L ?
pangtianyu
2017-01-04 23:47:36 +08:00
打不开你的网站。。
ZhaoMiing
2017-01-04 23:50:41 +08:00
typcn
2017-01-04 23:53:35 +08:00
才发现 libmpv for mac 有 opengl cb 接口了。。。

楼主要是没数字签名我可以帮忙。。。
ZRS
2017-01-04 23:54:39 +08:00
用了一下反馈个问题,这个功耗有点吃不消啊,不知道 LZ 预置的参数是什么...
iamocean
2017-01-04 23:58:47 +08:00
不错!
lhc70000
2017-01-05 00:06:54 +08:00
@kitawa
@byicer
@wangpao
@kazarin
@xucheng
@znoodl
@hoythan
@ZRS
@goodryb
@chiv2
@ZRS

感谢各位的反馈,都已记录。由于有回复限制,恕不一一回复;
我先建了个测试反馈用 QQ 群,如果感兴趣,请加入 142730636~
( Telegram 的话暂时我忙不过来,过几天吧,抱歉)

读法是 i-na

自动更新下个版本一定加上。

关于一些 mpv 设置项: save-position-on-quit 目前不工作,不知为何好像只对命令行直接打开的文件才起作用;我会考虑单独实现此功能,不依靠 mpv 。 mpv 的一些窗口设置,由于用的不是它自己的窗口,很可能大部分都不工作。
f0rger
2017-01-05 00:08:46 +08:00
多一个选择没什么错,继续加油,做到好用就太感谢了
aborigine
2017-01-05 00:09:11 +08:00
nice !
hronro
2017-01-05 00:15:03 +08:00
这个厉害了!!!
fatedier
2017-01-05 00:21:27 +08:00
赞,看起来很不错。
xucheng
2017-01-05 00:28:17 +08:00
@lhc70000

> save-position-on-quit 目前不工作,不知为何好像只对命令行直接打开的文件才起作用;我会考虑单独实现此功能

MPV 的文档说明: This does not happen if playback of a file is stopped in any other way than quitting.

> mpv 的一些窗口设置,由于用的不是它自己的窗口,很可能大部分都不工作。

感觉可以通过在 UI 的事件回调函数里向 MPV 发送事件实现。同意的可以通过 MPV 的回调函数向 UI 发送事件。
mikewoo
2017-01-05 00:34:58 +08:00
支持,非常感谢
winduser
2017-01-05 00:35:45 +08:00
支持楼主!感谢楼主的工作!
zwpaper
2017-01-05 00:44:19 +08:00
Star 一记,有空也看看~
lhc70000
2017-01-05 00:47:13 +08:00
@xucheng

是的,我试过在退出时执行 write-watch-later-config 手动让它写 watch_later 临时文件;临时文件目录中也确认有写入;但是就是不能恢复播放,也没有找到能手动恢复的命令。目前 IINA 打开文件都是通过 mpv 的 load-file 命令打开的,测试了一下也发现 mpv 只有在播放命令行中传入的文件时才会恢复,其他如在播放列表内跳转等都不会自动恢复。所以怀疑用 client API 可能没有相应的方法实现恢复播放。目前代码中有上述逻辑,暂时注释掉了。我先去问问 mpv 的开发者,如果不行就单独实现一下读取 watch_later 的临时文件。


窗口方面感觉需要解决的问题还是不少,毕竟现在窗口相关几乎全是自己的逻辑。用 client API 应该不能向 mpv 发送 event ,只能接收,而且没有窗口相关的 event 。或许可以手动读取 option 然后相关 UI 做出反应,但这部份如果想做估计会晚一些了, 我先记下,等到基本功能稳定时考虑兼容。如果您有空余时间和精力可以帮助开发^ ^

感谢反馈!
ITOutsider
2017-01-05 01:01:23 +08:00
如何不使用快捷組合鍵快速全屏? UI 內沒找到全屏按鈕
sodatea
2017-01-05 01:16:02 +08:00
赞一个~

话说进度条能否做得长一点?现在的样子不好精确控制跳转时间
Showfom
2017-01-05 01:17:28 +08:00
不错 收藏了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/332235

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX