这是一篇真实操作记录,不是理论教程。
今天我从零把 YouTube 下载环境跑通,最终用
yt-dlp + Node.js + FFmpeg 成功下载了一个 1080P MP4,并在电脑和手机上验证可以正常播放。一、先说最终结果
最终我没有安装所谓的“万能下载器”,也没有继续做 GUI,更没有马上制作 BAT。
实际使用的工具非常简单:
- yt-dlp:负责从 YouTube 获取视频
- Node.js:给 yt-dlp 提供 JavaScript runtime
- FFmpeg:负责把视频和音频合并成最终 MP4
- VS Code:作为操作和管理工具
- PowerShell:执行命令
最终工具目录为:
其中真正需要的核心文件是:

二、第一步:从 GitHub 下载 yt-dlp

我首先在 GitHub 找到了官方项目:(184k的星星收藏)
进入项目的 Release 页面,下载 Windows 使用的
yt-dlp.exe。
下载以后,我最开始把它放在:
里面可以看到:

检查 yt-dlp 是否正常
打开 CMD,进入目录:
然后执行:
如果出现类似:
说明 yt-dlp 已经正常运行。

三、第二步:准备 Node.js
后来实际测试 YouTube 时,yt-dlp 给出了一个重要提示:
也就是说,新版 YouTube 的解析越来越依赖 JavaScript runtime。
我电脑里已经安装了 Node.js,所以直接检查:
当时显示:
说明 Node.js 已经可以使用,不需要另外安装。
如果电脑没有 Node.js,则需要先安装 Node.js 的 LTS 版本。同样的github下载;
可以说现在github就是一个百宝箱👍


四、第三步:下载 FFmpeg
第一次成功下载视频的时候,yt-dlp 又提示:
这意味着视频和音频虽然可以分别下载,但最好使用 FFmpeg 把它们自动合并成一个完整的 MP4。
我使用的是 Windows 的 FFmpeg build:
当时下载的是:

解压以后,里面有:
我把这三个文件复制到了工具目录。

五、第四步:把工具集中起来
一开始 yt-dlp 和 FFmpeg 是放在单独的目录里的。
后来为了方便长期管理,我建立了:
把核心工具放在一起:
其中
downloads 是最终下载视频的目录。需要特别说明:真正让 YouTube 下载跑起来的核心仍然只是 yt-dlp + Node.js + FFmpeg。
后面的 PowerShell、配置文件、模块化结构,是我后来为了工具管理而建立的内容,并不是下载一个视频的必要条件。
六、第五步:用 VS Code 打开工具目录
我使用 VS Code 打开:
然后:
终端 → 新建终端
底部出现:
这一步非常重要,因为后面的命令都是在这个目录下执行。

七、第六步:再次检查 yt-dlp
在 VS Code 的 PowerShell 中执行:
当时显示:
说明现在 VS Code 已经能够直接调用工具目录里的 yt-dlp。
八、第七步:第一次测试 YouTube 下载
一开始我尝试下载一个 YouTube 视频,使用的是非常简单的命令:
这次已经能够真正开始下载。
但第一次测试时没有 FFmpeg,yt-dlp 提示最好安装 FFmpeg。
所以我完成 FFmpeg 配置以后,再进行正式下载。
九、第八步:最终使用的 1080P MP4 命令
为了让视频更适合手机播放、微信传输以及后续上传视频号、小红书,我没有继续追求 4K,而是选择 1080P + H.264 视频 + AAC/MP4 音频。
最终实际成功使用的命令是:
使用的时候,只需要把最后的:
替换成真正的视频链接即可。
例如:
十、这条命令到底是什么意思?
如果只想使用,不需要完全理解;但我还是把它记录下来,方便以后自己回看。
--js-runtime node
告诉 yt-dlp:
使用电脑上的 Node.js 作为 JavaScript runtime。
这是因为 YouTube 的网页解析越来越依赖 JavaScript。
--ffmpeg-location .
告诉 yt-dlp:
FFmpeg 就在当前目录。
也就是:
height<=1080
限制最高画质为 1080P。
所以不会为了追求最高画质而自动下载 4K、8K。
vcodec^=avc1
优先选择 H.264/AVC 视频编码。
这是为了兼容更多设备和平台。
acodec^=mp4a
优先选择 MP4/AAC 音频。
--merge-output-format mp4
让 FFmpeg 把视频和音频合并成最终的 MP4 文件。
-P "downloads"
把最终文件放进:
这样下载的视频不会和工具文件混在一起。
十一、第九步:确认下载成功
执行命令以后,终端会出现类似:
最后如果又回到了:
而没有出现 ERROR,基本就说明下载和合并已经完成。
最终打开:
就可以看到 MP4。

