Files
hoelee-blog/docs/consultant-review-2026-10-22-3-video-posts.md
T
hoelee f32ae90cf0
Deploy / build (push) Successful in 39s
fix(posts): correct the 3 video posts after consultant review, with fresh artwork
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.
2026-10-22 19:29:26 +08:00

85 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 顾问对三篇视频文的意见:核对 + 任务单(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 页通过)。要上线时,等那边草稿补齐或先移出,再一起走。