屏幕录制GIF

工具展示

screen-to-gif

工具介绍

通过Cursor编写屏幕录制GIF工具,通过录制屏幕指定区域,并最后生成gif文件,动态播放。后续教程中的gif图片均通过该工具录制。

为了优化文件的大小,降低了图片的质量。

项目概述

这是一个使用Python开发的屏幕录制工具,可以录制屏幕指定区域并生成GIF动画。主要特点包括:

  1. 可视化区域选择
  2. 实时录制控制
  3. 自定义GIF生成参数
  4. 智能帧差异检测
  5. 图像质量优化

技术栈

  • Python 3.x
  • PyQt6:GUI界面框架
  • mss:屏幕截图
  • PIL:图像处理
  • imageio:GIF生成
  • numpy:图像数据处理

项目结构

项目由以下主要模块组成:

  1. main.py:主程序入口,实现GUI界面
  2. screen_recorder.py:屏幕录制核心功能
  3. gif_generator.py:GIF生成和优化
  4. region_selector.py:区域选择器
  5. requirements.txt:依赖管理

实现步骤

1. 项目初始化

# 创建虚拟环境并安装依赖
python -m venv venv
source venv/bin/activate  # Windows使用: venv\\Scripts\\activate
pip install -r requirements.txt

2. 区域选择器实现

region_selector.py实现了一个透明窗口,允许用户通过鼠标拖拽选择录制区域。主要特点:

  • 全屏透明覆盖
  • 实时显示选择区域
  • 鼠标事件处理
  • 选择完成信号发送

3. 屏幕录制器实现

screen_recorder.py负责核心的录制功能:

  • 使用mss库进行屏幕截图
  • 实现帧差异检测算法
  • 优化录制性能
  • 内存管理

关键优化:

# 帧差异检测
diff = np.mean(np.abs(frame_array - self.last_frame_array)) / 255.0
if diff > self.diff_threshold:
    self.frames.append(frame)

4. GIF生成器实现

gif_generator.py处理录制帧的优化和GIF生成:

  • 图像预处理(锐化、对比度增强)
  • 智能缩放
  • 调色板优化
  • 压缩优化

关键优化:

# 图像增强
enhancer = ImageEnhance.Sharpness(frame)
frame = enhancer.enhance(1.5)

# 两步缩放获得更好的效果
frame = frame.resize((new_size[0]*2, new_size[1]*2), Image.Resampling.LANCZOS)
frame = frame.resize(new_size, Image.Resampling.BICUBIC)

5. 主界面实现

main.py实现了用户界面:

  • 录制控制
  • 参数设置
  • 文件保存
  • 状态显示

6. 性能优化

  1. 录制优化:
    • 使用帧差异检测减少重复帧
    • 优化录制帧率
    • 内存管理
  2. GIF生成优化:
    • 全局调色板
    • 智能缩放算法
    • 图像质量增强
    • 压缩参数调整

特色功能

  1. 智能帧处理:
    • 只保存发生变化的帧
    • 自动调整帧率
    • 优化内存使用
  2. 图像质量优化:
    • 多级图像增强
    • 智能缩放
    • 锐化处理
    • 调色板优化
  3. 用户友好界面:
    • 直观的区域选择
    • 实时状态显示
    • 自定义参数调节