工作时让视频保持置顶,全屏应用之上也一样

按 P,电影就缩进屏幕角落的一个小窗口,位于所有窗口之上,在你伸手去操作之前,上面只有画面。在 Mac 上,你切换到全屏应用时它也会留在那里,而普通的“始终置顶”窗口做不到这一点。

更新于

有些视频不是你正在做的事,而是手边陪着的事:一边记笔记一边听的讲座,一边工作一边看的比赛,等下载完成时看的电影后半段。Frame Player 为此准备了一种模式。窗口缩进屏幕的一角,位于所有其他窗口之上,在你把鼠标移到它上面之前,不会有任何东西挡住画面。

文档上方的迷你播放器。在边缘附近松开,它会滑完剩下的距离,停在离边缘 24 点的位置:在程序坞之上,绝不会被压在下面;在其他地方松开,它就停在你放下的位置。靠近某一侧时,只有那一侧会吸附:窗口保持你松开时的高度。

使用方法

  1. 打开一个视频:文件、链接或种子,只要能播放就行。
  2. 按 P,或者右键点击画面并选择迷你播放器。在 Mac 上,菜单栏的显示 › 迷你播放器中也有,快捷键是 ⌘⇧M。
  3. 窗口宽度缩小到 420,高度跟随画面本身的比例,并移到屏幕右下角,在程序坞或任务栏之上,绝不会被压在下面。如果播放器处于全屏,会先退出全屏。

移动窗口。迷你窗口没有标题栏,所以直接拖动画面本身。在离边缘或角落 56 点以内松开,窗口会滑完剩下的距离,停在与打开时相同的边距处:屏幕可用区域内 24 点,也就是在菜单栏之下,在程序坞或任务栏之上(在 Windows 上,是正常缩放比例下相同数值的像素)。它绝不会停在离边缘差几个像素的地方,而且两个方向是分开处理的:在右边缘的半高处靠近,它会移到边缘并保持原来的高度。只有在你松开鼠标按钮后才会吸附,拖动途中停顿不会把它从你手下拽走。无论吸附设置如何,迷你窗口都不会有一部分悬在屏幕外面:它没有标题栏,那样就没有地方能把它拖回来了。

调整大小。拖动边缘。窗口变大或变小时,画面保持自己的形状,最小为 240×135 像素。

小窗口里有什么

在这个尺寸下,完整大小的窗口里的所有东西都会压在画面上,所以大部分都会让位:

迷你窗口中会怎样
进度条和时间保留,悬停预览也保留,并缩小以适应窗口;如果放不下画面,只显示时间
上一个、播放和下一个保留,在进度条下方排成一行
音量、倍速、音轨和其他按钮从控制栏中隐藏;右键菜单不受影响
标题栏去掉,在 Mac 上窗口按钮也一起去掉
退出的途径右上角的一个圆形按钮

鼠标停下后所有东西都会淡出,和全屏时一样(对于自动隐藏控制栏设置,迷你播放器视为全屏),鼠标一移到窗口上就会重新出现。跳过片头照样可用:跳过按钮以较小的尺寸出现在画面上,屏幕提示也会相应缩小。

在 Mac 上,迷你窗口总是待在另一个应用旁边,所以它会小心处理那次把它带到前台的点击:这次点击会激活窗口,但不会暂停视频。在它上面用触控板捏合,会缩放画面,而不是调整窗口大小。

返回完整窗口

再按一次 P,点击角落里的圆形按钮,或者在右键菜单中选择退出迷你播放器。窗口会回到之前的大小和位置,“始终置顶”也会恢复成你原来的设置。在画面上双击会退出迷你播放器并直接进入全屏(除非你把画面点击设为仅暂停)。返回开始界面也会退出迷你播放器,因为退出它的按钮位于视频上方。

在 Mac 上,悬浮于全屏应用之上

这是花工夫最多的部分,也是单靠“始终置顶”不够的原因。

在 Mac 上,全屏应用不是桌面上的一个大窗口,而是一个独立的空间,和第二个桌面是同一类东西,你可以在它们之间轻扫切换。“始终置顶”只会把窗口抬到它自己所在空间里的其他窗口之上。所以普通的始终置顶视频窗口会原地不动,留在你离开的那个桌面上,恰恰在你把想配合使用的应用切换到全屏时消失。

