diff --git a/public/banners/architecting-sea-payment-and-offline-licensing-pipelines.jpg b/public/banners/architecting-sea-payment-and-offline-licensing-pipelines.jpg new file mode 100644 index 0000000..cc5bb35 Binary files /dev/null and b/public/banners/architecting-sea-payment-and-offline-licensing-pipelines.jpg differ diff --git a/public/banners/architecting-sea-payment-and-offline-licensing-pipelines.webp b/public/banners/architecting-sea-payment-and-offline-licensing-pipelines.webp new file mode 100644 index 0000000..b08f4a2 Binary files /dev/null and b/public/banners/architecting-sea-payment-and-offline-licensing-pipelines.webp differ diff --git a/public/banners/batch-generating-80-technical-covers-with-comfyui.jpg b/public/banners/batch-generating-80-technical-covers-with-comfyui.jpg new file mode 100644 index 0000000..296ebd8 Binary files /dev/null and b/public/banners/batch-generating-80-technical-covers-with-comfyui.jpg differ diff --git a/public/banners/batch-generating-80-technical-covers-with-comfyui.webp b/public/banners/batch-generating-80-technical-covers-with-comfyui.webp new file mode 100644 index 0000000..65cce30 Binary files /dev/null and b/public/banners/batch-generating-80-technical-covers-with-comfyui.webp differ diff --git a/public/banners/traefik-yaegi-plugin-package-name-trap.jpg b/public/banners/traefik-yaegi-plugin-package-name-trap.jpg new file mode 100644 index 0000000..c0b9b60 Binary files /dev/null and b/public/banners/traefik-yaegi-plugin-package-name-trap.jpg differ diff --git a/public/banners/traefik-yaegi-plugin-package-name-trap.webp b/public/banners/traefik-yaegi-plugin-package-name-trap.webp new file mode 100644 index 0000000..ebc212f Binary files /dev/null and b/public/banners/traefik-yaegi-plugin-package-name-trap.webp differ diff --git a/public/banners/when-lowering-crf-does-nothing-maxrate-deadlock.jpg b/public/banners/when-lowering-crf-does-nothing-maxrate-deadlock.jpg new file mode 100644 index 0000000..f025ff5 Binary files /dev/null and b/public/banners/when-lowering-crf-does-nothing-maxrate-deadlock.jpg differ diff --git a/public/banners/when-lowering-crf-does-nothing-maxrate-deadlock.webp b/public/banners/when-lowering-crf-does-nothing-maxrate-deadlock.webp new file mode 100644 index 0000000..4b39545 Binary files /dev/null and b/public/banners/when-lowering-crf-does-nothing-maxrate-deadlock.webp differ diff --git a/public/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg b/public/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg new file mode 100644 index 0000000..a19b0b7 Binary files /dev/null and b/public/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg differ diff --git a/public/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.webp b/public/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.webp new file mode 100644 index 0000000..40ee193 Binary files /dev/null and b/public/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.webp differ diff --git a/public/og/architecting-sea-payment-and-offline-licensing-pipelines.jpg b/public/og/architecting-sea-payment-and-offline-licensing-pipelines.jpg new file mode 100644 index 0000000..8127931 Binary files /dev/null and b/public/og/architecting-sea-payment-and-offline-licensing-pipelines.jpg differ diff --git a/public/og/batch-generating-80-technical-covers-with-comfyui.jpg b/public/og/batch-generating-80-technical-covers-with-comfyui.jpg new file mode 100644 index 0000000..a5a3388 Binary files /dev/null and b/public/og/batch-generating-80-technical-covers-with-comfyui.jpg differ diff --git a/public/og/thumb/architecting-sea-payment-and-offline-licensing-pipelines-400.webp b/public/og/thumb/architecting-sea-payment-and-offline-licensing-pipelines-400.webp new file mode 100644 index 0000000..ede9ff4 Binary files /dev/null and b/public/og/thumb/architecting-sea-payment-and-offline-licensing-pipelines-400.webp differ diff --git a/public/og/thumb/architecting-sea-payment-and-offline-licensing-pipelines-800.webp b/public/og/thumb/architecting-sea-payment-and-offline-licensing-pipelines-800.webp new file mode 100644 index 0000000..83d7b5d Binary files /dev/null and b/public/og/thumb/architecting-sea-payment-and-offline-licensing-pipelines-800.webp differ diff --git a/public/og/thumb/batch-generating-80-technical-covers-with-comfyui-400.webp b/public/og/thumb/batch-generating-80-technical-covers-with-comfyui-400.webp new file mode 100644 index 0000000..0230767 Binary files /dev/null and b/public/og/thumb/batch-generating-80-technical-covers-with-comfyui-400.webp differ diff --git a/public/og/thumb/batch-generating-80-technical-covers-with-comfyui-800.webp b/public/og/thumb/batch-generating-80-technical-covers-with-comfyui-800.webp new file mode 100644 index 0000000..d43448f Binary files /dev/null and b/public/og/thumb/batch-generating-80-technical-covers-with-comfyui-800.webp differ diff --git a/public/og/thumb/traefik-yaegi-plugin-package-name-trap-400.webp b/public/og/thumb/traefik-yaegi-plugin-package-name-trap-400.webp new file mode 100644 index 0000000..24667a3 Binary files /dev/null and b/public/og/thumb/traefik-yaegi-plugin-package-name-trap-400.webp differ diff --git a/public/og/thumb/traefik-yaegi-plugin-package-name-trap-800.webp b/public/og/thumb/traefik-yaegi-plugin-package-name-trap-800.webp new file mode 100644 index 0000000..28466ed Binary files /dev/null and b/public/og/thumb/traefik-yaegi-plugin-package-name-trap-800.webp differ diff --git a/public/og/thumb/when-lowering-crf-does-nothing-maxrate-deadlock-400.webp b/public/og/thumb/when-lowering-crf-does-nothing-maxrate-deadlock-400.webp new file mode 100644 index 0000000..1398a2f Binary files /dev/null and b/public/og/thumb/when-lowering-crf-does-nothing-maxrate-deadlock-400.webp differ diff --git a/public/og/thumb/when-lowering-crf-does-nothing-maxrate-deadlock-800.webp b/public/og/thumb/when-lowering-crf-does-nothing-maxrate-deadlock-800.webp new file mode 100644 index 0000000..24a7a1f Binary files /dev/null and b/public/og/thumb/when-lowering-crf-does-nothing-maxrate-deadlock-800.webp differ diff --git a/public/og/thumb/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux-400.webp b/public/og/thumb/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux-400.webp new file mode 100644 index 0000000..5a3e34b Binary files /dev/null and b/public/og/thumb/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux-400.webp differ diff --git a/public/og/thumb/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux-800.webp b/public/og/thumb/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux-800.webp new file mode 100644 index 0000000..f59f660 Binary files /dev/null and b/public/og/thumb/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux-800.webp differ diff --git a/public/og/traefik-yaegi-plugin-package-name-trap.jpg b/public/og/traefik-yaegi-plugin-package-name-trap.jpg new file mode 100644 index 0000000..d4daac4 Binary files /dev/null and b/public/og/traefik-yaegi-plugin-package-name-trap.jpg differ diff --git a/public/og/when-lowering-crf-does-nothing-maxrate-deadlock.jpg b/public/og/when-lowering-crf-does-nothing-maxrate-deadlock.jpg new file mode 100644 index 0000000..1d433c0 Binary files /dev/null and b/public/og/when-lowering-crf-does-nothing-maxrate-deadlock.jpg differ diff --git a/public/og/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg b/public/og/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg new file mode 100644 index 0000000..db2313b Binary files /dev/null and b/public/og/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg differ diff --git a/public/og/zh-architecting-sea-payment-and-offline-licensing-pipelines.jpg b/public/og/zh-architecting-sea-payment-and-offline-licensing-pipelines.jpg new file mode 100644 index 0000000..7701428 Binary files /dev/null and b/public/og/zh-architecting-sea-payment-and-offline-licensing-pipelines.jpg differ diff --git a/public/og/zh-batch-generating-80-technical-covers-with-comfyui.jpg b/public/og/zh-batch-generating-80-technical-covers-with-comfyui.jpg new file mode 100644 index 0000000..1f56ee6 Binary files /dev/null and b/public/og/zh-batch-generating-80-technical-covers-with-comfyui.jpg differ diff --git a/public/og/zh-traefik-yaegi-plugin-package-name-trap.jpg b/public/og/zh-traefik-yaegi-plugin-package-name-trap.jpg new file mode 100644 index 0000000..aa23933 Binary files /dev/null and b/public/og/zh-traefik-yaegi-plugin-package-name-trap.jpg differ diff --git a/public/og/zh-when-lowering-crf-does-nothing-maxrate-deadlock.jpg b/public/og/zh-when-lowering-crf-does-nothing-maxrate-deadlock.jpg new file mode 100644 index 0000000..7caff1c Binary files /dev/null and b/public/og/zh-when-lowering-crf-does-nothing-maxrate-deadlock.jpg differ diff --git a/public/og/zh-why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg b/public/og/zh-why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg new file mode 100644 index 0000000..62eb9a5 Binary files /dev/null and b/public/og/zh-why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg differ diff --git a/scripts/og-gen/art-meta.json b/scripts/og-gen/art-meta.json index 08b1f20..b9d7f14 100644 --- a/scripts/og-gen/art-meta.json +++ b/scripts/og-gen/art-meta.json @@ -296,5 +296,30 @@ }, "generating-full-length-songs-with-yue2-comfyui": { "evidence": "60 songs - 9-part structure - 295s headroom cap" + }, + "when-lowering-crf-does-nothing-maxrate-deadlock": { + "evidence": "CRF 19→14 · SSIM +0.00003 · 106.2h wasted", + "ogTitle_en": "When Lowering CRF Does Nothing", + "ogTitle_zh": "降低 CRF 为何毫无效果:maxrate 死锁" + }, + "why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux": { + "evidence": "-map 0 copy · tx3g CC · udta/name dual-write", + "ogTitle_en": "Why ffmpeg -map 0 Breaks Remux", + "ogTitle_zh": "ffmpeg -map 0 搞崩跨容器混流" + }, + "traefik-yaegi-plugin-package-name-trap": { + "evidence": "Yaegi lookup · hyphen to underscore · panic", + "ogTitle_en": "Traefik Yaegi Plugin Package Trap", + "ogTitle_zh": "Traefik Yaegi 插件启动崩溃陷阱" + }, + "architecting-sea-payment-and-offline-licensing-pipelines": { + "evidence": "toyyibPay FPX · FOR UPDATE · Ed25519 offline", + "ogTitle_en": "SEA Payment & Offline Licensing", + "ogTitle_zh": "东南亚网银支付与离线机器码授权" + }, + "batch-generating-80-technical-covers-with-comfyui": { + "evidence": "89 covers in 48m · 35% safe zone · Laplacian filter", + "ogTitle_en": "Batch Generating 80+ Technical Covers", + "ogTitle_zh": "ComfyUI 批量闭环 80+ 张技术封面" } } \ No newline at end of file diff --git a/scripts/update_frontmatter_assets.py b/scripts/update_frontmatter_assets.py new file mode 100644 index 0000000..3d6d773 --- /dev/null +++ b/scripts/update_frontmatter_assets.py @@ -0,0 +1,44 @@ +import os +import re + +repo = "D:/dev/hoelee-blog" +posts_dir = os.path.join(repo, "src/content/posts") + +slugs = [ + ("when-lowering-crf-does-nothing-maxrate-deadlock", False), + ("why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux", False), + ("traefik-yaegi-plugin-package-name-trap", True), + ("architecting-sea-payment-and-offline-licensing-pipelines", True), + ("batch-generating-80-technical-covers-with-comfyui", True) +] + +for slug, is_draft in slugs: + en_path = os.path.join(posts_dir, f"{slug}.md") + zh_path = os.path.join(posts_dir, "zh", f"{slug}.md") + + draft_val = "true" if is_draft else "false" + + # Process EN + with open(en_path, "r", encoding="utf-8") as f: + en_text = f.read() + + en_text = re.sub(r"^draft:\s*(true|false)", f"draft: {draft_val}", en_text, flags=re.MULTILINE) + + if "ogImage:" not in en_text: + en_text = re.sub(r"^---\r?\n", f"---\nogImage: \"/og/{slug}.jpg\"\nbanner: \"/banners/{slug}.jpg\"\n", en_text) + + with open(en_path, "w", encoding="utf-8") as f: + f.write(en_text) + + # Process ZH + with open(zh_path, "r", encoding="utf-8") as f: + zh_text = f.read() + + zh_text = re.sub(r"^draft:\s*(true|false)", f"draft: {draft_val}", zh_text, flags=re.MULTILINE) + if "ogImage:" not in zh_text: + zh_text = re.sub(r"^---\r?\n", f"---\nogImage: \"/og/zh-{slug}.jpg\"\nbanner: \"/banners/{slug}.jpg\"\n", zh_text) + + with open(zh_path, "w", encoding="utf-8") as f: + f.write(zh_text) + +print("Frontmatter updated successfully.") diff --git a/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md b/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md index a878c5b..59df765 100644 --- a/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md +++ b/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/architecting-sea-payment-and-offline-licensing-pipelines.jpg" +banner: "/banners/architecting-sea-payment-and-offline-licensing-pipelines.jpg" title: "Delivering Commercial Desktop Software in Southeast Asia: Multi-Gateway Billing with toyyibPay and Keygate Fulfillment" description: "How I architected a cross-border commercial software entitlement pipeline: combining toyyibPay FPX payments, machine-bound Keygate licenses, and idempotent state machines for Southeast Asian markets." pubDate: 2026-10-27 diff --git a/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md b/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md index 7b92120..386396e 100644 --- a/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md +++ b/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/batch-generating-80-technical-covers-with-comfyui.jpg" +banner: "/banners/batch-generating-80-technical-covers-with-comfyui.jpg" title: "Batch Generating 80+ Technical Covers with ComfyUI: Constraining Style, Space, and Typography" description: "How I automated the generation of 89 high-contrast technical article covers using a headless ComfyUI API pipeline: enforcing negative space, dark palettes, and zero-hallucination text boundaries." pubDate: 2026-10-27 diff --git a/src/content/posts/traefik-yaegi-plugin-package-name-trap.md b/src/content/posts/traefik-yaegi-plugin-package-name-trap.md index 7b82162..a813804 100644 --- a/src/content/posts/traefik-yaegi-plugin-package-name-trap.md +++ b/src/content/posts/traefik-yaegi-plugin-package-name-trap.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/traefik-yaegi-plugin-package-name-trap.jpg" +banner: "/banners/traefik-yaegi-plugin-package-name-trap.jpg" title: "Why Your Traefik Yaegi Plugin Fails on Boot: The Module Hyphen to Underscore Trap" description: "Why Traefik crashes on boot with 'CreateConfig failed with Yaegi' when loading custom Go plugins: diagnosing the hidden package naming convention enforced by the Yaegi dynamic interpreter." pubDate: 2026-10-27 diff --git a/src/content/posts/when-lowering-crf-does-nothing-maxrate-deadlock.md b/src/content/posts/when-lowering-crf-does-nothing-maxrate-deadlock.md index 39fd868..cbd919a 100644 --- a/src/content/posts/when-lowering-crf-does-nothing-maxrate-deadlock.md +++ b/src/content/posts/when-lowering-crf-does-nothing-maxrate-deadlock.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/when-lowering-crf-does-nothing-maxrate-deadlock.jpg" +banner: "/banners/when-lowering-crf-does-nothing-maxrate-deadlock.jpg" title: "When Lowering CRF Does Nothing: The -maxrate Ceiling and the SSIM Quality Deadlock" description: "Why dropping CRF by five steps improved SSIM by only 0.00003: discovering the mathematical conflict between -maxrate bitrate ceilings and quality gates in high-throughput video re-encoding." pubDate: 2026-10-27 @@ -6,7 +8,7 @@ category: devops blueprint: self-hosted-infrastructure blueprintLayer: L1-compute-storage-network tags: ["ffmpeg", "transcoding", "hevc", "ssim", "video-engineering", "quality-gate"] -draft: true +draft: false summary: audience: "Video Infrastructure Engineers, SREs & Platform Architects" painPoint: "A high-throughput video space-reclamation pipeline repeatedly burned 106 hours across 487 encoding rounds because quality-gate retries (crf -2) produced zero metric improvement on capped bitrates." diff --git a/src/content/posts/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md b/src/content/posts/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md index 76ed451..865ec37 100644 --- a/src/content/posts/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md +++ b/src/content/posts/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg" +banner: "/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg" title: "Why ffmpeg -map 0 Breaks Your Remux: The Hidden Matrix of Multi-Track MP4 and Matroska" description: "Why using -map 0 silently aborts Matroska muxers, drops subtitle fonts, and corrupts Apple playback: an empirical teardown of container constraints across multi-track media pipelines." pubDate: 2026-10-27 @@ -6,7 +8,7 @@ category: engineering blueprint: self-hosted-infrastructure blueprintLayer: L1-compute-storage-network tags: ["ffmpeg", "containers", "mp4", "matroska", "subtitles", "media-pipeline"] -draft: true +draft: false summary: audience: "Media Systems Engineers, Full-Stack Architects & Streaming DevOps" painPoint: "A media remuxing daemon using naive -map 0 silently crashed on container conversions, dropped stylised subtitles, and broke track selection on iOS clients." diff --git a/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md b/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md index 09f2dc1..2f46895 100644 --- a/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md +++ b/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/zh-architecting-sea-payment-and-offline-licensing-pipelines.jpg" +banner: "/banners/architecting-sea-payment-and-offline-licensing-pipelines.jpg" title: "在东南亚交付桌面商业软件:对接 toyyibPay 本地网银与 Keygate 机器码离线授权" description: "如何为东南亚市场构建跨区域商业软件交付流水线:深度集成 toyyibPay FPX 银行直付网关、Keygate 硬件绑定离线授权体系与幂等状态机架构实战。" pubDate: 2026-10-27 diff --git a/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md b/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md index 6770071..407d2f4 100644 --- a/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md +++ b/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/zh-batch-generating-80-technical-covers-with-comfyui.jpg" +banner: "/banners/batch-generating-80-technical-covers-with-comfyui.jpg" title: "用 ComfyUI 批量闭环 80+ 张技术图文封面:设计规范约束、留白控制与批处理工作流" description: "如何通过 Headless ComfyUI API 流水线自动化生成 89 张高对比度技术博客封面:深度实战留白预留、暗色调约束与零文本幻觉的批处理闭环方案。" pubDate: 2026-10-27 diff --git a/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md b/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md index f84786c..326261e 100644 --- a/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md +++ b/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/zh-traefik-yaegi-plugin-package-name-trap.jpg" +banner: "/banners/traefik-yaegi-plugin-package-name-trap.jpg" title: "Traefik 自定义插件启动崩溃:Yaegi 解释器的连字符与下划线陷阱" description: "为什么本地测试全部通过的 Go 插件在 Traefik 启动时报错 'CreateConfig failed with Yaegi':深度排查 Yaegi 动态解释器对模块路径连字符转下划线的包命名隐蔽契约。" pubDate: 2026-10-27 diff --git a/src/content/posts/zh/when-lowering-crf-does-nothing-maxrate-deadlock.md b/src/content/posts/zh/when-lowering-crf-does-nothing-maxrate-deadlock.md index 2eeae09..3cb8674 100644 --- a/src/content/posts/zh/when-lowering-crf-does-nothing-maxrate-deadlock.md +++ b/src/content/posts/zh/when-lowering-crf-does-nothing-maxrate-deadlock.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/zh-when-lowering-crf-does-nothing-maxrate-deadlock.jpg" +banner: "/banners/when-lowering-crf-does-nothing-maxrate-deadlock.jpg" title: "当降低 CRF 毫无效果:视频转码中 -maxrate 封顶与 SSIM 质量门禁的死锁" description: "为什么将 CRF 下调 5 档仅让 SSIM 微升 0.00003:深度拆解高吞吐视频转码管线中 -maxrate 码率天花板与客观质量门禁之间的数学死锁与两档放行解法。" pubDate: 2026-10-27 @@ -6,7 +8,7 @@ category: devops blueprint: self-hosted-infrastructure blueprintLayer: L1-compute-storage-network tags: ["ffmpeg", "transcoding", "hevc", "ssim", "video-engineering", "quality-gate"] -draft: true +draft: false summary: audience: "视频基础设施工程师、SRE 与平台架构师" painPoint: "私有高吞吐转码管线在 487 轮转码中空转了 106 小时算力,原因是质量门禁的自动重试(CRF -2)在硬性码率上限拦截下完全失效。" diff --git a/src/content/posts/zh/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md b/src/content/posts/zh/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md index cae0692..93f773e 100644 --- a/src/content/posts/zh/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md +++ b/src/content/posts/zh/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.md @@ -1,4 +1,6 @@ --- +ogImage: "/og/zh-why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg" +banner: "/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg" title: "为什么 ffmpeg -map 0 会搞崩混流:跨容器多音轨、字幕与字体的深水区" description: "为什么无脑使用 -map 0 会导致 Matroska 混流器直接报错退出、字幕字体静默丢失以及 Apple 客户端音轨失效:跨格式多媒体管线中的容器兼容性实战拆解。" pubDate: 2026-10-27 @@ -6,7 +8,7 @@ category: engineering blueprint: self-hosted-infrastructure blueprintLayer: L1-compute-storage-network tags: ["ffmpeg", "containers", "mp4", "matroska", "subtitles", "media-pipeline"] -draft: true +draft: false summary: audience: "多媒体系统工程师、全栈架构师与流媒体 DevOps" painPoint: "后台转码服务使用朴素的 -map 0 命令进行混流,在跨容器转换时遭遇混流器崩溃、特效字幕丢失以及 iOS 客户端音轨名消失等隐蔽故障。"