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

6.3 KiB
Raw Blame History

顾问对三篇视频文的意见:核对 + 任务单(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 页通过)。要上线时,等那边草稿补齐或先移出,再一起走。