录屏转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 *****
在线感受:
https://www.bilibili.com/video/BV1T14y197CP 支持甲鱼哥
screentogif.com,较慢 https://zhuanlan.zhihu.com/p/574802638
甲鱼老师厉害{:10_257:} 看不见鼠标,差评{:10_260:} @zhangjinxuan {:10_256:} 厉害!!顶一个!! 大家好,我是“有鱼油”{:10_256:} wasai 支持甲鱼老师,太强了 {:5_95:} Ewan-Ahiouy 发表于 2023-7-15 07:28
看不见鼠标,差评
ImageGrab 是抓取静态界面,所以没有附加鼠标。如果要将鼠标也抓进来,程序会稍微麻烦一丢丢,并且不同操作系统的实现方式也各不相同(因此程序就不具备跨平台性能了)。
下面以 Windows 操作系统为例:
我们可以使用 pyautogui 这个模块来获取鼠标的位置,然后使用 win32gui 这个模块来获取鼠标指针的图像,最后通过 Image.paste 函数将鼠标指针的图像实时粘贴到屏幕截图中,组合起来就是带有鼠标的录屏啦~
本帖最后由 clollipops 于 2023-7-25 18:23 编辑
录屏转GIF脚本 厉害{:10_298:} 新手感觉很厉害 鱼大真是太有才了~学习了~ 新手感觉很厉害 66666 太厉害了 又学到了