Deploy / build (push) Successful in 39s
Reviewer's five "highest priority" items, each checked against the source before acting: * 38% speedup -> 38.1% less render time (352s -> 218s, 1.61x throughput); says it was a single run each, same clip, same machine, same encoder settings. * "microsecond-accurate" -> frame-accurate: at 30 fps one frame is 33.3 ms, and the text now states that word-level timestamps are not microsecond-accurate. * "Three minutes later" -> "a few minutes later", plus the one measured number (218 s render for the 4-minute track) so the claim is checkable. * Zero Jitter / Zero Light Flashing -> "no visible jitter" / "no dark flash at the cut", scoped to the clip that was measured. * ti.mode 0o666 -> 0o644. Hygiene, not the syntax error he reported: source and live HTML both read 0o666 (the live page splits it across two highlight spans and his text extraction inserted a space), and 0o666 is legal Python. * "0 MB RAM spike in Chrome" now scopes itself to the Chrome container and says the Python client still buffers the whole tar. New "What this pattern does not solve" block: client buffering, target directory must already exist, tar member names become container paths, Portainer key / CDP 9222 are root-equivalent. All three posts get a TL;DR and inline cross-links (the trio had zero internal links before); the ZH links use the real /posts/zh/<slug>/ path. Not done, because it needs the owner's data rather than invention: end-to-end timing table, benchmark conditions, whether 1.89 s was a single run, before/after jitter clips, the "what still needs a human" list. Task list: docs/consultant-review-2026-10-22-3-video-posts.md. Artwork for the three slugs regenerated (1600x900 banner, 1200x630 share cards EN+ZH, 400/800 list thumbs); the ZH pipeline card already carries the corrected description.
85 lines
6.3 KiB
Markdown
85 lines
6.3 KiB
Markdown
# 顾问对三篇视频文的意见:核对 + 任务单(2026-10-22)
|
||
|
||
对象:`how-i-built-an-automated-music-video-pipeline` / `uploading-large-videos-to-youtube-via-cdp` /
|
||
`debugging-remotion-video-jitter`(EN + ZH 各一份,共 6 个文件)。
|
||
顾问意见原文:他给的「5 个优先问题 + 逐篇建议 + SEO/结构 + 修改顺序」。
|
||
|
||
---
|
||
|
||
## 一、结论
|
||
|
||
方向对,有两条要打折:**一条事实错了**(`0o 666`),**一条他读窄了**(内存那句原文已限定 Chrome)。
|
||
其余可执行项里,真正影响可信度的是三处:**38% 用词**、**微秒级精度**、**「三分钟」与 218 秒自相矛盾**。
|
||
|
||
### 他说对的
|
||
|
||
| # | 他的问题 | 实测核对 |
|
||
|---|---|---|
|
||
| 2 | 三分钟承诺与 218 秒冲突 | **成立,且比他说的严重**:两篇都写「4 分钟 1080P」;第二篇实测纯渲染 218 秒(3 分 38 秒),第一篇说「三分钟后…已渲染并自动发布」⇒ 同一支片自相矛盾 |
|
||
| 3 | 「38% speedup」术语错 | **成立**:352→218 是耗时少 38.07%,吞吐 352÷218 = 1.615× |
|
||
| 4 | 「microsecond-accurate」过度承诺 | **成立**:30 fps 一帧 33.3 ms,词级时间戳到不了微秒级 |
|
||
| — | `Zero Jitter` / `Zero Light Flashing` 绝对化 | **成立**(第一篇架构图里还有一个 `Zero-Jitter`) |
|
||
| — | 三篇没有互相带流量 | **成立,实测内链 0 条** |
|
||
| — | 缺「哪些步骤真无人值守」 | **成立**,读者最想知道的就是这句 |
|
||
| — | `io.BytesIO` 整包进内存 + 凭据/端口安全提示 | **成立**(130 MB 视频 = tar 副本 ~130 MB 常驻 RAM) |
|
||
|
||
### 他说错 / 说偏的
|
||
|
||
| # | 他的说法 | 实情 |
|
||
|---|---|---|
|
||
| 1 | 「代码存在 Python 语法错误 `ti.mode = 0o 666`,最高优先级」 | **源码里是 `0o666`,线上也是**(页面 HTML 是 `<span>0o</span><span>666</span>`,两段之间无空白)。他抓正文时被插了空格。而且 `0o666` 在 Python 里合法,不会报语法错 —— 这条不成立。**但** `666` 是所有人可写,改成 `644` 仍是该做的卫生修正,只是排在最后 |
|
||
| 5 | 「'Chrome 没有内存峰值' ≠ '整个流程不占内存'」 | 原文写的是 *Container memory consumption: 0 MB RAM spike **in Chrome***,已经限定了对象。他的解读偏离了原文;只有「0 MB」这个绝对数字该改 |
|
||
|
||
### 不建议照做的
|
||
|
||
* **重写 meta description**:三篇都已有 description,他给的三条跟现有关键词覆盖基本一致;只值得做 og/Twitter 的真实校验,不值得重写。
|
||
* **「代码示例逐段执行验证」**:要真跑一遍就得有 Chrome 容器 + Portainer + 那台 DSM,本机没有这条栈;收益低于成本,改成语义修正 + 写清限制就够了。
|
||
|
||
---
|
||
|
||
## 二、已做(P0:24 处改动,6 个文件,**未提交、未推**)
|
||
|
||
| 文件 | 改了什么 | 对应他的 |
|
||
|---|---|---|
|
||
| pipeline(EN+ZH) | 「Three minutes later」→「A few minutes later」,并在正文补一句可核对尺度:同一支 4 分钟片渲染 **218 秒**,发布腿另计 | #2 |
|
||
| pipeline(EN+ZH) | 「microsecond-accurate」→ 帧级(33.3 ms/帧),并明说「词级时间戳不等于微秒级」 | #4 |
|
||
| pipeline(EN+ZH) | 架构图 `Zero-Jitter Pure Opacity Image Slideshow` → `Pure-Opacity Image Slideshow (no per-frame scaling)` | 绝对化 |
|
||
| jitter(EN+ZH) | 「a 38% speedup」→「38.1% less render time,约 1.61× throughput(352÷218)」,并注明同机/同片/同参数、单次实测 | #3 |
|
||
| jitter(EN+ZH) | `Zero Jitter` → `No visible jitter`(限定「本片实测」);`Zero Light Flashing` → `No dark flash at the cuts` | 绝对化 |
|
||
| upload(EN+ZH) | `ti.mode = 0o666` → `0o644` + 一行注释(不是语法错,是权限卫生) | #1(打折后) |
|
||
| upload(EN+ZH) | 「0 MB RAM spike in Chrome」→「Chrome 容器内观察不到峰值;**客户端仍整包读进内存**」 | #5(按原文校正) |
|
||
| upload(EN+ZH) | 新增「这个模式不解决的问题」:客户端整包缓冲、目标目录必须存在、tar 成员名=容器路径、Portainer Key / CDP 9222 等于 root | 安全提示 |
|
||
| 三篇(EN+ZH) | 每篇开头加 TL;DR,正文里互链(pipeline ↔ upload ↔ jitter),ZH 用 `/posts/zh/…` 的正确路径 | 内链 |
|
||
|
||
验证:`npx astro build` 通过(277 页);6 条新内链全部解析到真实产物;`npm run build` 的资产闸门仍红,但红的是**另一条线的两篇 TTS 草稿**(缺 og/banner),与本次无关。
|
||
|
||
---
|
||
|
||
## 三、要你给东西才能做(P1)
|
||
|
||
| # | 任务 | 需要你提供 |
|
||
|---|---|---|
|
||
| P1-1 | 端到端耗时表(歌词对齐 / 渲染 / 落盘 / 上传 / 字幕 五段) | 跑出那支片的机器、曲目时长、每段实际秒数(我只有渲染 218 s 这一个真实读数) |
|
||
| P1-2 | 基准条件脚注(Remotion 版本、编码参数、测了几次) | 版本号 + 编码设置 + 是否单次 |
|
||
| P1-3 | 「1.89 秒」的测法说明 | 单次还是均值;测的是「打包+传输+解包」还是只算 PUT |
|
||
| P1-4 | 修复前后的抖动 / 暗闪对比 GIF 或短视频 | 素材(我可以剪 + 压,但要原片) |
|
||
| P1-5 | 「哪些步骤仍需人」一节 | 你的实际流程:歌词要不要人工校对、侧位 flag 要不要目检、译文要不要复核 |
|
||
|
||
---
|
||
|
||
## 四、我可以自己做完的(P2,不用等你)
|
||
|
||
* P2-1 方案对比表:`Playwright setInputFiles` / `DOM.setFileInputFiles` / Docker Archive / YouTube Data API —— 并补一段「为什么这里仍走 UI 自动化」
|
||
* P2-2 Docker Archive 常见错误表(路径不存在 / 容器 ID 错 / Key 失效 / 名字带空格 / 磁盘满)
|
||
* P2-3 图层示意图(两层半透明交叉淡化为什么会压暗,SVG/PNG 进正文)
|
||
* P2-4 流式 tar 的替代代码(临时文件 + 分块 PUT),替换现在整包进内存那段
|
||
* P2-5 三篇统一「测试版本 / 最后验证日期」小字(Remotion / Playwright / Chrome / Portainer)
|
||
|
||
---
|
||
|
||
## 五、发布
|
||
|
||
改动都在工作树里,**没有 commit、没有 push**(博客一律你点头才上线)。
|
||
`npm run build` 会先跑 `scripts/check-assets.mjs`,而工作树里另一条线的两篇 TTS 草稿缺 og/banner ⇒ 那个闸门现在是红的;
|
||
我这三篇是 `npx astro build` 单独验的(277 页通过)。要上线时,等那边草稿补齐或先移出,再一起走。
|