本地优先就是隐私优先
云端转换器的真实问题
现在打开搜索引擎搜"文件格式转换",第一页几乎全是上传下载式的网页:
- 拖拽文件到浏览器 → 服务器上某个进程处理 → 你从同一个服务器下载结果。
这条路听起来方便,但仔细想一下它意味着什么:
你的源文件被上传到了某个第三方的服务器上。 无论那个服务器在哪个地区、无论它的隐私政策写得多漂亮,这一步已经发生了。
对于很多人来说这无所谓——转换一个网页模板、一张截图、一个测试用的小 PDF,丢出去转一下没关系。但对于下面这些场景,云端上传就是可避免的风险:
- 私人照片、家庭视频、旅行录像;
- 工作文档、合同草稿、客户交付文件;
- 任何包含你不想让第三方看到的内容的文件。
还有个问题:你不知道那个服务器会把你的文件保留多久、用它做什么、会不会被泄露。 有些服务宣称"转换完成后 24 小时删除",有些只说"不声明审核"——但"不看"不代表"不留"。
ZenConverter 的核心承诺
ZenConverter 在下载页面上用一句话说明了自己的定位:
Files do not need to leave the machine.
文件不需要离开你的设备。这不是一个可选选项,是默认行为,也是设计目标。
具体做法:
- 转换管线全在手机本地运行:FFmpeg 用的是打包进 APK 的原生库、NCNN 模型下载到设备存储后在本地推理、PDFBox 在内存里合并 PDF;
- 文件不走网络:无论是源文件还是输出文件,都从 SAF 拿到文件描述符,直接读写本地存储;
- 应用仅申请
INTERNET权限,且声明得很清楚:这个权限只用于手动检查应用更新、以及按需下载 AI 模型和字体包; - 下载的 AI 模型走 SHA-256 校验,确认和官方仓库里的哈希一致后才加载,不会随便加载一个从网络来的 .onnx/.bin 文件;
- 不申请不必要的权限——比如不申请
CAMERA、LOCATION、READ_CONTACTS等和转换无关的权限。
那 INTERNET 权限是做什么的
这里容易产生误解,单独说清楚。INTERNET 权限不是"偷偷上传文件"的伏笔,它在应用里只做两件事:
1. 手动检查更新
在设置页点"检查更新",应用会去 GitHub Releases API 拉一下最新版本号,和当前 APK 版本比对。这一步是用户主动触发的,不是每次启动都后台偷偷跑。
2. 按需下载 AI 模型
Real-ESRGAN 图片 4× 超分需要神经网络模型文件。这些模型分两档:
| 模型 | 大小 | 用途 |
|---|---|---|
| realesr-general-x4v3(轻量极速) | 4.65 MB | 通用图片,速度更快 |
| RealESRGAN_x4plus(高画质) | 63.9 MB | 通用图片,画质更高 |
Noto Sans CJK(系统排版字体替代):约 30.8 MB。
这些都是明确告知用户的——你想用 AI 超分就下载,不用就不下载,下载完校验 SHA-256,确认是官方那一份。整个转换过程不涉及网络传输任何文件。
对比几个常见方案
| 方案 | 文件在哪 | 隐私风险 | 费用 | 体验 |
|---|---|---|---|---|
| ZenConverter | 全程在手机 | 无 | 免费无广告 | 本地处理,大文件快 |
| 网页转换服务 | 上传到服务器 | 有 | 免费版有限制,Pro 收费 | 大文件上传慢,有等待队列 |
| 桌面端 FFmpeg | 电脑本地 | 无 | 免费 | 需要电脑,非移动场景 |
| 安卓商店某些"万能转换器" | 部分本地部分云端 | 不确定 | 广告+内购 | 体验混乱 |
本地处理也有代价
诚实起见,也要说清楚。本地处理意味着:
- 大视频耗电大:高分辨率视频的重新编码会满载 CPU 和 GPU,手机可能发热,电量掉得快;
- 大视频耗空间:输出文件和源文件同时存在一段时间,转换前要留足可用存储;
- 不支持的引擎就是不支持:某些冷门编解码器如果没在 APK 的 FFmpeg 包里,就不会被识别——云端转换器反而可能支持更多因为它们可以动态扩引擎。
这些代价是故意接受的。团队在技术路线里写了:不假装自己是万能转换器。
