Skip to content

About

本地桌面工具:把视频抽成逐帧序列,在时间轴上预览、编辑,再按需导出图片。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

FrameExtract

带 UI 的视频逐帧抽取与编辑工具。支持后台抽帧、高性能丝滑播放,拖入 MP4 / PNG,以及对单帧的禁用、删除、复制与导出。

皮肤

点击顶部 明亮皮肤 / 深色皮肤 按钮可切换皮肤,选择会自动记住。

环境要求

  • Windows / macOS / Linux
  • Python 3.10+
  • 依赖见 requirements.txt(PySide6、OpenCV 等)

快速开始

# 安装依赖
pip install -r requirements.txt

# 启动
python main.py

Windows 也可双击 run.bat。

打包成 EXE(Windows)

双击 build_exe.bat(或在项目根目录运行它)。脚本会:

  1. 安装依赖与 PyInstaller
  2. 生成 release\FrameExtract.exe(dist\ 下也会有一份)
  3. 在桌面创建 FrameExtract 快捷方式

dist/、build/、release/、*.exe 已加入 .gitignore,不会提交进仓库。

直接打开指定视频:

python main.py "你的视频.mp4"

功能概览

功能 说明
抽帧 后台写入未压缩 PNG 供预览/播放;导出时再选 PNG/JPEG 等格式
丝滑播放 支持倍速 / 定帧率;可设定「从 A 秒到 B 秒」仅播该段(范围外帧自动禁用)
逐帧步进 可拖动进度条;下方帧卡片预览,可编辑导出名并查看分辨率
禁用此帧 预览与时间轴标记;可选择播放时跳过禁用帧
删除此帧 从当前序列移除(至少保留一帧)
复制此帧 在当前位置后插入该帧副本
导出启用帧 在根目录下新建独立文件夹;默认必含未压缩 PNG,并可同时导出 JPEG/BMP/TIFF/WebP,以及可选 MP4 / OGV 视频
裁剪导出 对启用帧批量裁剪并输出到指定分辨率(拉伸 / 等比铺满裁剪 / 等比留边);支持百分比或像素裁剪,分辨率会记住
智能剪裁 识别透明/黑底 PNG 中的独立子图,自动矩形框选,可拖动微调后拆分为帧或导出
拼图集 将启用帧按行列拼成一张 PNG 图集;可 zlib 压缩或少色调色板压缩(不改分辨率,适合黑白+透明)
智能剪裁 识别透明/黑底 PNG 中的独立子图;实线为框选、虚线为主体轮廓;框内自动抠图,可微调轮廓后导出透明 PNG
手动剪裁 纯矩形框硬切(不识别);或按行×列网格均分,如 3 行 4 列直接拆成 12 张
拼图集 将启用帧按行列从左到右、从上到下拼成一张 PNG 图集,可设列数/行数、格间距与单元格尺寸

快捷键

按键 功能
Space 播放 / 暂停
← / → 上一帧 / 下一帧
D 禁用 / 启用
Ctrl+C 复制选中帧(多选则全部复制)
Delete 删除此帧
Ctrl+O 打开视频
Ctrl+Z 撤销
Ctrl+Y / Ctrl+Shift+Z 重做

时间轴支持 Ctrl+点击 多选,便于批量禁用或删除。

项目结构

FrameExtract/
├── main.py              # 程序入口
├── run.bat              # Windows 启动脚本
├── requirements.txt     # Python 依赖
├── README.md
├── .gitignore
└── app/
    ├── main_window.py   # 主窗口与交互逻辑
    ├── models.py        # 帧序列数据模型
    ├── cache.py         # LRU 帧缓存
    ├── extractor.py     # 后台抽帧线程
    ├── image_ops.py     # 裁剪 / 缩放
    ├── atlas_ops.py     # 图集拼接
    ├── styles.qss       # 界面样式
    └── widgets/
        ├── preview.py   # 主预览区
        ├── timeline.py  # 时间轴
        ├── crop_export_dialog.py  # 裁剪导出对话框
        └── atlas_dialog.py        # 拼图集对话框

使用提示

  1. 点击「打开视频」选择文件,或直接把 MP4 / PNG 拖进窗口;视频会抽帧,PNG 可新建序列或追加。
  2. 用播放、逐帧或时间轴浏览;禁用帧在播放时可被跳过。
  3. 可在主界面「此帧导出名」为当前帧起名;导出对话框里也可批量修改。
  4. 在主界面设置「保存根目录」(可浏览或手动输入),设置会自动记住;导出对话框里也可改。
  5. 点击「导出启用帧」:确认根目录、填写本次文件夹名;留空的帧名会变成 前缀_000001.png 这类默认名。可勾选「同时导出 MP4 / OGV」并设置帧率。
  6. 点击「裁剪导出」:设定目标宽高与缩放方式,可选百分比/像素裁剪,再批量导出到独立文件夹。
  7. 点击「拼图集」:设定列数/行数后把启用帧拼成一张图集 PNG。
  8. 主界面中间区域可用鼠标滚轮上下滚动;裁剪导出 / 拼图集对话框同样支持滚动。
  9. 每次导出会在根目录下新建独立子文件夹,不会覆盖上一次导出。
  10. 抽帧临时文件默认写在系统临时目录下的 FrameExtract 中,关闭程序时会清理当前会话目录。

开发说明

# 建议使用虚拟环境
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate

pip install -r requirements.txt
python main.py

媒体文件(如 .mp4)与导出图片默认被 .gitignore 忽略,请勿把大体积样片提交进仓库。

About

本地桌面工具:把视频抽成逐帧序列,在时间轴上预览、编辑,再按需导出图片。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages