语音模块与MCU串口通信协议设计:六个关键要点
1. 为什么语音模块联调总是卡在串口这一关做智能硬件这几年语音模块和主控MCU之间的通信问题几乎在每个项目里都会遇到。我见过不少团队算法选型、麦克风阵列、唤醒词训练都搞定了最后却栽在串口联调上——不是语音识别结果传不过来就是控制指令偶尔丢帧最头疼的是问题出现得毫无规律有时候半小时复现一次有时候一整天都正常等到客户现场才爆发。这里面的根源绝大多数不是硬件问题也不是语音模块本身的问题而是串口通信协议设计得不够严谨。很多人觉得串口协议不就是定个帧头帧尾、塞个数据进去就完事了吗实际上一套能扛住量产、能在不同芯片平台之间稳定传输的通信协议需要考虑的细节远比想象中多。语音模块和普通传感器还不一样——它的数据结构复杂识别结果、音频流、唤醒事件、命令词表时序上又是异步主动上报模块自己决定什么时候说话数据量还经常忽大忽小。这些特性叠加在一起对协议设计提出了更高的要求。这篇文章不聊算法不聊硬件电路聚焦在语音模块与主控MCU之间串口通信协议的设计方法上。我会结合自己做过的几个量产项目把协议设计的六个关键要点拆开讲清楚每一点都会说明为什么这么做、不这么做会踩什么坑、具体怎么落地。如果你是第一次做语音模块接入或者已经在联调阶段被各种莫名其妙的丢包、粘包问题折磨过这篇文章应该能帮你省下不少时间。2. 帧结构设计六个要点直接决定联调顺畅程度2.1 帧头设计别用单字节固定引导码是关键串口通信的第一步是让接收方知道一帧数据从哪里开始。很多初版协议喜欢用一个固定字节当帧头比如0xAA或者0x55简单是简单但实际跑起来问题不少。语音模块和MCU之间传输的数据不是纯文本而是包含各种数值的二进制流。二进制流里出现什么字节都不奇怪——长度字段可能是0xAA数据域里也可能连续出现多个0xAA。如果帧头只有一个字节接收方一旦丢失同步就会在错误的位置误判帧头导致整帧解析错乱而且这种错乱会像滚雪球一样一路错下去。我建议的做法是使用多字节固定引导码比如0xAA 0x55这样的双字节组合甚至可以用0xAA 0x55 0xA5这样的三字节组合。引导码越长出现伪帧头的概率越低但也要权衡传输效率。实际项目中双字节引导码已经够用前提是这两个字节在数据域中出现的概率要刻意压低。这里有个技巧在设计协议时尽量让数据域中不容易出现0xAA 0x55连续组合。如果数据域是纯数值这个连续组合出现的概率大约是1/65536风险已经很低。如果数据域里也可能传音频特征值这类随机性很强的数据建议在协议层做一次简单的转义处理把0xAA 0x55拆开或者用第三个字节做转义标记。2.2 帧长字段固定帧尾配合精确长度杜绝粘包误判串口是流式传输接收方天然面临一个切分问题我读到的是连续的字节流怎么知道哪几个字节属于同一帧有两种典型的方案固定帧尾和长度字段。固定帧尾比如帧尾是0x0D 0x0A实现简单但数据域里如果出现和帧尾相同的字节就需要做转义处理逻辑反而变复杂。长度字段的方案更可靠——在帧头之后紧跟一个字节或两个字节表示整帧长度接收方先等够帧头再读长度再按长度收完剩余字节。语音模块的场景下我推荐固定帧头 长度字段 固定帧尾三者结合。帧尾不需要承担切分职责它的作用从标记结束降级为校验辅助这样数据域里出现帧尾字节也不会造成误判省掉了转义逻辑。长度字段本身有几个细节长度字段的计数范围要明确。是只算数据域还是从帧头开始算到帧尾项目里必须统一否则收发双方各算各的联调必出问题。长度字段建议用两个字节。语音模块一次可能上报较长的数据比如识别结果附带多个候选词单字节长度最多到255很容易不够用。两个字节小端序可以覆盖到65535基本够用。接收方要做长度上限校验。有些模块异常时可能上报一个异常大的长度值接收方如果不做上限判断就会一直傻等后面的数据把整个接收缓冲区卡死。长度上限可以作为协议常量定义比如MAX_FRAME_LEN 256超过这个值直接丢弃并重新搜帧头。2.3 命令域双向交互的基础必须预留扩展空间命令域是语音模块和MCU交互的核心字段它决定了一帧数据是谁发给谁、要做什么事。设计命令域时最容易犯的错是——只考虑当前需求命令字编号随手拈来完全没留扩展空间。我做过的某个早期项目就吃过这个亏。当时定义了命令字0x01表示语音识别结果上报0x02表示播放控制指令0x03表示固件版本查询。后来要加唤醒词切换音量调节离线命令词更新这些新功能时发现0x01到0x03之间已经没有合理的位置留给上报类命令了新命令只能塞在_BLOCK, 代码里全是switch-case嵌套最后自己都难维护。正确做法是先分类、后编号。比如0x01 - 0x1FMCU 发送给语音模块的指令0x40 - 0x5F语音模块向 MCU 上报的事件/结果0x80 - 0x9F双向的查询/应答类命令0xA0 - 0xCF预留的扩展区编号之间的跳跃不是浪费而是给未来的功能留出插入空间。命令域本身推荐用一个字节如果确实有超多命令类型最多用到两个字节再长就属于设计过度了。另外我建议在命令域里顺带体现数据方向。比如高两位表示方向0主控到模块1模块到主控这样接收方不需要维护一张哪些命令是从哪边过来的对照表解析逻辑更简单排查问题时也能一眼看出是哪端发出的帧。2.4 设备地址单主多从的必经之路语音模块也不例外你会发现很多语音模块的方案里模块和MCU是一对一连接的这时候有人会问一个地址字段有必要吗有必要而且建议从一开始就加进去原因有三第一为后续产品升级留后路。今天是一对一明天产品就可能同时挂一个语音模块、一个降噪模块、一个功放模块。如果协议从第一天就有地址字段后面加设备就是改个地址的事不用推翻重来。第二提高抗干扰能力。有些项目的语音模块和MCU之间走的是半双工RS485总线总线上所有设备都能收到数据。有地址字段接收方可以快速过滤掉不属于自己的帧避免无效解析消耗CPU。第三降低调试复杂度。联调时你可能会在总线上挂一个调试工具同时监听双向数据。有明确的地址字段就能在日志里快速区分每一帧的来源设备不用靠猜。地址字段的取值建议单独规划0x00保留不用0xFF表示广播其他数值按设备分配。如果以后真有多个设备挂同一条总线地址冲突的排查会非常痛苦所以地址管理最好写在协议文档里并且做成宏定义或枚举不要散落在业务代码中。2.5 校验域CRC还是累加和看场景选型校验字段是协议设计中争议最多的部分。有人觉得串口误码率本来就低加不加校验无所谓有人习惯一律上CRC32结果在8位单片机上算得CPU哇哇叫。我的经验是语音模块和MCU之间校验必须有但强度按实际场景选。纯板级短距离直连模块和MCU在同一块PCB上串口误码率确实很低用一字节的累加和sum check就够了。它的优点是计算量小、实现简单8位MCU上几行代码就能搞定一个字节的校验域也不会拖累协议长度。但如果语音模块通过排线、延长线、或者带有一定干扰的环境连接我不建议只用累加和。干扰导致的误码往往会连续影响多个字节累加和此时有概率出现不同错误序列算出相同校验值的情况。这种情况下用CRC8或者CRC16更稳妥。CRC16的开销在绝大多数MCU平台上都可接受查表法每秒处理几十KB数据毫无压力。这里还要强调一个实战经验校验的计算范围必须是连续的两端代码必须一致。常见错误是发送端从命令域算到数据域末尾接收端却把帧头也算进去了两边结果永远对不上。最好在协议文档里用一行公式明确checksum CRC16(命令域 数据域)并在代码里用同样的函数来生成和验证——建议不要为发送和接收各写一份校验代码共用一个函数从源头杜绝不一致。2.6 超时重传保证可靠性的最后一道防线串口是物理层协议本身没有ACK/NACK机制。如果你设计的协议里完全没有超时重传那么一帧数据丢失后业务层面只能在更高层级干等表现可能是用户对语音模块说话没反应“播报指令漏执行之类的诡异故障。语音模块通信的可靠性设计我建议不必复杂到TCP那种全状态机的程度做到指令级别应答 有限次重传就够了。以主控MCU发送播放提示音指令为例MCU发送指令帧记录发送时间。语音模块收到后立即回一个应答帧ACK即使执行失败也要回一个NACK并附带原因码。MCU如果在超时时间比如200ms内没收到ACK重发该指令最多重发2次。超过重发次数后向上层业务报指令发送失败。这个机制有几个细节要注意ACK帧应该基于序号或者原命令字回显不能只回收到两个字节。否则MCU发出多条指令时根本不知道这个ACK对应的是哪一条。完整的协议可以带序号字段每发一条指令序号1接收方在ACK里回显这个序号这样还能顺带处理应答帧丢失但指令实际已执行的重发问题。如果MCU重发时发现序号对不上就能判断出上一次其实已经执行了。上报类数据不需要ACK。语音模块主动上报识别结果这种数据属于通知性质MCU收到就处理收不到就等下一次。给每个上报加ACK会把双向交互搞得很臃肿收益不大。超时时间的选择要结合具体场景。语音模块的响应一般比较快短指令可以设100-300ms如果是OTA升级、命令词更新这类重操作可能要拉到2-5秒建议做成可配置参数在协议头文件里统一管理。3. 命令域的扩展设计让语音模块从哑设备变成交互方3.1 区分两类命令操作型指令与通知型事件语音模块和MCU之间跑的命令本质上可以分成两大类我在协议设计初期就会把它们分清楚。一类是操作型指令从MCU发给语音模块要求模块做一件事比如播放某段音频、切换唤醒词、调节音量。这类指令必须走上面提到的应答重传机制。另一类是通知型事件从语音模块主动发给MCU告诉主控“我这边发生了什么”比如用户唤醒了、识别到了某条命令词、播放结束了。这类事件不是MCU主动请求的模块什么时候上报完全取决于用户行为。把这两类分清楚的价值在于超时重传和日志打印的策略完全不同。操作型指令必须确认日志里要能看到发送失败、重试1次这类记录通知型事件则不应该做重传也不应该在没收到回应时干等天然就是发完即走的语义。3.2 语音模块的异步上报场景主控侧要做好状态机语音模块的工作是异步的——它在自己内部检测唤醒、做识别、播报做完之后通过串口告诉MCU。如果MCU端的代码是纯顺序查询的方式比如主循环里一直等串口数据很容易出现播放过程中来了新的识别结果这种乱序情况处理不好还会导致状态错乱。我在实际项目中会建议MCU侧为语音交互维护一个简单的状态机大致分为空闲、唤醒待识别、正在播报、正在OTA更新等状态。串口每收到一帧有效数据先根据命令字判断是哪类事件再决定是否改变当前状态。比如空闲状态下收到”唤醒成功“事件 → 状态切到唤醒待识别唤醒待识别状态下收到识别结果事件 → 查命令表决定是否播报状态切到正在播报正在播报状态下收到新的识别结果 → 可以先缓存播报结束后再处理状态机的好处是即使语音模块连续上报多帧数据MCU不会乱套代码的可读性和可维护性也远超一堆if-else嵌套。协议设计到这里已经不只是传输字节了它在无形中帮你定义了上层业务逻辑的边界这就是设计良好的协议带来的额外收益。3.3 命令表管理不要硬编码做成数据驱动接了语音模块之后MCU里通常要维护一份命令词对应动作的表。比如用户说打开灯语音模块给出命令字0x01MCU收到0x01就去开灯。这个表的实现方式很影响后续可维护性。低频的场景用硬编码switch-case没问题一旦命令词多起来几十上百条硬编码就是个灾难。建议把命令映射做成const结构体数组每项包含命令字、对应的处理函数指针、是否需要播报确认、超时时间等。新增加命令词时只需要往表里加一行不用改动协议解析主流程。这个设计有一点要注意命令字和语音模块那边的词表必须保持一致。建议在协议文档里维护一张双向映射表每次修改两边同步更新并且在代码里用宏定义或枚举来引用命令字杜绝裸数字满天飞。4. 联调排障实战从乱码满天飞到一帧不丢的排查链路4.1 联调前必做的静态检查清单很多联调问题其实不是串口通信跑起来才有的接个示波器看一眼波形就发现问题了。我整理了一份联调前必做的检查清单抄下来用能省一半的事检查项标准要求常见问题波特率一致性模块端与MCU端完全一致常用115200/921600一边设9600一边设115200日志全是乱码电平标准TTL电平不能直连RS232电平模块是3.3V TTL却接了RS232转接板收不到任何数据交叉接线TX接RXRX接TXGND必须共地有些人偷懒只接两根线结果受干扰偶发乱码缓冲区大小MCU接收缓冲区必须大于协议最大帧长缓冲区太小导致长帧被截断解析永远报错日志时间戳联调时收发双方日志都带ms级时间戳没有时间戳问题发生时前后顺序根本对不上这些检查项在硬件清单阶段就确认掉能避免一大半看起来很玄学的问题。4.2 排查偶发丢帧的完整分析思路如果协议本身设计没问题静态检查也过了但联调时仍然偶发丢帧这类问题的排查是最考验功力的。分享一个我常用的排查链路。第一步先把偶发问题变成必然问题。提高通信频率主控每秒向模块发100条指令让模块不断回ACK制造高负载。如果原来一小时丢一帧高频测试下可能一两分钟就暴露了问题复现越快越好查。第二步用串口监听工具捕获物理层数据。在模块和MCU之间并一个监听设备常见USB转TTL工具即可把总线上的原始数据全部抓下来。如果监听设备看到的数据包已经是缺帧的说明问题在物理层或发送端如果监听数据完整但MCU端解析就是报错说明问题在接收端或协议解析逻辑。第三步打上详细日志重点看缓冲区水位。接收中断每收一个字节都记录接收缓冲区的读写位置丢帧往往能看出规律——是缓冲区溢出被覆盖了还是某段代码处理时间太长导致后续字节被丢弃。第四步区分硬件中断丢失和软件处理不过来。如果用的是STM32这类带硬件FIFO和DMA的MCU优先考虑DMA空闲中断的接收方案。普通串口中断逐字节接收时如果主循环里有耗时操作比如Flash擦写、长字符串格式化打印中断响应延迟变大容易出现接收溢出。我之前遇到过一次非常隐蔽的丢帧MCU在用串口打印调试日志波特率反而比通信链路的低每次打印都会关中断几百微秒正好语音模块那边连续发了几个字节直接丢了。后来把调试日志挪到另一个DMA通道问题彻底消失。4.3 串口调试助手的正确打开方式串口调试助手人人会用但用得好的人不多。联调语音模块时有几个功能值得多用Hex模式和文本模式切换。如果协议里定了帧头0xAA 0x55那么看Hex模式才能确认帧结构是否完整文本模式只会让你一头雾水。显示时间戳。确认数据到达的顺序和时间间隔分析超时重传逻辑是否合理。支持脚本自动应答。有的调试助手支持自定义接收触发后自动回复指定数据可以模拟模块端/MCU端一方先验证协议解析代码是否正常再接入真实设备联调效率高很多。不勾选自动换行选项以防干扰发送缓冲。这一点比较冷门但部分串口调试助手在自动换行模式下会在发送数据末尾追加换行符到了MCU端被当成了帧内容解析就错乱了。5. 写在项目之后协议文档与代码结构沉淀聊完联调的技术细节最后想说说项目收尾阶段容易被忽视的事——协议文档和代码结构的沉淀。语音模块和MCU的串口通信协议一旦定了就不太会频繁大改。但产品是要迭代的今天接入的是A厂商的语音模块明年可能换B厂商的方案。如果协议文档不清晰、命令字表散落在代码里、校验实现和协议描述对不上换方案时基本等于重新设计一遍成本极高。我的习惯是每做完一个语音接入项目就整理一份协议文档到仓库里包含几个固定章节物理层参数波特率/电平标准/接线方式、帧结构定义每个人字段的偏移和含义、命令字总表方向和用途分明细、校验算法描述附带一份参考实现、典型交互时序唤醒、识别、播报、OTA等场景的交互流程。代码层面把协议解析封装成独立模块接口设计成接收一个字节喂给状态机 → 完整一帧出来回调处理函数的模式。这样上层业务逻辑完全不用关心串口细节以后换模块厂商只需要改协议解析层业务代码一行都不用动。再分享一个实践经验协议在量产前一定要做一次边界测试包括最长数据帧、数据域充满0xFF或0x00、半包数据发一半断电、连续高频发送等情况。这些边界情况才是真正暴露协议设计漏洞的时刻平时正常业务的联调根本覆盖不到。语音模块接入MCU这件事硬件上很简单难的是把通信协议设计得严谨、可扩展、好排查。做到这一层整个项目的联调节奏就会顺畅非常多。踩过坑之后自然就明白早花半天把协议设计清楚远比联调时的无数个深夜排查值得多。

