带 UI 的视频逐帧抽取与编辑工具。支持后台抽帧、高性能丝滑播放,拖入 MP4 / PNG,以及对单帧的禁用、删除、复制与导出。
点击顶部 明亮皮肤 / 深色皮肤 按钮可切换皮肤,选择会自动记住。
- Windows / macOS / Linux
- Python 3.10+
- 依赖见
requirements.txt(PySide6、OpenCV 等)
# 安装依赖
pip install -r requirements.txt
# 启动
python main.pyWindows 也可双击 run.bat。
双击 build_exe.bat(或在项目根目录运行它)。脚本会:
- 安装依赖与 PyInstaller
- 生成
release\FrameExtract.exe(dist\下也会有一份) - 在桌面创建
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 # 拼图集对话框
- 点击「打开视频」选择文件,或直接把 MP4 / PNG 拖进窗口;视频会抽帧,PNG 可新建序列或追加。
- 用播放、逐帧或时间轴浏览;禁用帧在播放时可被跳过。
- 可在主界面「此帧导出名」为当前帧起名;导出对话框里也可批量修改。
- 在主界面设置「保存根目录」(可浏览或手动输入),设置会自动记住;导出对话框里也可改。
- 点击「导出启用帧」:确认根目录、填写本次文件夹名;留空的帧名会变成
前缀_000001.png这类默认名。可勾选「同时导出 MP4 / OGV」并设置帧率。 - 点击「裁剪导出」:设定目标宽高与缩放方式,可选百分比/像素裁剪,再批量导出到独立文件夹。
- 点击「拼图集」:设定列数/行数后把启用帧拼成一张图集 PNG。
- 主界面中间区域可用鼠标滚轮上下滚动;裁剪导出 / 拼图集对话框同样支持滚动。
- 每次导出会在根目录下新建独立子文件夹,不会覆盖上一次导出。
- 抽帧临时文件默认写在系统临时目录下的
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 忽略,请勿把大体积样片提交进仓库。