# screen_recorder **Repository Path**: iamycb/screen_recorder ## Basic Information - **Project Name**: screen_recorder - **Description**: screen_recorder - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-05 - **Last Updated**: 2025-10-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 屏幕录制工具 (Screen Recorder) 一个使用 Rust 开发的简单电脑录屏工具,支持 GIF 动画、PNG 图片序列和 MP4 视频三种输出格式。 ## 功能特性 - 🎬 录制屏幕并保存为 GIF、PNG 序列或 MP4 视频 - ⚡ 可自定义录制时长、帧率和输出文件名 - 🖥️ 支持多显示器选择 - 📦 GIF 格式自动缩放以减小文件大小 - 💾 进度条显示录制和保存进度 - 🎨 正确的颜色转换(已修复 BGRA -> RGBA 转换问题) - 📸 PNG 序列格式保留完整分辨率 - 🎥 自动调用 ffmpeg 生成高质量 MP4 视频 ## 安装依赖 ### Rust 工具链 ```bash # 访问 https://rustup.rs/ 安装 Rust ``` ### ffmpeg(用于 MP4 格式) 如果要使用 MP4 格式,需要安装 ffmpeg: 1. 下载 ffmpeg:https://ffmpeg.org/download.html 2. 将 ffmpeg 添加到系统 PATH 环境变量 3. **重启 VSCode 或命令行窗口**使环境变量生效 4. 验证安装:`ffmpeg -version` ## 编译 ```bash cargo build --release ``` ## 使用方法 ### 基本用法(默认录制 5 秒 GIF) ```bash cargo run --release ``` ### 录制 MP4 视频(推荐,需要 ffmpeg) ```bash cargo run --release -- --format mp4 --duration 10 --fps 30 --output my_video.mp4 ``` ### 录制 GIF 动画 ```bash cargo run --release -- --duration 10 --output demo.gif ``` ### 输出 PNG 序列(用于后期处理) ```bash cargo run --release -- --format png-sequence --output frames ``` ### 自定义录制时长和帧率 ```bash cargo run --release -- --duration 10 --fps 30 ``` ### 选择显示器(多显示器环境) ```bash cargo run --release -- --monitor 1 ``` ### 保留 MP4 生成时的临时 PNG 文件 ```bash cargo run --release -- --format mp4 --keep-frames ``` ### 组合使用多个参数 ```bash cargo run --release -- --format mp4 --duration 10 --fps 30 --output demo.mp4 ``` ## 命令行参数 | 参数 | 简写 | 默认值 | 说明 | |------|------|--------|------| | `--duration` | `-d` | 5 | 录制时长(秒) | | `--output` | `-o` | 时间戳 | 输出文件路径 | | `--fps` | `-f` | 10 | 帧率(每秒帧数) | | `--monitor` | `-m` | 0 | 显示器索引 | | `--format` | | gif | 输出格式(gif, png-sequence 或 mp4) | | `--keep-frames` | | false | MP4 格式是否保留临时 PNG 文件 | ## 输出格式对比 ### MP4 视频(推荐)⭐ - ✅ 标准视频格式,兼容性最好 - ✅ 保留完整原始分辨率 - ✅ 文件大小适中 - ✅ 支持音频(虽然此工具目前只录制视频) - ✅ 可在所有视频播放器中播放 - ⚠️ 需要安装 ffmpeg - 用途:视频教程、演示、分享 ### GIF 动画 - ✅ 无需额外软件,浏览器直接播放 - ✅ 自动缩小到原分辨率的 1/2 - ✅ 自动循环播放 - ⚠️ 文件可能较大 - ⚠️ 不支持音频 - 用途:快速预览、网页展示 ### PNG 序列 - ✅ 保留完整原始分辨率 - ✅ 每一帧独立可编辑 - ✅ 无损质量 - ⚠️ 文件数量多 - ⚠️ 需要额外处理才能播放 - 用途:专业后期处理、特效制作 ## 查看帮助 ```bash cargo run --release -- --help ``` ## 输出示例 ### MP4 格式 ``` 🎬 屏幕录制工具启动 ⏱️ 录制时长: 5 秒 🎞️ 帧率: 30 FPS 📝 输出格式: mp4 🖥️ 使用显示器: 0 (1920x1080) 📁 输出文件: recording_20250105_020000.mp4 ⏳ 准备录制... 🔴 开始录制! ⏺️ 录制中... 100% (150 帧) ✅ 录制完成!共捕获 150 帧 💾 正在保存 PNG 序列并转换为 MP4... 📸 正在保存临时 PNG 序列... 💾 保存进度: 100% 🎬 正在使用 ffmpeg 转换为 MP4... ✅ MP4 转换完成! 🧹 正在清理临时文件... ✅ 临时文件已清理 🎉 录制成功!MP4 文件已保存至: recording_20250105_020000.mp4 ``` ### GIF 格式 ``` 🎬 屏幕录制工具启动 ⏱️ 录制时长: 5 秒 🎞️ 帧率: 10 FPS 📝 输出格式: gif 🖥️ 使用显示器: 0 (1920x1080) 📁 输出文件: recording_20250105_020000.gif ⏳ 准备录制... 🔴 开始录制! ⏺️ 录制中... 100% (50 帧) ✅ 录制完成!共捕获 50 帧 💾 正在保存 GIF 文件... 📐 缩放: 1920x1080 -> 960x540 💾 保存进度: 100% 🎉 录制成功!文件已保存至: recording_20250105_020000.gif ``` ### PNG 序列格式 ``` 🎬 屏幕录制工具启动 ⏱️ 录制时长: 5 秒 🎞️ 帧率: 10 FPS 📝 输出格式: png-sequence 🖥️ 使用显示器: 0 (1920x1080) 📁 输出文件: frames.png ⏳ 准备录制... 🔴 开始录制! ⏺️ 录制中... 100% (50 帧) ✅ 录制完成!共捕获 50 帧 💾 正在保存 PNG 序列... 💾 保存进度: 100% 📂 PNG 序列已保存至目录: frames 🎉 录制成功!文件已保存至: frames.png ``` ## 使用建议 ### 推荐配置 **快速预览/GIF分享:** ```bash cargo run --release -- --format gif --duration 5 --fps 10 ``` **高质量视频录制:** ```bash cargo run --release -- --format mp4 --duration 10 --fps 30 ``` **演示/教程视频:** ```bash cargo run --release -- --format mp4 --duration 60 --fps 24 ``` **专业后期处理:** ```bash cargo run --release -- --format png-sequence --fps 30 ``` ### 帧率选择指南 - **10 FPS**:适合静态内容、教程演示 - **24 FPS**:电影标准,适合大多数视频 - **30 FPS**:推荐值,流畅度和文件大小平衡 - **60 FPS**:高刷新率,适合游戏录制 ## 注意事项 - **MP4 格式**: - 必须先安装 ffmpeg 并配置到 PATH - 配置环境变量后需要**重启 VSCode 或命令行窗口** - 默认使用 H.264 编码,CRF=23(高质量) - 自动清理临时 PNG 文件(除非使用 `--keep-frames`) - **GIF 格式**: - 文件会自动缩小到原分辨率的 1/2 以减小文件大小 - 高帧率和长时长会产生较大的 GIF 文件 - 建议使用 10-15 FPS 的帧率以平衡质量和文件大小 - **PNG 序列格式**: - 保留完整原始分辨率,文件数量 = 帧率 × 录制时长 - 适合需要高质量输出或后期处理的场景 - 可使用 ffmpeg 手动转换为任何视频格式 - **通用**: - Windows 系统需要以管理员权限运行以捕获某些窗口 - 录制开始前有 1 秒准备时间 ## 故障排查 ### ffmpeg 未找到 如果出现 "program not found" 或 "ffmpeg 转换失败" 错误: 1. 确认 ffmpeg 已安装:`ffmpeg -version` 2. 检查 PATH 环境变量是否包含 ffmpeg 路径 3. **重启 VSCode 或命令行窗口** 4. 如果仍然失败,尝试使用完整路径 ### 录制的颜色不正确 - 这个问题已在 v0.1.0 中修复 - 如果仍有问题,请确保使用最新版本 ### 文件过大 - GIF:降低帧率或缩短录制时长 - MP4:调整 CRF 值(在代码中,23 是默认值,越大文件越小) ## 技术栈 - `scrap` - 屏幕捕获 - `image` - 图像处理和格式转换 - `gif` - GIF 编码 - `clap` - 命令行参数解析 - `chrono` - 时间处理 - `ffmpeg` - MP4 视频编码(外部依赖) ## 更新日志 ### v0.1.0 (2025-01-05) - ✅ 修复了图像颜色损坏问题(正确处理 BGRA -> RGBA 转换) - ✅ 添加了 PNG 序列输出格式支持 - ✅ 添加了 MP4 视频输出格式(需要 ffmpeg) - ✅ 自动调用 ffmpeg 生成视频 - ✅ 改进了图像质量 - ✅ 添加了分辨率缩放信息显示 - ✅ 支持保留/清理临时文件选项 ## 许可证 MIT License