Repository navigation
Releases: Albert-PZY/ffshift
Release list
FFShift 1.5.1
拖入修好了
根因
dragover 里先判断 dataTransfer.types 再 preventDefault,不满足的类型直接 return——在 preventDefault() 之前。浏览器因此不把窗口当可投放目标,连 drop 事件都不派发。
用 CDP 派发真实拖放事件复现,只带 text/uri-list 的拖放事件链里确实没有 drop。浏览器、压缩包窗口、部分下载工具拖出来的都是这一种,表现就是"拖进去毫无反应"。
改法
dragover无条件放行,判断挪到drop里drop依次尝试三种来源:files的 File →items的 file →text/uri-list/text/plain里的路径- 取不到路径时给出提示,不再静默返回
托盘常驻与关闭确认
- 启动即常驻托盘:左键唤回窗口,右键菜单有显示与退出
- 点关闭按钮按偏好走:每次询问(默认)/ 最小化到托盘 / 直接退出
- 第一次关闭弹确认框,带「记住我的选择」,勾了就写进设置
- 选托盘时窗口只是隐藏,正在跑的转换继续
- 设置页新增「常规」分类,可以回头改这个偏好
验证
- 单测 271 条、e2e 22 条全绿(新增 5 条覆盖拖放三种来源与关闭流程)
- typecheck / build / 打包通过
安装:FFShift-1.5.1-setup.exe 安装,或 FFShift-1.5.1-portable.exe 免安装。
第一次运行 Windows 可能弹 SmartScreen,点「更多信息」→「仍要运行」。
FFShift 1.5.0
界面重构
- 三栏工作台:左栏只放档位 / 输出格式 / 目标体积,中间队列 / 历史,右侧详情
- 独立设置页:输出目录、参数预设、外观(主题与字号)、引擎信息
- 三套主题:浅黑(默认,偏灰不刺眼)/ 亮色 / 暗色
- 可调字号:10–24px,全站等比缩放
- 无边框窗口与自绘标题栏
打包
- 安装包(NSIS)与便携版两个目标
- LICENSE 与 ffmpeg / ffprobe 随包分发,下载后不用再装任何东西
- 新增签名 / 验签脚本(
npm run sign/npm run verify-sign)
稳定性
19 个真实素材(164 分钟 / 2.61 GiB)全量功能测试通过:转换 19/19 成功、
产物逐条时长一致、取消无半成品残留、目标体积模式偏差 -2%。
单测 258 条、e2e 17 条全绿。
安装:下载 FFShift-1.5.0-setup.exe 安装,或 FFShift-1.5.0-portable.exe 免安装。
第一次运行时 Windows 可能弹 SmartScreen,点「更多信息」→「仍要运行」即可。
FFShift v1.4.0 · 专业参数面板
这一版给专业用户
参数面板
左栏底部「专业参数」,20 项可调,按用途分组:
| 分组 | 参数 |
|---|---|
| 视频编码 | 编码器、CRF、目标码率、编码速度、tune、profile、像素格式、关键帧间隔 |
| 画面 | 缩放(含算法)、帧率 |
| 音频 | 处理方式(重编码 / 保持原样 / 移除)、编码器、码率、采样率、声道 |
| 容器与性能 | faststart、线程数、额外参数 |
每一项都能选「不干预」——不碰它,行为就和以前完全一样(有测试守着这条,产出的 ffmpeg 命令逐字节相同)。
校验按真实约束
- CRF 的可用区间随编码器变:x264 / x265 是 0–51,VP8 / VP9 / AV1 是 0–63
- 容器兼容按系族判:WebM 收不了 H.264,但
h264_nvenc和libx264同族,不会被误拦 - 错误拦下、警告放行:FLAC 上设码率只是没意义,不该拦住你
- 额外参数会拦掉
-i/-y/-map/-c:v这类会和程序自身参数打架的开关
预设
7 个内置:网页分享、高画质存档、极限压缩、手机播放、去掉声音、显卡加速、只留声音。
自己调好的组合可以命名保存、随时删除,也能导出成 JSON 给同事导入(同名自动跳过)。
顺带修的 bug
档位与输出格式的下拉框一直是浏览器默认的浅色样式——重写样式表时漏了 .menu 的规则。
验证
单测 237 条(新增 57:校验 27、参数构造 15、预设 15)
集成测试 25 条(新增 3 条实测参数效果)
├ 缩放 → ffprobe 读回 640x360
├ CRF 40 的产物确实比 CRF 18 小
└ 移除音轨 → 产物里没有音频流
规格 4 个能力 40 条要求,validate 全通过
安装前
- Windows x64,不需要另装 ffmpeg(已随包)
- 安装包未签名:首次运行选「更多信息」→「仍要运行」
还没做
- 系统托盘进度与托盘菜单、右键菜单集成
- 预设「保存后重启仍在」这条链路没有端到端实测(e2e 走主进程,不经过界面),
docs/testing.md里如实标着
FFShift v1.3.0 · 补全八项功能
这一版补了哪些
盘点"架构文档里写了、实现却没做"的功能,补齐八项:
流程上的补全
| 功能 | 说明 |
|---|---|
| 选择输出目录 | 此前产物只能落在源文件旁边。现在可以指定目录,也可以随时恢复默认 |
| 文件夹导入 | 选一个文件夹,一次把里面的视频加进来(只扫一层,不会递归翻你的整个硬盘) |
| 完成通知 | 队列全部跑完时发一条系统通知——长任务结束时你多半已经切去干别的了 |
出错时更有用
| 功能 | 说明 |
|---|---|
| 原始日志 | 失败时可以展开看 ffmpeg 的原始输出,一键复制发给能帮忙的人 |
| 连续失败停止 | 同一个文件连续失败 2 次后不再自动重试(多半是文件本身的问题),行内给「重试」按钮 |
用起来更顺手
| 功能 | 说明 |
|---|---|
| 目标体积直接输入 | 此前只能靠 AI 建议带入,现在可以直接填「我要 50MB」 |
| 转换历史 | 成功与失败都记,最多 50 条;工作区可切换「队列 / 历史」 |
| 体积对比 | 详情栏显示 4.5 MiB → 1.2 MiB(-73%) |
顺带修了三个 bug
- 队列重复排队:一个任务跑完后,会把所有等待中的任务重新入队
- 后加的格式存不住:选了 MP3 或 GIF 之后重启,输出格式会悄悄回到「保持原格式」
- 设置版本号脱节:保存时硬编码了旧版本号
验证
单测 178 条全绿(新增 13 条:输出路径 7、历史记录 9、格式回归)
集成测试 22 条全绿(新增断言:失败时保留原始日志)
端到端 走真实 IPC:探测 → 抽帧 → 转换,成功且带回产物体积
规格 3 个能力 33 条要求,openspec validate 全通过
安装前
- Windows x64,不需要另装 ffmpeg(已随包分发)
- 安装包未签名:首次运行选「更多信息」→「仍要运行」
还没做的
- 系统托盘进度与托盘菜单
- 右键菜单集成(资源管理器里直接转)
- 预设导入导出
- 一批冒烟项还没在真机上跑过(批量 10 个、4K 大文件、只读目录、磁盘写满、重启记忆)——
docs/testing.md里如实标着状态,没写成通过
FFShift v1.2.0 · 界面重构
这一版是界面重构
参考 v0.app 生成的方案,把界面从单屏纵向流水线改成三栏工作台:
| 区域 | 内容 |
|---|---|
| 左栏 | 批量设置(质量档位、输出格式)+ AI 建议 + 文件操作 |
| 中栏 | 转换队列:缩略图、实时进度、状态与行内动作 |
| 右栏 | 选中任务的详情:编码、码率、容器、像素格式等真实探测结果 |
配色换成四层底色(canvas / panel / panel-soft / panel-raised),层级更清楚;图标统一为 lucide。
没有照搬的部分
v0 的方案里有一套"检查器":视频编码器选择、CRF 滑块、音频码率、帧率下拉。这些后端没有对应能力——本项目的编码参数由质量档位固定决定。做出来点了不会有反应,所以右栏改成展示真实探测到的媒体信息。
另外补了它缺的:状态从 3 种补齐到 8 种(读取中 / 待转换 / 排队中 / 转换中 / 已完成 / 失败 / 已取消 / 不支持),缩略图用真实抽帧而不是渐变色块。
功能没有变
界面重构,转换能力与上一版一致:视频出 MP4 / MKV / MOV / WebM,动图出 GIF,音频出 MP3 / M4A / Opus / FLAC / WAV;ffmpeg 仍随包分发。
验证
- 单测 165 条、集成测试 22 条全绿
- 端到端走真实 IPC:探测 → 抽帧 → 转换,837ms 完成
- 界面截图由脚本自动生成,与代码一致(
docs/screenshots/main.png)
安装前
- Windows x64,不需要另装 ffmpeg(已随包)
- 安装包未签名:首次运行选「更多信息」→「仍要运行」
已知未做
- 托盘通知
- 选择输出目录、文件夹导入(当前输出到源文件同目录)
- 原始日志展开、历史记录、右键菜单集成
FFShift v1.1.0
这一版有什么
内置 ffmpeg,装完就能用
不再要求你自己装 ffmpeg。安装包随带 ffmpeg 与 ffprobe(不带 ffplay),体积因此从 107 MB 涨到 160 MB。
格式转换补全
- 音频输出:MP3 / M4A / Opus / FLAC / WAV,从视频里提取声音;源文件没有音轨时会明确告诉你,而不是产出一个空文件
- GIF 动图:用调色板两遍法,渐变处不再出现色带
- 透明素材修复:带 alpha 通道的视频(游戏录像、qtrle 素材)转换后,原本透明的区域不会再变成黑块
其它
- 时长读不出来时,从 ffmpeg 自己的输出里兜底解析,进度条不再只能显示「进行中」
- 转换失败时也会清理半成品文件(此前只有取消才清)
- 新增代码规范,写进 OpenSpec 规格(注释、分层、类型、错误、依赖、命名六条)
验证情况
- 单测 165 条、集成测试 22 条全绿(真实调用 ffmpeg)
- 打包产物实测:用随包 ffmpeg 提取 MP3,88ms 完成
- 透明通道合成用像素验证:白底叠加后半透明红呈粉红,而不是黑
- 冒烟日志确认
ffmpeg 来源:随包分发
安装前
- Windows x64
- 不需要另外安装 ffmpeg
- 安装包未做代码签名:首次运行 Windows 会弹 SmartScreen,选「更多信息」→「仍要运行」
已知未做
- 托盘通知(当前只有行内「打开输出目录」)
- 连续失败 2 次后停止并给出「复制日志」
完整的开发过程、决策记录与踩坑返工见仓库 docs/。
FFShift v1.0.0
这一版能干什么
- 导入视频后立刻看到时长、分辨率、编码与缩略图;一次拖入多个文件会依次排队
- 三档转换:更清晰(存档再剪辑)、均衡(日常)、更小(发微信、发手机)
- 转换中显示百分比、剩余时间与速度,随时可以取消,取消后会清掉半成品
- 报错翻译成人话:磁盘满了、目录写不进去、文件损坏、编码器不可用各有对应说明
- 一句话让 AI 给档位建议;模型不可用时自动退回本地规则,界面会如实标注建议来源
- 档位与输出目录会记住,下次启动还在
- 探测到硬件编码器(NVENC / QSV / AMF)时自动使用
安装前注意
- 需要本机已安装 ffmpeg(未随包分发,避免安装包再胖一圈)。没有的话界面会提示"未检测到 ffmpeg"
- 安装包未做代码签名:Windows 首次运行会弹 SmartScreen,选「更多信息」→「仍要运行」
- 支持 Windows x64
验证情况
- 单测 117 条、集成测试 15 条(真实调用 ffmpeg)全绿
- 端到端自检走完 探测 → 抽帧 → 转换,打包产物实测 896ms 完成一次转换
- 冒烟清单 14 条逐条记录在仓库
docs/testing.md,未实测的条目如实标注
已知未做
- 托盘通知(当前只有行内「打开输出目录」)
- 连续失败 2 次后停止并给出「复制日志」
- 目标体积的界面入口(目前通过 AI 建议带入)
完整的开发过程、决策记录与踩坑返工见仓库 docs/ 目录。