本文来自微信公众号「萌动的红日」,关注后可第一时间收到推送
打开原文 · 去微信公众号阅读

我用 AI 写了个视频下载器软件,支持众多软件:4381 行代码、8 轮返工,踩的坑全公开

大家好,我是萌动的红日,专注分享电脑知识。上个月我想给自己做个 Windows 桌面小工具。翻出十年前的 Python 书记了半页,一晚上只憋出一个会报错的空白窗口,还顺手把环境变量改坏了。

后来我换了个思路——让 AI 当程序员,我当产品经理兼测试。8 轮返工之后,一个 4381 行、能天天用的桌面软件真的跑起来了。

先说结论:AI 确实能帮你写出能日常用的软件,但绝不是"一句话生成"。真实流程是你提需求 → AI 写 → 你测出问题 → AI 修,一轮一轮磨出来的。这篇文章我把界面、代码结构、踩过的坑、实测数据全部摊开,源码放在 GitHub(文末自取),照着做能少走一半弯路。

💡 本文讲的是怎么用 AI 做软件,工具本身只是练手载体。涉及下载功能的部分仅作技术演示,实际使用请遵守站点条款与版权规定,仅供个人学习。

一、做出来的东西长这样

软件主界面(下载页),一张已完成任务的列表,进度条满格,底部有运行日志
▲ 软件主界面(下载页),一张已完成任务的列表,进度条满格,底部有运行日志

这是一个 Windows 桌面程序,四个标签页:下载 / 历史记录 / 设置 / 关于

它的功能清单:

功能
说明
批量下载
链接一行一个,支持从剪贴板批量粘贴、导入 txt
队列与并发
可设同时下载几个任务,支持暂停 / 继续 / 取消
画质选择
最佳画质 / 1080P / 720P / 仅提取音频为 MP3
下载历史
SQLite 落库,记录标题、大小、时间、保存路径
重复提醒
同一个视频再下会提示"已下载过",但保留重下选项
一键操作
历史记录里直接打开所在文件夹,或双击直接播放
组件自更新
yt-dlp、ffmpeg 一键检查更新,走国内镜像通道
系统托盘
关闭窗口缩到托盘,右键菜单可退出
绿色便携
所有数据写在程序同目录,不碰注册表和系统目录
历史记录页,列表里有标题/状态/大小/时间/操作按钮
▲ 历史记录页,列表里有标题/状态/大小/时间/操作按钮

最实用的是最后两条。我见过太多"绿色软件"装完 C 盘多出 2 GB、注册表一堆残留,所以这个程序的所有东西都锁在程序同目录的 videodownloadconfig\ 文件夹里,删掉文件夹就是彻底卸载。

二、为什么是 Python + tkinter,不用 Electron

做桌面软件,很多人第一反应是 Electron(就是很多国产软件用的那套)。我没选,原因很直接:

  • 体积:Electron 打个 hello world 就 150 MB 起;这个程序完整版 89.7 MB,里面还塞了两个命令行组件
  • 依赖:Python 的 tkinter 是标准库自带的,装好 Python 就能跑,一行 pip install 都不用
  • AI 熟悉度:tkinter 是 Python 官方组件,AI 的训练语料里多到溢出,写出来的代码出错率明显更低

代价是界面朴素。但你看我截图就知道,ttk 自带的主题做日常工具完全够用,而且原生窗口在老电脑上不卡。

设置页,能看到并发数、画质、代理、托盘等选项
▲ 设置页,能看到并发数、画质、代理、托盘等选项

三、16 个文件的代码目录,各管一摊

让 AI 写代码,第一件事不是让它写,是让它先给目录结构。这一步直接决定后面好不好改。

我的最终目录长这样(app\ 下 14 个模块 + 入口,共 4381 行):

video-downloader/├── main.py                 程序入口 + 组件释放(289 行)├── 启动.bat                双击就能跑(自动找 Python)├── build_exe.py            打包脚本,支持 3 种产物形态├── app/│   ├── paths.py            数据目录定位(71 行)│   ├── config.py           配置读写(98 行)│   ├── db.py               下载历史 SQLite(127 行)│   ├── components.py       组件探测/下载/备份回滚(616 行)│   ├── downloader.py       下载引擎 + 任务队列(550 行)│   ├── tray.py             系统托盘,纯 ctypes(419 行)│   ├── utils.py            日志 / 工具函数(189 行)│   └── ui/│       ├── main_window.py  主窗口 + 消息轮询(401 行)│       ├── download_tab.py 下载页(566 行)│       ├── history_tab.py  历史页(197 行)│       ├── settings_tab.py 设置页(274 行)│       ├── about_tab.py    关于页(258 行)│       └── dialogs.py      各种弹窗(322 行)└── tools_*.py              12 个测试/打包脚本,共 1532 行

两个值得说的点:

1)UI 和逻辑是分开的。 app\ 根目录放"干活"的(下载、配置、组件),app\ui\ 放"显示"的。这样改界面不会碰坏下载逻辑,AI 改起来也不容易串。

2)测试脚本比想象中重要。 那 1532 行 tools_*.py 不是我闲,是被逼的——AI 写的代码"看起来能跑",一测全是坑。没有这堆脚本,第 8 轮那个 bug 我到现在都找不到。

四、8 轮迭代:AI 写代码翻车的 5 个真实瞬间

这部分是我最想写的。网上教程都演示"AI 一句话生成完美代码",没人告诉你中间要返工几轮。我这 8 轮里,AI 翻车翻得最狠的 5 次:

坑 1:界面突然卡死,连关闭都点不动

AI 把"检测组件版本"的代码写在了主线程。而 yt-dlp.exe 本身是个单文件打包程序,每次运行都要先自解压 20 MB。三个组件串着测,界面直接冻住几十秒。

