鱼C论坛

 找回密码
 立即注册
查看: 4908|回复: 56

[作品展示] 录屏转GIF脚本之 -- 鱼C闪耀屏幕捕捉器

[复制链接]
发表于 2023-7-15 00:12:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


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



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


程序功能:

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

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



2023-07-14_23-48-49.png


模块需求:

为了使用上的方便,所需的模块我尽可能使用 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 进行拼接实现的。

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

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




源代参考:

游客,如果您要查看本帖隐藏内容请回复






评分

参与人数 7荣誉 +27 鱼币 +27 贡献 +12 收起 理由
cjjJasonchen + 5 + 5 + 3 太酷啦!
额外减小 + 1 + 1
zhangjinxuan + 5 + 5 大家好,我是“有鱼油”~
liuhongrun2022 + 5 + 5 + 3
las6040 + 1 + 1 感谢楼主无私奉献!
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^
歌者文明清理员 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-15 13:30:20 | 显示全部楼层
在线感受:

评分

参与人数 2荣誉 +9 贡献 +6 收起 理由
cjjJasonchen + 5 + 3 感谢楼主无私奉献!
python爱好者. + 4 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-15 00:37:34 | 显示全部楼层
支持甲鱼哥
screentogif.com,较慢

点评

我很赞同!: 5.0
我很赞同!: 5
这个不错,Mark~  发表于 2023-7-16 05:15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 00:38:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 07:13:47 | 显示全部楼层
甲鱼老师厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 07:28:27 | 显示全部楼层
看不见鼠标,差评
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 08:15:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 08:17:54 | 显示全部楼层
厉害!!顶一个!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 09:29:03 | 显示全部楼层
大家好,我是“有鱼油”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 10:11:38 | 显示全部楼层
wasai
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 14:01:22 | 显示全部楼层
支持甲鱼老师,太强了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 17:46:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-16 03:13:46 | 显示全部楼层
Ewan-Ahiouy 发表于 2023-7-15 07:28
看不见鼠标,差评

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

下面以 Windows 操作系统为例:

我们可以使用 pyautogui 这个模块来获取鼠标的位置,然后使用 win32gui 这个模块来获取鼠标指针的图像,最后通过 Image.paste 函数将鼠标指针的图像实时粘贴到屏幕截图中,组合起来就是带有鼠标的录屏啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 19:09:39 From FishC Mobile | 显示全部楼层
本帖最后由 clollipops 于 2023-7-25 18:23 编辑

录屏转GIF脚本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 19:14:55 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-16 19:15:05 | 显示全部楼层
新手感觉很厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 19:18:00 From FishC Mobile | 显示全部楼层
鱼大真是太有才了~学习了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 19:24:56 From FishC Mobile | 显示全部楼层
新手感觉很厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 19:25:39 From FishC Mobile | 显示全部楼层
66666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-16 19:53:28 From FishC Mobile | 显示全部楼层
太厉害了   又学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 02:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表