用codex做了一个视频下载小工具——从一行命令,到别人双击就能用
近做了一个小工具,起因很简单:YouGlish 这个网站,可以根据你输入的单词,自动找到全球真实视频里有人在说这个词的片段,特别适合练听力、学发音。我想把这些片段下载下来,做成自己的语料库。

youglish官网
一开始只是一个”命令行脚本”——就是那种只有黑色窗口、没有按钮、没有图标,完全靠键盘输入命令才能操作的小程序,就像早年电脑还没有桌面图标那个年代,你得自己打字告诉电脑”去做什么”。

最早的命令行PYTHON脚本
但慢慢地,我意识到:这个工具如果只有我自己会用,那太可惜了。于是它一步步长成了一个桌面软件——就是那种你双击图标就能打开、有界面、有按钮的普通程序。

最终版本
第一关:缺了个”视频剪辑师”
第一次测试时,我输入单词 democracy,程序顺利找到了 YouGlish 上的视频片段,但下载时弹出了一条报错:
ERROR: You have requested downloading the video partially, but ffmpeg is not installed.
解释一下这里的”ffmpeg”:它是一个专门处理视频的幕后程序,就像一个不出镜的剪辑师,负责把一段两小时的完整视频,精确地剪出你要的那三十秒。下载 YouGlish 片段,本质上就是先把整个 YouTube 视频拿到,再让这个剪辑师把对应时间段剪出来。没有它,下载就卡住了。
装好这个”剪辑师”,第一关算是过了。
第二关:命令行体验太差,普通人用不了
解决了技术问题,我才意识到另一个更根本的问题:命令行对普通用户太不友好了。
用户搜索一个词,只看到一堆文字描述,不知道视频内容是什么;下载失败时,报错信息像天书;如果 YouGlish 网站认出你是”机器人”(网站通常有这种防护机制,防止程序自动大量访问),程序就会一直傻等,从外面看就像是”卡死了”。
所以我决定:做成桌面软件。
用的是 Python 自带的一套图形界面工具(类似于给程序搭了一个可视化的”外壳”),搭出了一个正常人能用的界面:输入单词,点搜索,看结果,打勾,点下载。

后来又陆续加上了这些功能:
搜索结果直接显示视频封面,一眼看出内容
可以打勾选多个视频,批量下载
可以选视频清晰度(像电影院和手机看视频的区别,1080p 最清晰,360p 最省空间)
支持多国语言和不同口音
支持不加字幕、加单语字幕、加双语字幕
下载进度实时显示,不会干等着不知道发生了什么
日志(相当于程序自己的”运行日记”)直接显示在界面里,不弹额外窗口
第三关:为什么设置 100 条结果,只显示 10 条?
有段时间发现一个奇怪问题:明明设置了显示 100 条搜索结果,实际只有 10 条出现。

后来弄清楚了:YouGlish 的搜索结果页面,就像翻杂志,打开时只给你第一页,后面的要翻页才有。程序最初只”读了第一页”就停了。
改进方法是:读完第一页,再自动翻页,10 条一批往后取,直到凑够你要的数量。
第四关:字幕怎么配,要因语言而异
一开始字幕逻辑很简单,因为只考虑英语学习:要么不加字幕,要么加英文字幕,要么加中英双语字幕。
但后来软件支持了多国语言,字幕就得跟着变。
现在的逻辑是:
搜英语的时候,字幕可以选英文、英文加中文。 搜日语的时候,字幕可以选日语加英文,或者日语加中文。
这样无论学哪门语言,都能根据自己的母语搭配对照字幕。
第五关:本地预览页的”播放器错误”
软件里有个功能,可以打开一个本地网页,浏览你搜索和下载的视频结果,就像一个私人视频图书馆。
最开始这个页面直接嵌入了 YouTube 播放器,结果经常出现:
Error 153 — Video player configuration error
这不是视频坏了。YouTube 有规定:它的播放器不允许被嵌入到存放在你自己电脑上的本地网页里,就像某个商场的广播系统,不允许被接进私人房间里用。

解决方案:改成显示视频封面图。用户如果想看,点击封面就跳转到 YouTube 对应片段,不再强行内嵌。简单,但稳定多了。
第六关:打包给别人用
做到这里,工具本身已经够用了。但有个最现实的问题:如果发给别人,他们需要先安装 Python(一种编程语言的运行环境)、安装那个”视频剪辑师” FFmpeg、安装专门模拟浏览器的工具(用来访问 YouGlish 网页),还有好几个其他程序……
这对普通用户来说,是不可能完成的任务。

所以我用了一个叫 PyInstaller 的工具,它的作用类似于:把一道菜所需的所有食材、调料、锅碗瓢盆,都打包进一个大箱子,连同做菜方法一起寄给别人。他们不用去菜市场买东西,不用准备厨房,打开箱子就能开吃。
打包后是一个压缩文件,解压后只需要双击:
YouGlishClipDownloader.exe
就能用。代价是体积比较大,压缩包大约 400 多 MB,解压后接近 1GB。大部分空间被那个模拟浏览器的程序占了——它相当于把一个完整的 Chrome 浏览器装进了软件里,用来在后台自动访问 YouGlish。
第七关:发给同事,又出问题了
把软件发给同事后,出现了一个新错误:
Error: Command failed with exit code 1.
我这里测试完全正常,同事那边就是失败。
排查了很久才发现:我当初打包时,放进去的那个负责”从 YouTube 取视频”的程序(可以理解为一个专职搬运工),其实是我自己电脑上的一个”快捷方式”,而不是真正独立的程序本体。这个快捷方式在我的电脑上能用,是因为我的电脑上装有对应的完整环境;到了同事电脑上,没有这个环境,快捷方式就变成了一张废纸。
解决方法:不再靠外部的这个”搬运工程序”,改成直接调用已经打包进软件内部的同款模块——就像与其依赖外部快递员,不如把快递员直接安排进你的团队。
同时还做了一个处理:把”视频剪辑师”的所在位置临时告诉程序,让它在工作时随时能找到这把”剪刀”。
改完之后,用同事那台报错的电脑重新测试:
无字幕下载,成功

中英双语字幕烧录进视频,成功(字幕烧录就是把字幕像印章一样永久压进视频画面里,而不是游离在外的独立文件)
双击打开软件,成功
小结:真正难的不是写第一版
回头看这整个过程,和真实的软件开发几乎一模一样。
最开始想的是:能不能把这件事跑通?
接着变成:能不能让自己用得舒服?
然后变成:能不能让别人也用得起来?
最后才发现,真正难的从来不是写出第一版功能,而是那些在真实使用里冒出来的具体问题:视频找不到、字幕配错、封面图挂了、同事电脑报错……
每一个问题都很具体,也都推着这个工具往更稳定的方向走一步。
一个命令行脚本,就这样慢慢长成了别人可以双击使用的桌面软件。
夜雨聆风