修法是把检测扔到子线程,再把"只显示缓存"做进去。实测对比:

操作
修复前
修复后
切到"关于"页
卡住数十秒
32 毫秒
强制重测版本
1492 毫秒
8.6 毫秒
版本缓存命中
2782 毫秒
0.002 毫秒

坑 2:中文路径全变成乱码

³ÌÐò¿ª·¢ 这种鬼画符。原因是 yt-dlp.exe 在中文 Windows 上恒定用 GBK 输出,AI 默认按 UTF-8 解码。改成"先试 UTF-8、失败回退 GBK"才正常。

坑 3:拷到别的电脑,双击后一直转圈

AI 打包用的单文件模式(onefile),启动时要先把 250 MB 解压到临时目录,这段时间窗口一个都没有,杀毒软件再一扫描就是几分钟。解法是加一个"释放进度窗口",同时提供不解压的文件夹版。

坑 4:系统托盘右键完全没反应,程序还退不出去

这是最难的一个,折腾了整整一轮。点 X 之后窗口没了、图标在、右键没菜单、任务管理器里进程还活着——看起来就是"卡死"。

最后查出是三个问题叠在一起:ctypes 的指针类型声明错了(Windows 上 wintypes.LPARAM 只有 32 位)、拿错了窗口句柄(Tk 窗口没初始化完时返回的是个假句柄)、以及在系统回调里直接调了界面函数(这会让 Python 直接崩溃,连报错都没有)。

这种 bug 的可怕之处在于:它不报错,只是"没反应"。没有测试脚本对着它连点 30 次,我一辈子都以为是随机卡顿。

坑 5:交付包少了 156 MB 的文件

打包脚本里写了个"跳过 bin 目录"的规则,结果把组件文件夹也一起跳过了。压缩包 130 MB,实际应该 210 MB。这种错误不改代码根本发现不了——直到写了"解压后逐文件校验"的脚本才现形。

五、实测数据

关于页,能看到 yt-dlp 和 ffmpeg 的具体版本号与来源
▲ 关于页,能看到 yt-dlp 和 ffmpeg 的具体版本号与来源

我这台机器(Windows 11,固态硬盘)实测:

指标
数值
主程序代码量
4381 行(16 个 .py 文件)
测试/打包脚本
1532 行(12 个文件)
启动耗时(完整版首次)
4.48 秒
启动耗时(之后每次)
3.70 秒
完整版安装包
89.7 MB(内含 yt-dlp + ffmpeg)
精简版安装包
29.0 MB
ffmpeg 压缩后
156.6 MB → 60.7 MB(约 39%)
自动化测试
组件 21 项 + 托盘 17 项 + 界面端到端,全部通过
界面响应性探测
连续 30 次,0 次无响应
组件下载弹窗,底部
▲ 组件下载弹窗,底部"取消下载/关闭"两个按钮清晰可见

说明一下:ffmpeg 那 156 MB 是我实测压下来的(deflate 最高级别能压到 39%),所以完整版才能塞进 90 MB 以内。这个数字网上查不到,只有自己压过才知道


六、想用 AI 写软件,先记住这 4 条 ⚠️

⚠️ 别一次提十几个需求。 我第一版就犯了,AI 一次性写 800 行,错一处全盘崩。后来改成"先出目录结构 → 我确认 → 一个模块一个模块来",效率翻倍。

⚠️ 每写完一个功能就测,别攒到最后。 坑 4 那个托盘问题,如果拖到 8 个功能全写完再测,排查成本至少翻三倍。

⚠️ 让 AI 自己写测试脚本。 它写的测试比我手写的覆盖全,而且它能看懂自己写的测试,改起来快。

⚠️ 关键数据要留证据。 卡不卡、多大、几秒,必须实测填进去。"应该很快吧"这种话,读者一眼就能看出来。

七、源码怎么拿、怎么跑

完整源码和 6 张界面截图都在这里

👉 https://github.com/fanyuping/videodownloader

只想跑源码的话,3 步:

1. 装好 Python 3.10 以上(勾选 Add to PATH)2. 双击目录里的 启动.bat3. 首次启动会引导下载 yt-dlp / ffmpeg 组件,走国内镜像

想自己打包成 exe:

python build_exe.py              # 单文件完整版(89.7 MB)python build_exe.py --lite       # 精简版(29.0 MB)python build_exe.py --onedir     # 文件夹版(启动最快)
💡 再次提醒:仓库里的下载功能仅作技术演示。下载任何内容前请确认你有相应权限,遵守站点服务条款与版权规定,仅供个人学习,请支持正版。

分人群建议:

如果你只是想要个顺手的下载工具,直接下仓库里打包好的版本;

如果你是想学用 AI 做软件,重点看第四节的 5 个坑和那 12 个测试脚本,比看十个教程都管用;

如果你已经在做类似的事,评论区务必聊聊你踩过什么坑,我想知道我不是一个人。

互动问题: 你用 AI 写代码时,是让它"一次写完"还是"一段一段来"?哪种翻车少?

后台回复【AI编程】,我把这篇的源码地址、打包命令和避坑清单整理成一份文档发你。

#AI编程 #Python #效率工具 #电脑技巧 #小白必看 #程序开发


关注「萌动的红日」

每天一点正能量,陪你迎接每一个萌动的红日。关注公众号,第一时间阅读最新文章。

本文内容已在公众号首发,点击下方按钮可跳转微信原文

打开原文 · 去微信公众号阅读

原文链接:在微信公众号中阅读

下一篇时隔快一年,豆包输入法终于上 Windows 了!
← 返回文章列表
关注公众号