66HEX/frame
GitHub: 66HEX/frame
Frame 是一款基于 Rust 和 GPUI-CE 构建的跨平台 FFmpeg 桌面图形界面应用,旨在简化音视频和图像的格式转换及精细化处理。
Stars: 1728 | Forks: 55
Frame
## 功能 ### 媒体转换核心 - **媒体类型:** 视频、音频和图像源。 - **支持的源文件:** - **视频:** `mp4`, `mov`, `mkv`, `avi`, `webm`, `gif` - **音频:** `mp3`, `m4a`, `wav`, `flac` - **图像:** `png`, `jpg`, `jpeg`, `webp`, `bmp`, `tif`, `tiff`, `avif`, `heic`, `heif` - **支持的输出格式:** - **视频:** `mp4`, `mkv`, `webm`, `mov`, `gif` - **音频:** `mp3`, `m4a`, `wav`, `flac` - **图像:** `png`, `jpg`, `webp`, `bmp`, `tiff` - **视频编码器:** - `libx264` (H.264 / AVC) - `libx265` (H.265 / HEVC) - `vp9` (Google VP9) - `prores` (Apple ProRes) - `libsvtav1` (SVT-AV1) - `gif` 调色板输出 - **硬件加速:** macOS 打包版本包含 VideoToolbox 编码器 (`h264_videotoolbox`, `hevc_videotoolbox`);Windows 打包版本包含 NVIDIA NVENC 编码器 (`h264_nvenc`, `hevc_nvenc`, `av1_nvenc`)。Linux 打包版本使用 软件编码器。 - **图像编码器:** `png`, `mjpeg` (JPEG), `libwebp` (WebP), `bmp`, `tiff`。 - **音频编码器:** `aac`, `ac3`, `libopus`, `mp3`, `alac`, `flac`, `pcm_s16le`,以及可选的 `libfdk_aac`(如果可用)。 - **码率控制:** CRF、目标码率、支持的音频 VBR 以及特定编解码器的预设。 - **视频处理:** 分辨率预设、自定义尺寸、FPS 转换、 像素格式选择、缩放、裁剪、旋转、翻转以及图像叠加。 - **视频滤镜:** 亮度、对比度、饱和度、gamma、色调、色温、 锐化、高斯模糊、降噪、去条带、晕影、灰度 以及去交错控制。 - **GIF 控制:** 帧率、颜色数量、抖动以及循环次数。 - **音频控制:** 编解码器、码率、VBR 质量、声道布局、音量以及 单轨道选择。 - **音频滤镜:** 标准化、限幅器、压缩器、低音、高音、高通、 低通、降噪、去齿音以及立体声宽度控制。 - **字幕:** 流选择、`.srt` / `.ass` / `.vtt` 源过滤、 刻录字幕文件选择、字体、大小、颜色、轮廓颜色以及 位置控制。 - **元数据:** 保留、清除或替换元数据字段,例如标题、 艺术家、专辑、流派、日期和评论。 - **元数据探测:** 通过 `ffprobe` 自动进行源检查。 ### 架构与工作流 - **原生 UI:** GPUI-CE 应用程序外壳、自定义标题栏、工作区/日志 视图、设置面板以及共享的 UI 原语。 - **共享转换核心:** `frame-core` 拥有 FFmpeg 参数、媒体规则、 探测类型、滤镜构建以及验证逻辑。 - **并发处理:** Rust 任务控制器,用于排队和限制 同时运行的 FFmpeg 进程。 - **实时遥测:** 在转换运行时,FFmpeg 进度和日志事件会被解析并 显示在应用程序中。 - **运行时二进制文件:** 本地开发使用位于 `frame-app/resources/binaries/` 下针对特定平台的 FFmpeg 和 FFprobe 二进制文件。原生打包版本包含 这些工具,并在启动时从打包的 FFmpeg 中检测编码器能力。 ## 技术栈 ### 原生应用程序 - **语言:** Rust Edition 2024。 - **UI:** GPUI-CE。 - **原生对话框:** `rfd`,为支持的媒体和 字幕文件提供扩展名过滤。 - **资源:** 内嵌的 SVG 图标、打包的 Overused Grotesk 字体以及适用于 macOS、Windows 和 Linux 包的原生应用 图标资源。 ### 转换核心 - **运行时工具:** FFmpeg 和 FFprobe。 - **序列化:** `serde`, `serde_json`。 - **错误处理:** `thiserror`。 - **媒体规则:** 由 Rust 代码调用的共享 JSON 兼容性矩阵。 ## 安装 ### 下载预构建二进制文件 最简单的入门方法是直接从 GitHub 为您的平台下载最新的 发布版本。 [**下载最新版本**](https://github.com/66HEX/frame/releases) ### 自动更新 原生发布版本包含一个带签名的清单更新器。Frame 会检查最新的 GitHub Release 清单,验证其 Ed25519 签名以及所选平台资源的 SHA-256 哈希值,然后通过一个小型内置辅助程序进行安装。 ### WinGet (Windows) Frame 可以在官方 WinGet 仓库中找到,标识符为 `66HEX.Frame`。 ``` winget install --id 66HEX.Frame -e ``` 更新命令: ``` winget upgrade --id 66HEX.Frame -e ``` ### Homebrew (macOS) 对于 macOS 用户,可以通过自定义的 Homebrew tap 获取 Frame: ``` brew tap 66HEX/frame brew install --cask frame ``` ### Flathub (Linux) 生产环境的 Flatpak 通过 Flathub 分发,标识符为 `io.github._66HEX.Frame`。Flathub 构建版本使用来自 Freedesktop 运行时的 FFmpeg、FFprobe、编解码器和 媒体库,而不是内置的 Sidecar 媒体工具。 ``` flatpak install flathub io.github._66HEX.Frame ``` 更新命令: ``` flatpak update io.github._66HEX.Frame ``` ### 从源码构建 **1. 前置条件** - **Rust:** [安装 Rust](https://www.rust-lang.org/tools/install) - **平台工具链:** 操作系统所需的 C/C++ 构建工具链以及 Rust 和 GPUI-CE 所需的原生桌面库。 **2. 克隆仓库** ``` git clone https://github.com/66HEX/frame.git cd frame ``` **3. 设置运行时二进制文件** Frame 需要 FFmpeg 和 FFprobe 运行时二进制文件。发布和开发 任务会将特定平台的工具下载到被忽略的本地运行时路径中。手动准备它们: ``` cargo xtask setup-ffmpeg ``` **4. 运行或构建** - **开发环境:** cargo xtask run - **生产构建:** cargo xtask build --release - **重新生成发布工作流:** cargo xtask workflows - **macOS DMG:** cargo install cargo-bundle cargo xtask bundle macos - **包含 `.desktop` 元数据和彩色图标的 Linux tarball:** cargo xtask bundle linux - **Windows 安装程序:** cargo xtask bundle windows 在正常的 Cargo 构建期间,发布版本的二进制文件会内嵌 Frame 的 `.ico` 资源,以便资源管理器和任务栏能够正确显示应用程序图标。 ## 开发检查 在提交更改之前,请运行主要的检查: ``` cargo xtask ci ``` ## 致谢与第三方代码 - **FFmpeg**:采用 [GPLv3](https://www.ffmpeg.org/legal.html) 授权。 - **GPUI-CE**:Frame 使用的原生 Rust UI 框架。 ## 许可证 GPLv3 许可证。详情请参阅 [LICENSE](LICENSE)。
标签:可视化界面, 通知系统