十二、最后的测试
这次实际下载的视频大约 150 MB 左右。
我先在电脑上打开测试,播放正常。
然后传到 iPhone 11 测试,也可以正常播放。
所以到这里,这个项目真正完成了。
不是“研究完成”,而是:
真的下载出了一个可以使用的 MP4。
十三、以后如果需要下载封面
如果以后需要同时保存 YouTube 封面,只需要增加:
例如:
这样会同时保存视频和缩略图。
这个功能目前不需要专门制作工具,真正需要的时候再使用即可。
十四、为什么最后没有继续制作 BAT?
这是这次操作里我觉得最值得记录的一点。
最开始只是想:
下载一个 YouTube 视频。
结果中间很容易一路升级成:
最后可能花几个小时,甚至几天,却还没有下载出一个真正的视频。
这和我以前做网站的时候很像:
真正重要的事情反而被推迟了。
所以这一次,我及时停了下来。
目前的方案已经够用了。
以后如果我开始频繁下载 YouTube 视频,再把这条命令做成 BAT,让操作变成:
如果未来 Agent 已经可以一句话完成这件事情,那么甚至连 BAT 都没有必要继续维护。
十五、我的工具原则

这次经历让我更加确定一套以后做项目的原则。
1. 先解决问题,再考虑升级
当前问题是什么,就解决什么。
不要因为未来可能需要某个功能,就提前开发。
2. 先算时间成本
一个工具如果只需要几分钟手动操作,却要花几个小时开发自动化,那么现在就没有必要自动化。
3. 升级是备选方案,不是默认路线
GUI、BAT、Toolkit、Agent 都可以以后再做。
它们应该作为:
需求出现之后的升级方案。
而不是每次都主动引导自己继续升级。
4. 人的时间比工具的完美更重要
AI 可以无限讨论、无限修改、无限优化。
但我是人。
我的时间有限。
我还需要工作、学习日语、练琴、健身、写博客,以及准备未来去日本生活。
所以:
AI 的无限时间,不应该消耗人类有限的时间。
5. 足够好就停止
这次真正的完成标准非常简单:
这就是一个完整项目。
不需要为了“更漂亮、更自动化、更高级”而继续升级。
十六、最终工具清单
这次真正用到的工具:
工具 | 用途 |
yt-dlp | 下载 YouTube 视频/音频 |
Node.js | JavaScript runtime |
FFmpeg | 合并视频与音频 |
VS Code | 编辑、管理工具文件 |
PowerShell | 执行下载命令 |
GitHub | 获取 yt-dlp |
其中:
Git、VS Code、Node.js、FFmpeg、yt-dlp 都属于可以以后重新下载的工具。
真正需要重点备份的是自己的配置和数据,而不是每一个软件安装包。
这也是我现在越来越倾向于的做法:
工具可以重新下载,自己的数据和配置才值得认真备份。
十七、这次项目的最终状态
状态:完成。
当前方案:
目前不制作 BAT。
等实际下载需求增加以后,再决定是否自动化。
技术应该服务人生,而不是让人生服务技术。
这一次,我真正学到的不是“如何下载 YouTube”,而是:
什么时候应该继续升级,什么时候应该停下来,开始生活。

- 作者:Jaime Tsai
- 链接:https://jaimetsai.com/article/youtube-download-yt-dlp-ffmpeg
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。










