小甲鱼 发表于 2023-7-15 00:12:32

录屏转GIF脚本之 -- 鱼C闪耀屏幕捕捉器

录屏转GIF脚本之 -- 鱼C闪耀屏幕捕捉器

前两天看到有鱼油需要一个录屏转 GIF 的工具,说是为了方便发原创帖申请精华~

{:10_327:}

在网上搜索了一番,着实没有找到好用且顺手的,于是咱们求人不如求己,开拔!


程序功能:


[*]支持帧率设置
[*]支持时长设置
[*]支持压缩等级设置
[*]选取录屏区域实时显示分辨率
[*]录屏开始 3 秒倒计时
[*]录屏区域与非录屏区域区分
[*]录屏最后 5 秒会出现闪耀倒计时

所以,这个玩意儿我们就叫它闪耀捕捉器吧~

{:10_267:}




模块需求:

为了使用上的方便,所需的模块我尽可能使用 Python 官方自家的:


[*]界面 -> tkinter
[*]计时 -> time
[*]多线程 -> threading
[*]网络下载 -> urllib.request
[*]临时文件 -> tempfile
[*]录屏转存 -> pillow

没错,这里面只有 pillow 是需要大家自行安装的模块。


开发思路:

核心部分通过 pillow 的 ImageGrab.grab() 捕获指定位置的图像,并按顺序保存为 GIF 图片。

由于 ImageGrab.grab() 获取的屏幕截图是 RGB 格式的图像,这意味着每个像素使用 24 位颜色。24 位颜色允许显示大约 1670 万种颜色(224)。

这里我们通过减少颜色的数量(轻度压缩 -> 256色,中度压缩 -> 128色,重度压缩 -> 64色),来达到显而易见的文件尺寸压缩效果。

不过要注意,降低颜色数量会导致图像质量降低,因为会损失部分原始颜色信息。然而,在许多情况下,使用较少的颜色仍然是可以产生令人满意的结果(比如小甲鱼这种纯素桌面……)。

另外一个可以显著压缩文件尺寸的方案就是降低帧率,大家可以自己挑,这里默认是 10 帧,表示每秒钟捕捉 10 张图像。

然后有一个要点,就是录屏并保存的部分,建议采用多线程方案。这是为了避免在保存 GIF 图片期间造成的“卡顿”现象(相当于各干各的,不用等)。

会用到 urllib.request 和 tempfile 模块,是因为我们需要加载 FishC 的 ico 图标,不然还得提供离线版,太麻烦了~

最后就是那个录屏过程的 “红色透明框” 和结束前 5 秒的 “闪耀” 效果,其实是通过 4 个 toplevel 进行拼接实现的。

好像没有什么特别复杂的东西,代码做了相对详细的注释,大家可以参考一下。

抛砖引玉,期待看到大家深度魔改后的作品~

{:10_298:}


源代参考:

**** Hidden Message *****





不二如是 发表于 2023-7-15 13:30:20

在线感受:

https://www.bilibili.com/video/BV1T14y197CP

歌者文明清理员 发表于 2023-7-15 00:37:34

支持甲鱼哥
screentogif.com,较慢

歌者文明清理员 发表于 2023-7-15 00:38:05

https://zhuanlan.zhihu.com/p/574802638

Ewan-Ahiouy 发表于 2023-7-15 07:13:47

甲鱼老师厉害{:10_257:}

Ewan-Ahiouy 发表于 2023-7-15 07:28:27

看不见鼠标,差评{:10_260:}

sfqxx 发表于 2023-7-15 08:15:21

@zhangjinxuan {:10_256:}

las6040 发表于 2023-7-15 08:17:54

厉害!!顶一个!!

zhangjinxuan 发表于 2023-7-15 09:29:03

大家好,我是“有鱼油”{:10_256:}

hornwong 发表于 2023-7-15 10:11:38

wasai

Kaoyang5 发表于 2023-7-15 14:01:22

支持甲鱼老师,太强了

entrio 发表于 2023-7-15 17:46:55

{:5_95:}

小甲鱼 发表于 2023-7-16 03:13:46

Ewan-Ahiouy 发表于 2023-7-15 07:28
看不见鼠标,差评

ImageGrab 是抓取静态界面,所以没有附加鼠标。如果要将鼠标也抓进来,程序会稍微麻烦一丢丢,并且不同操作系统的实现方式也各不相同(因此程序就不具备跨平台性能了)。

下面以 Windows 操作系统为例:

我们可以使用 pyautogui 这个模块来获取鼠标的位置,然后使用 win32gui 这个模块来获取鼠标指针的图像,最后通过 Image.paste 函数将鼠标指针的图像实时粘贴到屏幕截图中,组合起来就是带有鼠标的录屏啦~

clollipops 发表于 2023-7-16 19:09:39

本帖最后由 clollipops 于 2023-7-25 18:23 编辑

录屏转GIF脚本

Tiamsy 发表于 2023-7-16 19:14:55

厉害{:10_298:}

549246531 发表于 2023-7-16 19:15:05

新手感觉很厉害

shane9611 发表于 2023-7-16 19:18:00

鱼大真是太有才了~学习了~

鸡你实在太没 发表于 2023-7-16 19:24:56

新手感觉很厉害

125800 发表于 2023-7-16 19:25:39

66666

zhuyanan 发表于 2023-7-16 19:53:28

太厉害了   又学到了
页: [1] 2 3
查看完整版本: 录屏转GIF脚本之 -- 鱼C闪耀屏幕捕捉器