ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ConvertX 完整指南:一条 Docker 命令搭建支持 1000+ 格式的自托管文件转换器

ConvertX 完整指南:一条 Docker 命令搭建支持 1000+ 格式的自托管文件转换器 ConvertX 完整指南一条 Docker 命令搭建支持 1000 格式的自托管文件转换器【免费下载链接】ConvertX Self-hosted online file converter. Supports 1000 formats ⚙️项目地址: https://gitcode.com/GitHub_Trending/co/ConvertXConvertX 是一款开源的自托管在线文件转换服务用 TypeScript、Bun 和 Elysia 构建内置 FFmpeg、ImageMagick、Pandoc 等 20 个转换引擎合计覆盖超过 1000 种格式。它解决的核心问题是不经过任何第三方服务器在自己的机器上就能完成图片、视频、文档、电子书、3D 模型之间的格式互转。适合经常跨设备传文件、又介意文件被上传到陌生平台的个人和小团队。场景什么时候你需要一个自托管文件转换器先想两个很具体的场景手机拍的照片电脑打不开。iPhone 默认保存 HEIC 格式Windows 或某些老设备根本不认反过来同事发来的 TIFF 扫描件你想转成 PNG 发给客户。这类格式互传是日常最高频的需求。文件不想经过别人的服务器。在线转换网站用起来省事但合同、证件照、内部文档一旦上传就等于把文件交给第三方保管。文件会不会被留存会不会被限速或加水印这些问题你无法控制。ConvertX 的思路很直接把转换引擎装进一个 Docker 镜像部署在你自己的服务器或 NAS 上提供一个带账号登录的网页界面。文件只在你自己的硬盘里流转转换完还能自动清理。快速上手Docker 一键部署 ConvertX整个服务就是一个容器镜像里已经装好了全部转换工具不需要在宿主机上装任何东西。最简单的方式是直接跑docker run -p 3000:3000 -v ./data:/app/data ghcr.io/c4illin/convertx或者写一个 compose 文件生产环境更推荐这种方式services: convertx: image: ghcr.io/c4illin/convertx container_name: convertx restart: unless-stopped ports: - 3000:3000 environment: - JWT_SECRET一串足够长的随机字符串 volumes: - ./data:/app/data启动后访问http://localhost:3000首次访问会进入设置页直接创建第一个账号密码保护 多账户是内置功能。有两个细节值得提前知道别把没配置的服务暴露到公网。在第一个账号创建之前任何人都能注册所以记得先设好JWT_SECRET未设置时会用一次性的随机 UUID 签名 token容器重建后旧登录态会失效。非 localhost 且非 HTTPS 的访问方式需要显式开启设置HTTP_ALLOWEDtrue官方建议仅在本地这样用。另外如果启动时看到 unable to open database file 的错误给挂载的./data目录补一下权限即可chown -R $USER:$USER ./data。日常使用从上传到下载只需 4 步登录后的操作路径非常直白上传文件在首页选择文件支持一次选多个。每个转换任务会分配一个独立的 jobId文件按用户 ID / 任务 ID的目录结构存放在./data下互相隔离。选择目标格式页面会根据文件扩展名动态列出所有可行的输出格式这个列表由各转换引擎的 from/to 清单自动聚合见 src/converters/main.ts。点击转换请求返回后立即跳转到结果页转换本身在后台进行批量文件会分块并发处理不用盯着页面等。下载与清理结果页逐个下载历史页可以看所有任务状态上传的文件默认每 24 小时自动检查一次并删除超龄文件由AUTO_DELETE_EVERY_N_HOURS控制设为 0 则关闭自动清理。对偶尔转一个文件的用户来说流程到此就够了。能力拆解1000 格式是怎么做到的ConvertX 自己不做格式解析它的万格式来自对 20 个成熟转换工具的封装全部源码在 src/converters/ 下每个文件对应一个引擎。几个主力选手的覆盖规模来自 README.md引擎用途可读取格式可输出格式FFmpeg音视频约 472约 199ImageMagick图像245183GraphicsMagick图像167130Assimp3D 模型7723Pandoc文档4365LibreOffice办公文档4122Calibre电子书2619调用逻辑集中在main.ts的mainConverter函数每个引擎导出自己的convert函数和from/to格式清单运行时按源扩展名 目标扩展名去匹配清单命中谁就调用谁比如 EMF 文件会优先交给 Inkscape 而不是 ImageMagick因为处理得更好。没匹配到就直接返回不支持不会乱跑。批量处理方面handleConvert会用一个chunks函数按MAX_CONVERT_PROCESS把文件列表切块块内所有文件通过Promise.all并发转换块与块之间串行推进。默认值 0 表示不限制并发小内存机器上建议设成 2~4 防止多个 FFmpeg 进程把内存打满。安全机制层面登录态用 JWT 签发7 天有效期密钥来自JWT_SECRET文件名经过 sanitize 处理防止路径注入上传、输出、结果查询都校验 jobId 归属一个账号看不到另一个账号的文件。进阶玩法调参、自定义参数与二次开发常用环境变量变量默认值作用FFMPEG_ARGS空传给 FFmpeg 输入端如-hwaccel vaapi开启硬件解码FFMPEG_OUTPUT_ARGS空传给 FFmpeg 输出端如-preset veryfast加快编码MAX_CONVERT_PROCESS0不限并发转换进程数上限AUTO_DELETE_EVERY_N_HOURS24每 n 小时清理超过 n 小时的文件0 为关闭ACCOUNT_REGISTRATIONfalse是否允许注册新账号单人使用时保持关闭WEBROOT空挂载子路径设为/convert则站点在example.com/convert/下HIDE_HISTORYfalse隐藏历史页LANGUAGEen日期等字符串的语言BCP 47 标签ALLOW_UNAUTHENTICATEDfalse允许免登录使用仅限本地场景有硬件转码需求的用户重点看FFMPEG_ARGS比如 N 卡机器可以尝试 vaapi/vulkan 加速官方 README 里附有相关 issue 的讨论线索。镜像提供:latest跟随 release和:main跟随 main 分支最新提交两个 tag常规使用选:latest。二次开发开发流程是标准的前端项目套路装好 Bun 和 Git 后克隆仓库然后git clone https://gitcode.com/GitHub_Trending/co/ConvertX cd ConvertX bun install bun run dev想加一个新转换器的路径也很清晰在src/converters/新建文件导出convert函数和from/to格式属性可参考 ffmpeg.ts 的结构再到 main.ts 的properties表里注册一行即可参与路由分发。tests/converters/下有现成的测试模板可以照着写。收尾把它放进你的服务列表ConvertX 的价值不在某个炫酷功能而在于把格式转换这件碎事变成了基础设施一条 Docker 命令部署数据全程不出自己的机器1000 格式按需取用。跑起来之后可以接着探索的方向包括用WEBROOT把它挂到现有域名子路径下、给 FFmpeg 配上硬件加速、按内存情况调低并发数以及为团队开启多账号并关闭注册。【免费下载链接】ConvertX Self-hosted online file converter. Supports 1000 formats ⚙️项目地址: https://gitcode.com/GitHub_Trending/co/ConvertX创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进