vptool(命令名 vp)是一个面向「视频 → 音频 → 字幕」全链路的命令行工具,同时也顺手收了
「素材抓取」这一段。它把日常反复用到的 yt-dlp / ffmpeg 调用、抖音视频解析、微信公众号文章抓取、
VTT 字幕整理这些零散操作,收敛成一组带交互式选择的子命令,不用再记一长串参数。
npm install -g @lppx/vptool安装完成后可执行文件为 vp:
vp --version
vp --helpgit clone https://github.com/lipanpan-hub/vptool.git
cd vptool
npm install
npm run build
npm link # 把 vp 链接到全局Linux / macOS 下若出现
Permission denied,给入口脚本补上执行权限:chmod +x bin/run.js bin/dev.js
- Node.js >= 18
yt-dlp与ffmpeg:无需手动装,vp dl check --update会自动下载到本地- Firefox(可选):仅在需要用浏览器 cookies 下载会员/登录内容时用到,未安装时启动会有一条提示
支持 yt-dlp 覆盖的绝大多数站点(YouTube、Bilibili 等)。
vp dl <URL>/vp dl video <URL>:下载视频。默认拉取格式列表让你交互式挑选清晰度, 也可以用--best直接取最优视频+最优音频并合并,或用--format-id指定确切格式。--keep-audio会在视频之外额外抽一份 mp3(适合喂给语音识别),--use-cookies从 Firefox 取 cookies。vp dl vmeta <URL>:只看元信息(标题、时长、可用格式等),不下载。vp dl check [--update]:体检yt-dlp与ffmpeg的路径和版本,--update顺手把缺的二进制装上。vp dl updatebin:把本地yt-dlp升到最新版(站点接口变动导致下载失败时,先跑这个)。vp dl list [--path]:递归列出工作目录下的文件与文件夹。vp dl cd [X]:在工作目录下交互式选目录并进入(支持拼音、模糊匹配),会开一个子 shell,exit返回。vp dl open:用系统文件管理器打开工作目录。
下载产物的目录结构为:
<documentsPath>/<prefix>/<站点域名>/<视频标题>.<扩展名>
其中 prefix 是每次下载前交互选择的一级子目录,默认候选是 x。输入一个新值时会问你要不要
存进配置的 dlPrefix 列表,下次直接从列表里选。
vp douyin fetch-one-video <INPUT>(别名 vp dy fov):吃链接也吃整段分享文案(会自己把
https://v.douyin.com/... 抠出来),通过 TikHub 接口解析后下载,并自动抽取音频。
--provider 可以指定解析接口(app-v1 / app-v2 / app-v3 / app-share / web-share /
web-v2 / web-v1);不指定则进入交互式菜单。某个接口失效时换一个通常就能过。
首次使用会提示输入 TikHub API Token,输入后写进配置文件,之后不再询问。
vp wechat mp dl <URL>(别名vp wx mp dl/vp mp dl):把公众号文章正文抓成本地 txt。--provider指定解析接口(tikhub-h5字段最全,tikhub响应更快);不指定时会进入交互式菜单。--output可以临时覆盖输出根目录。vp wechat mp opendir(别名vp wx mp opendir/vp mp open):用系统文件管理器打开文章存放目录。
保存路径按公众号自动分文件夹,文件名取「发布日期 + 标题」:
<documentsPath>/1111微信公众号/<公众号昵称>/<YYYY-MM-DD 文章标题>.txt
和 vp douyin 共用同一个 TikHub Token,首次使用同样会引导录入。
vp fft extract-audio [VIDEO](别名 vp fft ea):从 mp4 里无损抽出原始音频流
(-c copy,不重编码),输出同名 .m4a。省略文件名时扫描当前目录让你选。
与 vp dl --keep-audio 的区别:后者转成 mp3(有损,兼容性好,适合送去做识别),
前者原封不动搬出音频流(无损,速度快)。
vp vtt zip [FILE]:两种输出模式。- 带
-z:把 YouTube 那种多行滚动字幕压成一条 cue,去掉说话人标记(<v ...>), 同时完整保留内嵌的单词级时间戳,输出*.zip.vtt。 - 不带
-z:剥掉所有标签导出纯文本,每条字幕一行,输出*.txt,方便人工重新分段。
- 带
vp vtt restamp [VTT] [TEXT]:拿zip产出的逐词时间戳 VTT 作为时间基准, 给人工重新分段后的纯文本逐段打上内嵌时间戳,每个段落生成一个 cue。 默认在文本文件旁生成*.restamp.vtt,-k保留原始文本文件。
两个命令省略文件参数时都会扫描当前目录进入交互选择。demo/ 下有一组示例文件可以对照效果。
典型链路:
vp dl <URL> --keep-audio # 下载视频 + mp3
# 用识别工具产出带逐词时间戳的 VTT
vp vtt zip raw.vtt -z # 压成单行, 保留词级时间戳
vp vtt zip raw.vtt # 导出纯文本, 人工重新分段
vp vtt restamp raw.zip.vtt seg.txt # 按新分段重打时间戳vp config show(别名vp cf show/vp cf ls):打印当前所有配置。vp config edit(别名vp cf edit):默认启动内置 TUI 编辑器;--editor则交互式挑一个 系统里可用的外部编辑器(VS Code、vim 等)来编辑。
vp autocomplete 会打印在 bash / zsh / PowerShell 中启用命令补全的安装步骤。
配置文件位于 oclif 的配置目录下,首次运行任意命令时自动创建并打印路径:
- Windows:
%LOCALAPPDATA%\vptool\config.yml - macOS / Linux:
~/.config/vptool/config.yml
采用多档案(profile)结构,current 指向当前生效的档案:
current: default
profiles:
- name: default
documentsPath: C:\Users\you\Documents\vptool # 工作目录, 所有下载与列举的根
dlPrefix: # 下载时可选的一级子目录候选
- tech
- music
TIKHUB_IO_TOKEN: your-tikhub-token # 抖音 / 公众号解析用的 API Token字段含义:
documentsPath:工作目录。所有下载、列举、公众号文章保存都以它为根。缺省时自动定位系统 「文档」目录下的vptool子目录并创建(Windows 走 PowerShell 读真实路径,支持目录重定向)。dlPrefix:下载前 prefix 选择菜单的候选列表,由vp dl/vp douyin交互过程自动积累。TIKHUB_IO_TOKEN:TikHub API Token,vp douyin与vp wechat共用,首次使用时会引导录入。
同目录下的 logger.json 控制日志输出,首次运行时落地一份默认配置。三个 transport 各自独立开关:
console:pino-pretty 彩色控制台输出,默认infofile:pino-roll 按天滚动写入配置目录下的logs/app.<日期>.log,默认debug,保留 14 个文件mongodb:pino-mongodb 写库,默认关闭childLoggerLevels:正则 → 级别 的白名单,用于按模块 scope 单独调级;未被任何正则命中的 child logger 默认silent
环境变量 SPIDER_LOG_LEVEL 可临时覆盖所有 transport 的级别,方便临时排障:
SPIDER_LOG_LEVEL=debug vp dl <URL>npm run build # 清理 dist 并编译 TypeScript
npm start # 运行 ./bin/run.js
npm run debug # 带 DEBUG=oclif:vp:dl:* 运行
npm test # mocha (posttest 会自动跑 lint)
npm run lint # eslint技术栈:TypeScript(ESM)+ oclif v4 + pino 日志 + prompts/pi-tui 交互层。
源码分层约定:src/commands/ 只放命令定义与参数解析,src/lib/ 承载核心逻辑。
vp autocomplete- Display autocomplete installation instructions.vp config- 查看与编辑用户配置文件(支持内置 TUI 与外部编辑器)vp dl- 下载视频并管理本地依赖环境(基于 yt-dlp 与 ffmpeg)vp douyin- 解析并下载抖音视频(可自动抽取音频)vp fft- 基于 ffmpeg 的音视频处理(如从视频无损抽取音频)vp help- 显示帮助信息vp version- 显示版本信息vp vtt- 处理 VTT 字幕(单行压缩、按分段重新打时间戳等)vp wechat- 下载微信公众号文章为本地文档
BSL