显而易见的办法是提高层级,把窗口放到一切之上。我们试过了:用一个小测试应用把带标签的窗口放到全屏的文本编辑之上,然后截取屏幕,因为凭推理判断已经错了三次。层级没有任何作用。普通窗口不会出现在另一个应用的全屏空间之上,无论是浮动层级、菜单栏的层级、弹出菜单的层级,甚至是最高层级,即高于系统自身绘制的一切。允许窗口出现在所有空间中,并把它标记为全屏的辅助窗口,这是必要的,但同样不够。

起作用的是窗口的种类。macOS 除了普通窗口还有第二种:面板,也就是浮动调色板和检查器所用的那种。一个点击时不会激活自己应用的面板,才被允许进入另一个应用的全屏空间。只满足一半都不行:会激活自己应用的面板会留在后面,承诺不激活应用的普通窗口也会留在后面。所以迷你播放器开启期间,Frame Player 的窗口会变成这样的面板;退出后,它又变回普通窗口,之前的每一项设置都会原样恢复,包括让它能够全屏的那一项。

为什么不是系统的画中画

IINA 是 Mac 上最知名的 mpv 播放器,它使用的是系统自带的画中画,自然有人会问 Frame Player 为什么不这么做。答案在于播放器的构建方式。视频引擎 mpv 在 Frame Player 窗口之内的一个视图中绘制画面,整个界面(进度条、菜单、字幕面板)都绘制在它上面。系统的画中画的工作方式,是把视频从应用中拿出来,放进系统自己的面板。在这里这样做,就意味着把 mpv 的视图从窗口中抽出来,把界面留在原处,连同窗口所依赖的透明效果一起。

我们自己的小窗口保留了这一切:同样带预览的进度条,同样的右键菜单,同样的跳过按钮。它没有的,是只有系统面板才能做到的事:把视频收进屏幕的侧边,以及用捏合手势调整大小。

在 Windows 上

迷你播放器的外观和行为都一样:角落、磁性边缘、会淡出的控制元素。Windows 没有给全屏应用用的空间,所以上面那个悬浮的办法在那里用不上。迷你窗口是一个最顶层窗口,这已经是 Windows 上普通窗口所能达到的最高层,它会位于你正在使用的窗口之上。例外是以独占全屏方式运行的游戏,它会完全接管显示器;桌面上的任何东西都无法绘制在它上面,我们的窗口也不例外。

不用迷你播放器,也能始终置顶

如果你想让普通窗口保持在其他窗口之上,比如第二块屏幕上的全尺寸窗口,那是另一个开关:右键点击画面,在窗口下开启始终置顶(在 Mac 上,显示菜单中也有)。这个设置在重启后会保留。迷你播放器开启期间,由它负责让窗口保持置顶,退出后你自己的选择会恢复。

常见问题

迷你播放器会留在全屏应用之上吗?

在 Mac 上会,这正是它要解决的问题。macOS 上的全屏应用是一个独立的空间,普通的始终置顶窗口会被留在桌面上,迷你播放器则不会。在 Windows 上,它是一个最顶层窗口,位于普通窗口之上;以独占全屏方式运行的游戏会接管整个显示器,桌面上的任何东西都无法绘制在它上面。

它是系统的画中画吗?

不是。它是播放器自己的窗口缩小后的样子。视频引擎在 Frame Player 窗口内的一个视图中绘制画面,控制界面绘制在它上面,而系统的画中画会把画面从两者中拿走。你得不到的,是只有系统面板才能做到的事:把视频收进屏幕边缘,或者用捏合手势调整大小。

怎么回到完整的窗口?

再按一次 P,点击迷你窗口右上角的圆形按钮,或者在右键菜单中选择“退出迷你播放器”。在 Mac 上,“显示 › 迷你播放器”(⌘⇧M)也一样。窗口会回到之前的大小和位置;在画面上双击则会直接进入全屏。

迷你窗口能放大或缩小吗?

能,拖动它的边缘即可。调整大小时它会保持画面的形状,最小为 240×135 像素,再小进度条就没法用了。

为什么松开鼠标时窗口会跳到屏幕边缘?

这是磁性边缘。在边缘或角落附近松开窗口,它会滑完剩下的距离,停在与打开时相同的边距处。如果你更想随意摆放,可以在右键菜单的“窗口”下关闭“迷你播放器贴边吸附”;在 Mac 上,也可以在“显示”菜单中关闭。

随便打开点什么。下次从你停下的地方接着看。

$ brew install --cask risenxxx/tap/frame-player

版本 1.38.1macOS 版已通过公证Windows 版未签名,SmartScreen 会拦截一次