Skip to content

Releases: Albert-PZY/ffshift

FFShift 1.5.1

Choose a tag to compare

@Albert-PZY Albert-PZY released this 24 Sep 13:47
dc204fe

拖入修好了

根因

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

Choose a tag to compare

@Albert-PZY Albert-PZY released this 23 Sep 19:27
88fe428

界面重构

  • 三栏工作台:左栏只放档位 / 输出格式 / 目标体积,中间队列 / 历史,右侧详情
  • 独立设置页:输出目录、参数预设、外观(主题与字号)、引擎信息
  • 三套主题:浅黑(默认,偏灰不刺眼)/ 亮色 / 暗色
  • 可调字号: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 · 专业参数面板

Choose a tag to compare

@Albert-PZY Albert-PZY released this 23 Sep 08:30

这一版给专业用户

参数面板

左栏底部「专业参数」,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 · 补全八项功能

Choose a tag to compare

@Albert-PZY Albert-PZY released this 23 Sep 07:43
d866a3f

这一版补了哪些

盘点"架构文档里写了、实现却没做"的功能,补齐八项:

流程上的补全

功能 说明
选择输出目录 此前产物只能落在源文件旁边。现在可以指定目录,也可以随时恢复默认
文件夹导入 选一个文件夹,一次把里面的视频加进来(只扫一层,不会递归翻你的整个硬盘)
完成通知 队列全部跑完时发一条系统通知——长任务结束时你多半已经切去干别的了

出错时更有用

功能 说明
原始日志 失败时可以展开看 ffmpeg 的原始输出,一键复制发给能帮忙的人
连续失败停止 同一个文件连续失败 2 次后不再自动重试(多半是文件本身的问题),行内给「重试」按钮

用起来更顺手

功能 说明
目标体积直接输入 此前只能靠 AI 建议带入,现在可以直接填「我要 50MB」
转换历史 成功与失败都记,最多 50 条;工作区可切换「队列 / 历史」
体积对比 详情栏显示 4.5 MiB → 1.2 MiB(-73%)

顺带修了三个 bug

  1. 队列重复排队:一个任务跑完后,会把所有等待中的任务重新入队
  2. 后加的格式存不住:选了 MP3 或 GIF 之后重启,输出格式会悄悄回到「保持原格式」
  3. 设置版本号脱节:保存时硬编码了旧版本号

验证

单测       178 条全绿(新增 13 条:输出路径 7、历史记录 9、格式回归)
集成测试    22 条全绿(新增断言:失败时保留原始日志)
端到端      走真实 IPC:探测 → 抽帧 → 转换,成功且带回产物体积
规格       3 个能力 33 条要求,openspec validate 全通过

安装前

  • Windows x64,不需要另装 ffmpeg(已随包分发)
  • 安装包未签名:首次运行选「更多信息」→「仍要运行」

还没做的

  • 系统托盘进度与托盘菜单
  • 右键菜单集成(资源管理器里直接转)
  • 预设导入导出
  • 一批冒烟项还没在真机上跑过(批量 10 个、4K 大文件、只读目录、磁盘写满、重启记忆)——docs/testing.md 里如实标着状态,没写成通过

FFShift v1.2.0 · 界面重构

Choose a tag to compare

@Albert-PZY Albert-PZY released this 23 Sep 07:09
d530c6b

这一版是界面重构

参考 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

Choose a tag to compare

@Albert-PZY Albert-PZY released this 23 Sep 06:02
b7cf21c

这一版有什么

内置 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

Choose a tag to compare

@Albert-PZY Albert-PZY released this 23 Sep 04:25
5be6852

这一版能干什么

  • 导入视频后立刻看到时长、分辨率、编码与缩略图;一次拖入多个文件会依次排队
  • 三档转换:更清晰(存档再剪辑)、均衡(日常)、更小(发微信、发手机)
  • 转换中显示百分比、剩余时间与速度,随时可以取消,取消后会清掉半成品
  • 报错翻译成人话:磁盘满了、目录写不进去、文件损坏、编码器不可用各有对应说明
  • 一句话让 AI 给档位建议;模型不可用时自动退回本地规则,界面会如实标注建议来源
  • 档位与输出目录会记住,下次启动还在
  • 探测到硬件编码器(NVENC / QSV / AMF)时自动使用

安装前注意

  • 需要本机已安装 ffmpeg(未随包分发,避免安装包再胖一圈)。没有的话界面会提示"未检测到 ffmpeg"
  • 安装包未做代码签名:Windows 首次运行会弹 SmartScreen,选「更多信息」→「仍要运行」
  • 支持 Windows x64

验证情况

  • 单测 117 条、集成测试 15 条(真实调用 ffmpeg)全绿
  • 端到端自检走完 探测 → 抽帧 → 转换,打包产物实测 896ms 完成一次转换
  • 冒烟清单 14 条逐条记录在仓库 docs/testing.md,未实测的条目如实标注

已知未做

  • 托盘通知(当前只有行内「打开输出目录」)
  • 连续失败 2 次后停止并给出「复制日志」
  • 目标体积的界面入口(目前通过 AI 建议带入)

完整的开发过程、决策记录与踩坑返工见仓库 docs/ 目录。