视频链接转成品(video-link-to-final)
给一个视频链接,交付"能直接投稿的成品":规格化视频 + 封面图(可选 AI 字幕)。上游技能"视频下载助手"只给原视频,本技能是它的下游升级——直接产出 final.mp4 / cover.jpg / subtitle.srt,拿到就能发。
功能
| --spec | 交付规格 | 处理策略 |
|---|---|---|
douyin |
竖屏 1080x1920,CRF26(可调),AAC 128k | 横屏源自动模糊背景垫底(背景铺满+高斯模糊,前景等比居中),无黑边 |
shipinhao |
竖屏 1080x1920,≤1GB | 同上;超 1GB 自动按目标码率重压 |
bilibili |
横屏保持原比例,≤1080p | 高于 1080p 自动缩到 1080p,原比例不变 |
wechat10m |
≤10MB,保持原比例 | 两压法:先 CRF,仍超则按时长预算码率,还不够再降分辨率(720/540/400) |
- 封面:默认抽成品视频 1/3 处一帧,1080 宽 JPG(
cover.jpg);--no-cover跳过 - 字幕(
--subtitle):faster-whisper small 本地 CPU 转录,输出规范 SRT(时间轴与 final.mp4 对齐) - 也接受本地视频文件路径作为输入(跳过下载,直接二次加工)
工作流程(agent SOP)
- 确认链接与目标平台:向用户确认 ① 视频链接(国内平台公开视频;YouTube/X 不支持,直接告知)② 投稿平台 douyin / shipinhao / bilibili / wechat10m 四选一 ③ 是否要字幕(--subtitle)。
- 调脚本(下载/转码均为 CPU 密集,建议后台运行 + 轮询日志):
bash nohup python3 "${SKILL_DIR:-$PWD/.workbuddy/skills/video-link-to-final}/scripts/make_final.py" \ "<视频URL>" --spec douyin -o . > /tmp/vltf.log 2>&1 & # 轮询:tail -5 /tmp/vltf.log,直到出现"✅ 成品目录"或报错 - 交付成品目录:完成后向用户报告
<输出目录>/<标题>/下各文件与真实大小;若封面/字幕环节失败(不影响视频成品),如实说明并给出补救命令。
命令参考
SKILL_DIR="$HOME/.workbuddy/skills/video-link-to-final"
[ -f "$SKILL_DIR/scripts/make_final.py" ] || SKILL_DIR="$PWD/.workbuddy/skills/video-link-to-final"
[ -f "$SKILL_DIR/scripts/make_final.py" ] || SKILL_DIR="/sandbox/workspace/skills/video-link-to-final"
S="$SKILL_DIR/scripts/make_final.py"
python3 $S "<视频URL>" --spec douyin # 竖屏 1080x1920 + 封面
python3 $S "<视频URL>" --spec wechat10m --subtitle # ≤10MB + AI 字幕
python3 $S "<视频URL>" --spec bilibili --crf 23 # B站规格,画质调高
python3 $S "<视频URL>" --spec shipinhao -o /tmp/out # 指定输出根目录
python3 $S ./本地.mp4 --spec wechat10m # 本地文件二次加工
| 参数 | 说明 |
|---|---|
url |
视频页面链接(B站/抖音/快手/小红书等公开视频);或本地视频路径 |
--spec |
必填,四选一(见上表) |
--subtitle |
附带 AI 字幕 subtitle.srt(本地 whisper,每分钟音频约需 1-2 分钟) |
--lang zh |
字幕语言,默认 zh;英文视频传 --lang en(纯音乐/无人声会提示"未识别到语音"但成品照常交付) |
--no-cover |
跳过封面 |
--crf 26 |
质量(默认 26,越小越清晰、体积越大;仅 CRF 档生效) |
-o |
输出根目录,成品在 <输出目录>/<标题>/,默认当前工作目录 |
示例对话
用户:https://www.bilibili.com/video/BV1GJ411x7h7 转成抖音能直接发的
agent:确认规格 douyin(竖屏 1080x1920)→ 后台跑脚本 → 交付:
./Rick Astley - Never Gonna Give You Up (Official Video)/
├── final.mp4 xx MB(竖屏 1080x1920,CRF26,AAC128k)
├── cover.jpg xxx KB(1/3 处抽帧,1080 宽)
└── subtitle.srt xx KB(若加了 --subtitle)
用户:这个视频帮我压到能微信直接发
agent:用 --spec wechat10m;若素材很长导致码率预算过低,主动提示"画质会明显下降,建议截短后重压"。
运行环境
- 脚本:
scripts/make_final.py(相对技能根目录) - Python:3.9+,脚本只用标准库,不需要 pip 安装任何包
- 外部命令:无
注意事项
- 耗时预告:下载受 CDN 限速,几十 MB 通常 1-3 分钟;转码/字幕都是 CPU 处理,开始前如实告知预计等待时间,处理期间轮询日志
- 大文件:预计超过 100MB 的视频先告知用户再动手;脚本对超过 500MB 的原视频直接报错中止
- 平台边界:B站/抖音/快手/小红书等国内平台公开视频;不支持 YouTube / X(Twitter);需登录态/会员的链接会解析失败,建议换公开链接
- 字幕:默认按中文优化(--language zh);英文/歌曲内容请人工校对 srt
- 风控:偶发 412/风控,video_dl.py 内置分块重试;仍失败时改用「视频下载助手」技能单独下载该链接排查(该技能包内自带
video_dl.py) - 跨技能依赖:下载环节调用「视频下载助手」(videodl-download)里的
video_dl.py。该技能未安装时只能处理本地视频文件;此时直接告诉用户需要先安装「视频下载助手」技能,不要假装下载成功。 - 合规:仅供个人学习研究使用,禁止商用,下载内容版权归原作者;投稿前请自行确认对内容拥有相应权利