效果展示 #
设备边播放边录制有点吃力,所以看起来有丝丝卡顿。效果就是可以同时刷n个视频。
准备工作 #
要实现“九宫格刷 B 站”,我们需要准备以下工具:
- 视频地址列表
- 播放器:推荐用 revda 的 dmlive,直接用 mpv 的 yt-dlp 也可以,后者看不到弹幕。
- 并行工具,推荐用 parallel。
- mpv 需要配置自动退出脚本,不然会同一个视频循环播放。
获取视频播放列表 #
推荐使用这个优秀的插件导出收藏夹列表:
👉
AHCorn / Bilibili-Favlist-Export
该插件导出的文件是 CSV,其中第二列就是我们所需的视频 URL。
hyprscroller配置 #
我们需要用到该hyprland插件提供的
grid模式,虽然作者已经不再维护该插件,但咱找到了个还在
活跃的分支,通过以下命令可以设定 grid 模式的行为,使窗口按下图顺序出现,且不会自动抢焦点:
hyprctl dispatch scroller:setmodemodifier end,nofocus,auto:3
同时推荐下两项配置:
-
plugin:scroller:overview_scale_content 0缩放会带来额外性能消耗,建议临时关闭。
-
windowrulev2 = plugin:scroller:columnwidth one,workspace:2让窗口自动填满宽度。可以全局设置,也可以像咱一样为特定工作区单独设置。
mpv自动退出 #
~ ➜ cat ~/.config/mpv/scripts/quit_d.lua
mp.register_event("end-file", function(event)
if event.reason == "eof" then
local pos = mp.get_property_number("playlist-pos", 0)
local count = mp.get_property_number("playlist-count", 0)
if pos == count - 1 then
mp.msg.info("Last file finished, quitting mpv")
mp.command("quit")
end
end
end)
Play耶 #
准备完成后,就可以开始一次性刷多个视频啦。
下面是一个简单的流程:先根据 CSV 生成可执行的 fish 脚本,在播放后自动记录已看视频。
# played记录看完的视频, 避免每次重新跑
for i in (csvtk cut -f 2 稍后.csv)
echo dmlive -u \"$i\"\;\; echo \"$i\" \>\> played >> play.fish
end
> head play.fish
dmlive -u url;; echo url >> played
dmlive -u https://www.bilibili.com/video/BV1am5vzMEtH;; echo https://www.bilibili.com/video/BV1am5vzMEtH >> played
dmlive -u https://www.bilibili.com/video/BV1xQCxBdEUW;; echo https://www.bilibili.com/video/BV1xQCxBdEUW >> played
dmlive -u https://www.bilibili.com/video/BV1XpBgYHE1i;; echo https://www.bilibili.com/video/BV1XpBgYHE1i >> played
dmlive -u https://www.bilibili.com/video/BV1hYWnz9E3u;; echo https://www.bilibili.com/video/BV1hYWnz9E3u >> played
dmlive -u https://www.bilibili.com/video/BV1S7C1BSEmq;; echo https://www.bilibili.com/video/BV1S7C1BSEmq >> played
dmlive -u https://www.bilibili.com/video/BV13kSoYLE8H;; echo https://www.bilibili.com/video/BV13kSoYLE8H >> played
dmlive -u https://www.bilibili.com/video/BV1UEtdzREai;; echo https://www.bilibili.com/video/BV1UEtdzREai >> played
#播放
grep -v -F -f played play.fish|parallel -j 8
小建议:最好保持聚焦在最上面的窗口,不然新生成的窗口会有点怪,会变成类似这样的情况。