收起左侧

基于 HandBrake 开发的批量视频压缩应用

0
回复
33
查看
[ 复制链接 ]

1

主题

7

回帖

0

牛值

江湖小虾

平台:飞牛 fnOS FPK 应用

类型:Native(原生 Python 服务)

版本:v1.0.0

双平台架构:x86 + ARM

一、核心技术栈

后端: Python 3 · http.server · threading · sqlite3
编码: HandBrakeCLI(自动解析 JSON 进度)
探测: ffprobe / HandBrakeCLI --scan(码率检测)
GPU: /dev/dri + /dev/nvidia* + lspci 回退

二、Web 界面(4 个卡片)

🖥️ GPU 硬件加速卡片

GPU功能未测试,因为我的NAS没有GPU,欢迎大家提交更多日志来协助程序的开发

启动时自动检测 GPU(NVIDIA / Intel QSV / AMD VCN)
显示检测结果 + 推荐编码器
点击「应用推荐」一键切换预设参数

参数说明

压缩目录路径=扫描目标目录

码率阈值 (kbps)=高于此阈值的视频才压缩

输出文件后缀=默认 _compressed

保存位置=原目录 / 自定义目录

保持目录结构=输出目录中保留原目录层级

压缩后删除原文件=开关,默认开启

🎯 编码预设卡片(默认折叠)

7 类预设:General / Web / Professional / Hardware / Matroska / Devices / Fast 1080p30
选择预设后展开 20 个可调参数:

视频编码器、硬件解码、质量(RF)、平均码率、质量控制模式、帧率、帧率模式
编码器预设、H.264 Profile、H.264 Level、编码调优
视频宽/高、像素宽高比、输出格式
音频编码器、音频码率、音频混音、音频采样率
布尔开关:多通道编码、Turbo 多通道、自动裁剪、保持比例、Web 优化、章节标记

硬件解码选项按检测到的 GPU 类型动态过滤

▶️ 任务控制卡片

▶ 开始压缩 / ⏹ 停止 / 🗑 清空记录
运行中实时显示:

活跃任务:每个文件独立进度条 + 文件名 + 百分比 + 输出大小/原大小 + 码率 + ETA
已完成任务:自动消失(3s),显示 ✅ 成功 / ⏭️ 跳过 / ❌ 失败
7 项统计:待处理 / 已完成 / 压缩成功 / 跳过 / 历史跳过 / 失败 / 耗时

📋 运行日志卡片

单色等宽字体,实时滚动
自动保留最近 500 行

三、后端处理流程

**── 构建预设(基础预设 + 用户覆盖参数)
**── 递归扫描目录(跳过已压缩后缀、临时文件)
**── process_file() × 每个视频
** **── 跳过:已有输出文件 → finished_tasks
** **── 跳过:数据库记录 ≥3 次失败 → finished_tasks
** **── 跳过:数据库记录超大小 → finished_tasks
** **── ffprobe 检测码率(失败 → HandBrakeCLI --scan 回退 → 估算回退)
** **── 跳过:码率低于阈值 → finished_tasks
** **── compress_file() >> HandBrakeCLI --json
** ** **── 实时解析 JSON 进度(百分比 + ETA + 输出大小)
** ** **── 输出超原文件 → 立即中止(kill 进程)
** ** **── 进度 <50% 且输出 >50% → 立即中止(提前止损)
** **── 校验输出大小
** **── 无收益 → 丢弃并记录 oversize
** **── 成功 → 临时文件 rename 到最终位置
** **── 按配置决定保留/删除原文件
**── 汇总日志 + 统计

四、智能数据库(SQLite)

表 file_stats 持久化记录每个文件的处理历史:

fail_count — 失败次数(≥3 次自动跳过)
oversize — 超大小次数(≥1 次自动跳过)
last_result / last_time — 最后结果和时间

命令:/api/clear_db 一键清空(二次确认弹窗)

五、日志系统(双文件)

vidoyas_cmd.log(启动脚本调试日志)

vidoyas_server.log(Python 服务运行日志)

Web 界面日志与 _server_log 同步写入。

六、生命周期管理(cmd/main)

开始
检测 python3 + HandBrakeCLI → py_compile 预检 → 加载依赖库路径 → 写入默认配置 → 后台启动服务 → 2s 后检查存活

停止
kill PID → kill -9 → 清理 HandBrake 残留进程

状态
检查 PID 文件 + 进程是否存活

七、打包

vidoyas-x86_1.0.0.fpk (19M) — x86_64 平台
vidoyas-arm_1.0.0.fpk (32M) — ARM64 平台

完全离线运行,无外部网络请求

程序不会完全删除你的原文件,删除的原文件会在回收站,确认压缩后的文件没有问题再手动删除

数据无价,谨慎操作

下载链接

https://wwbog.lanzoub.com/b01d71kaxc
密码:de0d

Jietu20260629-144714@2x.png

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则