<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheet.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcast="https://podcastindex.org/namespace/1.0">
  <channel>
    <atom:link rel="self" type="application/rss+xml" href="https://feeds.transistor.fm/cyber-martins-podcast" title="MP3 Audio"/>
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com/"/>
    <podcast:podping usesPodping="true"/>
    <title>Cyber Martin's Podcast</title>
    <generator>Transistor (https://transistor.fm)</generator>
    <itunes:new-feed-url>https://feeds.transistor.fm/cyber-martins-podcast</itunes:new-feed-url>
    <description>关于 AI、工具与个人知识实践的思考和实验。由 Martin Lanse 整理，分享值得理解、值得动手验证的想法。</description>
    <copyright>© 2026 Martin Lanse</copyright>
    <podcast:guid>9b85469a-4d5b-5c34-b8dc-309d13052bf5</podcast:guid>
    <podcast:locked>yes</podcast:locked>
    <language>zh-cn</language>
    <pubDate>Wed, 09 Sep 2026 02:32:34 +0200</pubDate>
    <lastBuildDate>Wed, 09 Sep 2026 02:33:28 +0200</lastBuildDate>
    <image>
      <url>https://img.transistorcdn.com/3WwATk4mtokMChNI7_fx2AlWSG287qW5trEuhDNATec/rs:fill:0:0:1/w:1400/h:1400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS84MjQ5/Y2FjZjkyOTg4ZWUy/ZTJhMGExOGNiMmFj/MGNlOC5qcGc.jpg</url>
      <title>Cyber Martin's Podcast</title>
    </image>
    <itunes:category text="Technology"/>
    <itunes:type>episodic</itunes:type>
    <itunes:author>Martin Lanse</itunes:author>
    <itunes:image href="https://img.transistorcdn.com/3WwATk4mtokMChNI7_fx2AlWSG287qW5trEuhDNATec/rs:fill:0:0:1/w:1400/h:1400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS84MjQ5/Y2FjZjkyOTg4ZWUy/ZTJhMGExOGNiMmFj/MGNlOC5qcGc.jpg"/>
    <itunes:summary>关于 AI、工具与个人知识实践的思考和实验。由 Martin Lanse 整理，分享值得理解、值得动手验证的想法。</itunes:summary>
    <itunes:subtitle>关于 AI、工具与个人知识实践的思考和实验。由 Martin Lanse 整理，分享值得理解、值得动手验证的想法。.</itunes:subtitle>
    <itunes:keywords></itunes:keywords>
    <itunes:owner>
      <itunes:name>Martin Lanse</itunes:name>
    </itunes:owner>
    <itunes:complete>No</itunes:complete>
    <itunes:explicit>No</itunes:explicit>
    <item>
      <title>先探测，再执行：ffmpeg-skill 如何让 AI 停止猜参数</title>
      <itunes:episode>2</itunes:episode>
      <podcast:episode>2</podcast:episode>
      <itunes:title>先探测，再执行：ffmpeg-skill 如何让 AI 停止猜参数</itunes:title>
      <itunes:episodeType>full</itunes:episodeType>
      <guid isPermaLink="false">ccb93840-5485-407a-8649-84fc4f60901c</guid>
      <link>https://share.transistor.fm/s/53d4a22a</link>
      <description>
        <![CDATA[<p>这集音频从一个常见的失败开始：把视频交给 AI，让它凭文件名和想当然的参数写 FFmpeg 命令。ffmpeg-skill 给出的答案，是把媒体事实、工具边界和验证结果重新放回流水线里。</p><p><b>这一集聊什么</b></p><ul><li><strong>Probe first。</strong>先用 probe.py 读取真实的容器、编码、帧率、音轨和时间戳，再决定后续动作。</li><li><strong>无损优先。</strong>能用流拷贝解决的问题，不先把素材送进级联重编码链。</li><li><strong>Dry Run。</strong>执行前输出 JSON 计划，让人和 AI 都能看见将要发生的操作。</li><li><strong>工具各司其职。</strong>look.py、scenes.py、color.py、check.py、cut.py 和 sync.py 分别处理观察、分析、色彩、检查、剪切与对齐。</li><li><strong>SPEC 契约。</strong>从 argparse 运行时生成工具说明，让代码参数成为更可靠的事实来源。</li></ul><p><b>为什么 VFR 会改变剪辑判断</b></p><p>手机录像、屏幕录制和会议录制可能带有可变帧率（VFR）。如果按恒定帧率去猜时间线，画面和音频会在长时间线上逐渐错开。先探测，再选择无损或精确重构路径，才知道自己在处理什么。</p><p><b>事后术语核对</b></p><p>本版阅读稿根据 pinned ffmpeg-skill 源文档校正了明显的 ASR 术语，例如 ffmpeg-skill、SKILL.md、probe.py、look.py、scenes.py、color.py、check.py、cut.py、sync.py、SPEC 和 argparse。原始 ASR、校正前后全文与理由保存在封包的 transcription 台账中；这类校正不改变音频和时间线。</p><p><b>音频来源说明</b></p><p>本集音频为 AI 合成的已提供成品，具体生成器身份未在本次 source record 中确认。节目内容依据本集音频、pinned ffmpeg-skill revision 与随附材料整理。</p><p><b>本集章节</b></p><ul><li>00:00 让 AI 猜参数，为什么总会出错</li><li>00:47 ffmpeg-skill 的初衷与 28 个工具</li><li>03:18 Probe first：先认识真实媒体</li><li>07:50 Dry Run 与 JSON 计划</li><li>09:54 look.py 与 scenes.py：让 AI 看见素材</li><li>12:10 color.py 与 check.py：画面和交付检查</li><li>13:12 cut.py、sync.py 与漂移</li><li>15:37 SPEC：让代码成为契约</li><li>17:30 把探测、执行、验证带到别的工具链</li></ul><p><b>延伸阅读</b></p><ul><li><a href="https://github.com/kajisho5/ffmpeg-skill/tree/87c84f23b4546379795107a49524f4d9803c9cee">ffmpeg-skill pinned source · GitHub</a></li></ul>]]>
      </description>
      <content:encoded>
        <![CDATA[<p>这集音频从一个常见的失败开始：把视频交给 AI，让它凭文件名和想当然的参数写 FFmpeg 命令。ffmpeg-skill 给出的答案，是把媒体事实、工具边界和验证结果重新放回流水线里。</p><p><b>这一集聊什么</b></p><ul><li><strong>Probe first。</strong>先用 probe.py 读取真实的容器、编码、帧率、音轨和时间戳，再决定后续动作。</li><li><strong>无损优先。</strong>能用流拷贝解决的问题，不先把素材送进级联重编码链。</li><li><strong>Dry Run。</strong>执行前输出 JSON 计划，让人和 AI 都能看见将要发生的操作。</li><li><strong>工具各司其职。</strong>look.py、scenes.py、color.py、check.py、cut.py 和 sync.py 分别处理观察、分析、色彩、检查、剪切与对齐。</li><li><strong>SPEC 契约。</strong>从 argparse 运行时生成工具说明，让代码参数成为更可靠的事实来源。</li></ul><p><b>为什么 VFR 会改变剪辑判断</b></p><p>手机录像、屏幕录制和会议录制可能带有可变帧率（VFR）。如果按恒定帧率去猜时间线，画面和音频会在长时间线上逐渐错开。先探测，再选择无损或精确重构路径，才知道自己在处理什么。</p><p><b>事后术语核对</b></p><p>本版阅读稿根据 pinned ffmpeg-skill 源文档校正了明显的 ASR 术语，例如 ffmpeg-skill、SKILL.md、probe.py、look.py、scenes.py、color.py、check.py、cut.py、sync.py、SPEC 和 argparse。原始 ASR、校正前后全文与理由保存在封包的 transcription 台账中；这类校正不改变音频和时间线。</p><p><b>音频来源说明</b></p><p>本集音频为 AI 合成的已提供成品，具体生成器身份未在本次 source record 中确认。节目内容依据本集音频、pinned ffmpeg-skill revision 与随附材料整理。</p><p><b>本集章节</b></p><ul><li>00:00 让 AI 猜参数，为什么总会出错</li><li>00:47 ffmpeg-skill 的初衷与 28 个工具</li><li>03:18 Probe first：先认识真实媒体</li><li>07:50 Dry Run 与 JSON 计划</li><li>09:54 look.py 与 scenes.py：让 AI 看见素材</li><li>12:10 color.py 与 check.py：画面和交付检查</li><li>13:12 cut.py、sync.py 与漂移</li><li>15:37 SPEC：让代码成为契约</li><li>17:30 把探测、执行、验证带到别的工具链</li></ul><p><b>延伸阅读</b></p><ul><li><a href="https://github.com/kajisho5/ffmpeg-skill/tree/87c84f23b4546379795107a49524f4d9803c9cee">ffmpeg-skill pinned source · GitHub</a></li></ul>]]>
      </content:encoded>
      <pubDate>Wed, 09 Sep 2026 02:32:34 +0200</pubDate>
      <author>Martin Lanse</author>
      <enclosure url="https://media.transistor.fm/53d4a22a/721d0abf.mp3" length="27328180" type="audio/mpeg"/>
      <itunes:author>Martin Lanse</itunes:author>
      <itunes:image href="https://img.transistorcdn.com/POvUC7enX5jTGXpeTgw2SickWJY_3tHMut-rgAcOwEc/rs:fill:0:0:1/w:1400/h:1400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS82MWY2/MTRmNjc0NWUzMWM5/M2FhZjkxYWVjZWM4/ZDA2NC53ZWJw.jpg"/>
      <itunes:duration>1137</itunes:duration>
      <itunes:summary>把视频交给 AI 之后，怎样避免它凭感觉猜参数？这集从 ffmpeg-skill 的 Probe first、无损优先、Dry Run 和 SPEC 契约出发，拆解一条可验证的媒体工具链。</itunes:summary>
      <itunes:subtitle>把视频交给 AI 之后，怎样避免它凭感觉猜参数？这集从 ffmpeg-skill 的 Probe first、无损优先、Dry Run 和 SPEC 契约出发，拆解一条可验证的媒体工具链。</itunes:subtitle>
      <itunes:keywords></itunes:keywords>
      <itunes:explicit>No</itunes:explicit>
      <podcast:transcript url="https://share.transistor.fm/s/53d4a22a/transcript.txt" type="text/plain"/>
    </item>
    <item>
      <title>漂亮的 AI 幻灯片，离可靠工具链还有多远？</title>
      <itunes:episode>1</itunes:episode>
      <podcast:episode>1</podcast:episode>
      <itunes:title>漂亮的 AI 幻灯片，离可靠工具链还有多远？</itunes:title>
      <itunes:episodeType>full</itunes:episodeType>
      <guid isPermaLink="false">846c8f41-e9fa-403c-ae37-edbbcbd1f2eb</guid>
      <link>https://share.transistor.fm/s/867782c0</link>
      <description>
        <![CDATA[<p>一张 AI 幻灯片很好看，能不能顺利改成可编辑的 PPTX？这一集从 Gorden Super PPT Skills 出发，聊环境适配、切片失败、文字生成和视觉校正，看看一套制作流程怎样变得更顺手。</p><p>这套方案把工作分给三个技能：串联流程、生成图片，再把背景、框架、图标和文字还原成可编辑的幻灯片。沿着这条路线，我们提出了几组改造想法，也重新核对了录音里说得太满的地方。</p><p><b>四个值得继续试的问题</b></p><ul><li><strong>换个环境，还能跑吗？</strong> 核心逻辑与运行时适配怎样分工，才能让迁移更省心？</li><li><strong>一小块图标切坏了，怎么接着做？</strong> 从图标重切到局部合并，讨论异常恢复与可编辑性之间的取舍。</li><li><strong>一页字太多，要不要分步生成？</strong> 先做视觉容器，再放入精确文字，值得用一组实际样例比较。</li><li><strong>看出了位置偏差，下一步怎么改？</strong> 把视觉检查接到坐标修正上，让每一次检查都能帮上忙。</li></ul><p>事后查证，发现搞错了：原项目已经写了其他运行环境的适配说明，也有图标重出、增加留白后重切，以及用 dx_px／dy_px 校正位置的步骤。录音里把这些说成了缺失，话说满了。我们接下来想试的，是怎样把这些恢复步骤接得更顺，以及能否从差异热图自动算出可靠的修正量。</p><p><b>听完可以动手试一件事</b></p><p>打开下面的三个技能入口，挑一个最想改的环节，用同一份输入跑一次现有流程和你的改法。记下哪里更顺、哪里又出了问题，带着结果继续讨论。</p><p>本集由 AI 合成语音呈现，内容由 Martin Lanse 整理。</p><p><b>本集章节</b></p><ul><li>00:00 厨具与砧板：为什么讨论工具链边界</li><li>00:33 运行时依赖：通用性的边界在哪里</li><li>01:47 适配器提案：让核心逻辑更纯粹</li><li>02:56 四层还原与强门禁的代价</li><li>04:16 异常降级：整页重来之外的选择</li><li>05:29 高密度内容：先做容器，再填文字</li><li>07:39 视觉 QA：发现偏移之后怎么办</li><li>09:34 四项改进与一个源码自测</li></ul><p><b>延伸阅读</b></p><ul><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/tree/8c05583dab8334182b71738e8dfbbec5c56a1951">Gorden Super PPT Skills：官方源码与三技能入口（固定版本）</a></li><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/blob/8c05583dab8334182b71738e8dfbbec5c56a1951/GordenImagePPTGen/references/runtime-notes.md">运行时适配说明：Codex 主路径与其他后端</a></li><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/blob/8c05583dab8334182b71738e8dfbbec5c56a1951/GordenImage2PPTX/references/image-to-pptx.md">图片还原 PPTX：四层结构与验收流程</a></li><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/blob/8c05583dab8334182b71738e8dfbbec5c56a1951/GordenImage2PPTX/scripts/visual_compare_qa.py">视觉对比 QA 脚本：差异图与指标的实际输出</a></li></ul><p><a href="https://share.transistor.fm/s/867782c0/transcript">阅读本集完整文字稿</a></p>]]>
      </description>
      <content:encoded>
        <![CDATA[<p>一张 AI 幻灯片很好看，能不能顺利改成可编辑的 PPTX？这一集从 Gorden Super PPT Skills 出发，聊环境适配、切片失败、文字生成和视觉校正，看看一套制作流程怎样变得更顺手。</p><p>这套方案把工作分给三个技能：串联流程、生成图片，再把背景、框架、图标和文字还原成可编辑的幻灯片。沿着这条路线，我们提出了几组改造想法，也重新核对了录音里说得太满的地方。</p><p><b>四个值得继续试的问题</b></p><ul><li><strong>换个环境，还能跑吗？</strong> 核心逻辑与运行时适配怎样分工，才能让迁移更省心？</li><li><strong>一小块图标切坏了，怎么接着做？</strong> 从图标重切到局部合并，讨论异常恢复与可编辑性之间的取舍。</li><li><strong>一页字太多，要不要分步生成？</strong> 先做视觉容器，再放入精确文字，值得用一组实际样例比较。</li><li><strong>看出了位置偏差，下一步怎么改？</strong> 把视觉检查接到坐标修正上，让每一次检查都能帮上忙。</li></ul><p>事后查证，发现搞错了：原项目已经写了其他运行环境的适配说明，也有图标重出、增加留白后重切，以及用 dx_px／dy_px 校正位置的步骤。录音里把这些说成了缺失，话说满了。我们接下来想试的，是怎样把这些恢复步骤接得更顺，以及能否从差异热图自动算出可靠的修正量。</p><p><b>听完可以动手试一件事</b></p><p>打开下面的三个技能入口，挑一个最想改的环节，用同一份输入跑一次现有流程和你的改法。记下哪里更顺、哪里又出了问题，带着结果继续讨论。</p><p>本集由 AI 合成语音呈现，内容由 Martin Lanse 整理。</p><p><b>本集章节</b></p><ul><li>00:00 厨具与砧板：为什么讨论工具链边界</li><li>00:33 运行时依赖：通用性的边界在哪里</li><li>01:47 适配器提案：让核心逻辑更纯粹</li><li>02:56 四层还原与强门禁的代价</li><li>04:16 异常降级：整页重来之外的选择</li><li>05:29 高密度内容：先做容器，再填文字</li><li>07:39 视觉 QA：发现偏移之后怎么办</li><li>09:34 四项改进与一个源码自测</li></ul><p><b>延伸阅读</b></p><ul><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/tree/8c05583dab8334182b71738e8dfbbec5c56a1951">Gorden Super PPT Skills：官方源码与三技能入口（固定版本）</a></li><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/blob/8c05583dab8334182b71738e8dfbbec5c56a1951/GordenImagePPTGen/references/runtime-notes.md">运行时适配说明：Codex 主路径与其他后端</a></li><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/blob/8c05583dab8334182b71738e8dfbbec5c56a1951/GordenImage2PPTX/references/image-to-pptx.md">图片还原 PPTX：四层结构与验收流程</a></li><li><a href="https://github.com/GordenSun/GordenSuperPPTSkills/blob/8c05583dab8334182b71738e8dfbbec5c56a1951/GordenImage2PPTX/scripts/visual_compare_qa.py">视觉对比 QA 脚本：差异图与指标的实际输出</a></li></ul><p><a href="https://share.transistor.fm/s/867782c0/transcript">阅读本集完整文字稿</a></p>]]>
      </content:encoded>
      <pubDate>Mon, 07 Sep 2026 02:19:00 +0200</pubDate>
      <author>Martin Lanse</author>
      <enclosure url="https://media.transistor.fm/867782c0/741dc46f.mp3" length="15502081" type="audio/mpeg"/>
      <itunes:author>Martin Lanse</itunes:author>
      <itunes:image href="https://img.transistorcdn.com/aPFzXmnPOqqXLsGdG8w3S6a0Wdw4JVjpMzj5xCsMQ_M/rs:fill:0:0:1/w:1400/h:1400/q:60/mb:500000/aHR0cHM6Ly9pbWct/dXBsb2FkLXByb2R1/Y3Rpb24udHJhbnNp/c3Rvci5mbS8yOWQx/ZmZhODgxY2Y4MTQw/M2ZmNmIwMGMxMTE5/MGRlNC5qcGc.jpg"/>
      <itunes:duration>644</itunes:duration>
      <itunes:summary>一张 AI 幻灯片很好看，能不能顺利改成可编辑的 PPTX？这一集从 Gorden Super PPT Skills 出发，聊环境适配、切片失败、文字生成和视觉校正，看看一套制作流程怎样变得更顺手。</itunes:summary>
      <itunes:subtitle>一张 AI 幻灯片很好看，能不能顺利改成可编辑的 PPTX？这一集从 Gorden Super PPT Skills 出发，聊环境适配、切片失败、文字生成和视觉校正，看看一套制作流程怎样变得更顺手。</itunes:subtitle>
      <itunes:keywords></itunes:keywords>
      <itunes:explicit>No</itunes:explicit>
      <podcast:transcript url="https://share.transistor.fm/s/867782c0/transcript.txt" type="text/plain"/>
      <podcast:chapters url="https://share.transistor.fm/s/867782c0/chapters.json" type="application/json+chapters"/>
    </item>
  </channel>
</rss>