相关新闻

4K视频超清修复技术:从算法原理到UNI.T舞台实战应用

4K视频超清修复技术:从算法原理到UNI.T舞台实战应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/28 4:13:13 阅读更多 →
红外遥控模块——让 Arduino 接收遥控器信号

红外遥控模块——让 Arduino 接收遥控器信号

前面我们学了蜂鸣器发声、继电器控制高压设备,现在给 Arduino 加一个"耳朵"——红外遥控模块,让它能接收遥控器的指令,实现无线控制。学完这篇,你会完成:基础接收:读取遥控器按键的编码值红外控制…

2026/10/2 21:17:26 阅读更多 →
小机房监控实战:Ping+SNMP+网页监控与声光语音告警配置指南

小机房监控实战:Ping+SNMP+网页监控与声光语音告警配置指南

小机房的监控问题,说大不大,说小不小。你手底下管着三五台服务器、一两台核心交换机,业务就那么几个系统,Zabbix、Prometheus这种正经监控平台去搭一套吧,资源占用高、维护成本也高,纯粹杀鸡用牛刀&#xf…

2026/10/16 4:11:34 阅读更多 →

最新新闻

STATA外部命令资源库搭建:从adopath到源码管理的完整方案

STATA外部命令资源库搭建:从adopath到源码管理的完整方案

简介:面向使用STATA开展数据分析、统计与计量经济学研究的学者、研究人员及学生,这份外部命令资源库将分散在官方社区、个人主页等处的第三方扩展工具汇集一处,有效解决外部命令获取渠道不一、版本兼容难查等问题,降低建模前的环境…

2026/10/19 0:46:07 阅读更多 →
MATLAB实现电力系统潮流计算:从导纳矩阵到牛顿法收敛

MATLAB实现电力系统潮流计算:从导纳矩阵到牛顿法收敛

简介:本资源是一份面向电气工程专业本科生及电力系统初学者的MATLAB实践教学文档,聚焦电力系统核心基础——潮流计算的原理实现与编程落地。文档完整阐述牛顿-拉夫逊法(直角坐标形式)的数学建模逻辑、节点导纳矩阵构建方法、程序变…

2026/10/19 0:46:07 阅读更多 →
豆包读取电商客服聊天窗口:本机客户端走本地端口即可完成会话监听

豆包读取电商客服聊天窗口:本机客户端走本地端口即可完成会话监听

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:45:07 阅读更多 →
【Mac】vscode 配置 GD32E230CXXX 开发环境:从工具链到烧录的完整落地

【Mac】vscode 配置 GD32E230CXXX 开发环境:从工具链到烧录的完整落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:45:07 阅读更多 →
大模型本地部署体积对照:从0.5B到70B量化版本配置清单

大模型本地部署体积对照:从0.5B到70B量化版本配置清单

大模型本地部署这件事,聊起来都是算力、精度、上下文,但真正动手之前,第一道门槛其实是“机器能不能装下”。我最近把一套开源模型家族的多个版本在本地环境里来回实测了几轮,从最小的0.5B到70B量化版都跑过一遍,最后整…

2026/10/19 0:44:06 阅读更多 →
疲劳驾驶数据集图片与XML标注不匹配?清洗与YOLO转换指南

疲劳驾驶数据集图片与XML标注不匹配?清洗与YOLO转换指南

简介:这是一份面向深度学习和图像识别入门练习的疲劳驾驶监测数据集,包含人体疲劳状态下的真实照片,可重点将打哈欠时的张嘴状态与闭眼状态作为疲劳判定标准,适合有一定Python基础、正在学习目标检测或图像分类的初学者&#xff0…

2026/10/19 0:44:06 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →