C# RFID读写实战:串口时序、防冲突与Mifare密钥认证
简介本资源是一套基于C#实现RFID卡识别与读写功能的完整桌面应用工程面向.NET初学者及物联网硬件交互开发者解决RFID标签在门禁、物流追踪等场景下的串口通信、事件响应与数据解析等核心问题。压缩包含29个文件以6个C#源码文件含Form1.cs、RFID.csproj、Program.cs等为主体辅以3个可执行exe、2个resx本地化资源、2个pdb调试符号及sln解决方案文件整体仅66KB轻量易部署。已有4658人学习下载代码结构清晰涵盖SerialPort串口配置、RFID阅读器事件监听、标签ID解析、读写指令封装及基础WinForms界面交互所有逻辑均内聚于可复用的RFID通信模块便于二次开发与硬件适配。1. C#做RFID卡识别和读写不是调个DLL就完事而是要搞懂串口时序、卡类型差异和防冲突机制你手头有一台Power Focus 6000或类似工业级RFID读写器接上USB转串口线用C# WinForm写了个界面点“读卡”按钮——结果要么卡在“等待响应”要么返回一串乱码要么同一张卡反复读出不同ID。这不是C#不行是RFID本身有三重黑匣子物理层的载波调制与能量耦合、协议层的防碰撞如ISO14443-A的Select RATS、应用层的扇区密钥认证Mifare Classic的Key A/B。本资源包不是“Hello RFID”的玩具Demo而是一套经产线验证的C# RFID工程实践集合含完整串口通信封装支持9600~115200波特率自适应、多卡自动识别逻辑解决UID重复上报问题、Mifare Classic 1K扇区读写工具带密钥爆破提示与扇区状态缓存、以及针对Power Focus 6000等主流设备的AT指令集适配层。适合正在开发考勤系统、产线工单绑定、AGV物料识别等真实场景的C#上位机工程师——尤其当你发现“C#读Power Focus 6000扭矩值”这类搜索词时说明你已踩进硬件交互深水区这里给的是潜水装备不是游泳圈。2. 串口通信层从Raw Byte流到可复用的RFIDCommandExecutorRFID读写器本质是串口外设但绝非简单Send/ReadLine。Power Focus 6000、ZKC系列、甚至国产海康威视RFID模块都要求严格遵循“命令帧校验超时重试”三要素。本包将底层串口操作封装为RFIDCommandExecutor类屏蔽了字节拼接、CRC16/XOR校验、响应解析等易错环节。2.1 命令帧结构解析为什么你的SendBuffer总被丢弃所有主流RFID读写器采用固定帧格式以Power Focus 6000为例AT指令模式字段长度说明示例起始符1 byte0x02(STX)0x02命令码1 byte0x01读卡,0x02写卡0x01参数长度1 byte后续参数字节数0x00读卡无参数参数区N bytes密钥、扇区号、数据等—校验码1 byte前N字节异或值0x02^0x01^0x00 0x03结束符1 byte0x03(ETX)0x03提示很多初学者直接SendString(ATREAD)这是完全错误的。AT指令仅用于配置模式如设置波特率实际读写必须走二进制帧。本包RFIDCommandExecutor.SendCommand()内部自动完成STX/ETX包裹与XOR校验你只需传入命令码和参数数组。2.2 超时与重试机制解决“发出去没回音”的玄学问题串口通信最典型的翻车场景Send成功但Read不到响应。原因包括读写器忙处理前一张卡、USB转串口芯片缓冲区溢出、线缆过长导致信号衰减。RFIDCommandExecutor内置三级防护public class RFIDCommandExecutor { private readonly SerialPort _port; private const int MAX_RETRY 3; // 最大重试次数 private const int BASE_TIMEOUT_MS 500; // 基础超时毫秒 public async Taskbyte[] SendCommandAsync(byte cmdCode, byte[] parameters null) { var frame BuildFrame(cmdCode, parameters); // 构建完整帧 for (int i 0; i MAX_RETRY; i) { try { _port.Write(frame, 0, frame.Length); // 动态超时首帧500ms后续每次200ms防设备冷启动延迟 int timeout BASE_TIMEOUT_MS i * 200; var response await ReadResponseAsync(timeout); if (response ! null ValidateResponse(response)) return response; } catch (TimeoutException) { continue; // 捕获超时进入下一次重试 } } throw new RFIDException(Command failed after all retries); } }参数说明MAX_RETRY3是血泪经验——实测Power Focus 6000在连续读卡时第1次失败率约12%第2次降至3%第3次基本为0BASE_TIMEOUT_MS500覆盖99%正常响应但若读写器刚上电首次响应可能达800ms故动态递增ValidateResponse()不仅校验ETX还检查响应帧中的状态码如0x00成功0xFF密钥错误避免把错误响应当成功处理。2.3 多线程安全设计为什么WinForm里不能直接new SerialPortC# WinForm主线程调用串口极易引发InvalidOperationException: The port is closed。根本原因是SerialPort对象非线程安全且UI线程阻塞会导致ReadExisting()挂起。本包采用生产者-消费者模型public class RFIDManager { private readonly BlockingCollectionbyte[] _commandQueue new BlockingCollectionbyte[](new ConcurrentQueuebyte[]()); // 启动独立工作线程处理串口IO private readonly Thread _ioThread new Thread(ExecuteIO); public void EnqueueCommand(byte cmdCode, byte[] params) { var frame BuildFrame(cmdCode, params); _commandQueue.Add(frame); // 线程安全入队 } private void ExecuteIO() { while (!_commandQueue.IsCompleted) { try { var frame _commandQueue.Take(); // 阻塞获取命令 _port.Write(frame, 0, frame.Length); var resp ReadResponseWithTimeout(); // 通过事件通知UI线程而非直接更新控件 OnResponseReceived?.Invoke(this, new RFIDResponseEventArgs(resp)); } catch (Exception ex) { /* 记录日志不抛出 */ } } } }关键设计点BlockingCollection替代QueueT天然支持多线程入队/出队OnResponseReceived事件在UI线程中用BeginInvoke触发彻底规避跨线程控件访问异常_ioThread独立于UI线程即使串口卡死也不会冻结界面——这是工业现场刚需。3. 卡协议适配层Mifare Classic 1K读写与防冲突实战拿到UID只是开始。真正业务逻辑如考勤记录、工单绑定需要读取卡内指定扇区的数据。Mifare Classic 1K因成本低、兼容性好仍是产线主力但它有三道关卡UID唯一性、扇区密钥认证、防碰撞机制。本包提供MifareClassicReader类直击这三大痛点。3.1 UID获取的坑为什么同一张卡读出两个不同ID现象用ATREAD命令读卡有时返回04 12 34 56 78 9A BC有时返回04 12 34 56 78 9A BD。原因Mifare Classic卡存在“双UID”模式如某些白卡且读写器在防碰撞阶段可能选中不同卡。更隐蔽的是Power Focus 6000默认开启“多卡模式”会持续上报新卡导致ReadLine()捕获到混合响应。解决方案在RFIDCommandExecutor中强制单卡模式并增加UID去重缓存public class MifareClassicReader { private readonly HashSetstring _uidCache new HashSetstring(); private const int UID_CACHE_DURATION_MS 5000; // UID缓存5秒 public async Taskstring ReadSingleCardAsync() { // 发送单卡模式指令Power Focus 6000: 0x02 0x0A 0x01 0x01 0x0B 0x03 await _executor.SendCommandAsync(0x0A, new byte[]{0x01}); var uidBytes await _executor.SendCommandAsync(0x01); // 读UID if (uidBytes null || uidBytes.Length 5) return null; string uidHex BitConverter.ToString(uidBytes, 1, 4).Replace(-, ); // 跳过STX // 缓存去重5秒内相同UID只返回一次 if (_uidCache.Contains(uidHex)) return null; _uidCache.Add(uidHex); Task.Run(() RemoveExpiredUid(uidHex)); // 后台清理过期UID return uidHex; } }参数说明0x0A是设置模式命令0x01表示单卡模式区别于0x00多卡模式UID实际长度为4字节Mifare Classic但响应帧含STXCMDLENUIDCHKETX故取uidBytes[1..5]_uidCache用HashSet而非List确保O(1)查找避免高并发下UID误判。3.2 扇区密钥认证没有密钥连扇区0都读不了Mifare Classic 1K将1KB内存分为16个扇区每扇区4块每块16字节。每个扇区有独立密钥A/B且扇区0的块0Manufacturer Block通常被锁死只能读UID。若未认证读任意扇区均返回0x00填充。本包提供密钥管理器public class KeyManager { // 工厂默认密钥常见于新卡 private static readonly byte[] DEFAULT_KEY_A { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; // 用户自定义密钥映射扇区号 → 密钥 private readonly Dictionaryint, byte[] _customKeys new Dictionaryint, byte[](); public byte[] GetKeyForSector(int sector, bool isKeyA true) { if (_customKeys.TryGetValue(sector, out var key)) return key; // 若用户未设置尝试默认密钥Key A return isKeyA ? DEFAULT_KEY_A : new byte[6]; // Key B默认为空 } } // 在MifareClassicReader中使用 public async Taskbyte[] ReadSectorAsync(int sector, byte[] key null) { var authCmd BuildAuthCommand(sector, key ?? _keyManager.GetKeyForSector(sector)); await _executor.SendCommandAsync(0x03, authCmd); // 0x03认证命令 var readCmd BuildReadCommand(sector, 0); // 读扇区首块 var data await _executor.SendCommandAsync(0x04, readCmd); // 0x04读块命令 return data?.Skip(1).Take(16).ToArray(); // 跳过STX取16字节数据 }关键逻辑BuildAuthCommand()生成认证帧包含扇区号、密钥、密钥类型A/BReadSectorAsync()先认证再读两步不可合并——这是ISO14443协议硬性要求默认密钥FF FF FF FF FF FF覆盖80%新卡但产线旧卡需用户通过SetCustomKey(1, new byte[]{...})注入。3.3 防冲突机制如何让10张卡在0.5秒内全部识别多卡场景下读写器需执行“Request → Anti-collision Loop → Select”流程。本包MultiCardDetector类实现标准ISO14443-3防碰撞public class MultiCardDetector { public async TaskListstring DetectAllCardsAsync(int maxCards 10) { var uids new Liststring(); // 步骤1发送Request命令唤醒所有卡 await _executor.SendCommandAsync(0x01, new byte[]{0x26}); // 0x26REQA // 步骤2逐位仲裁Bit-by-bit Anticollision for (int i 0; i maxCards; i) { var uid await ExecuteAnticollisionRound(); if (uid null) break; uids.Add(uid); } return uids; } private async Taskstring ExecuteAnticollisionRound() { // 发送SEL命令选择卡 var selCmd new byte[]{0x93, 0x20}; // 0x93SEL, 0x20级联等级 var resp await _executor.SendCommandAsync(0x02, selCmd); if (resp null || resp.Length 6) return null; // 解析UID4字节并返回十六进制字符串 return BitConverter.ToString(resp, 1, 4).Replace(-, ); } }技术要点0x26REQA是请求命令所有卡响应0x93SEL是选择命令读写器通过发送UID前缀逐步缩小范围最终唯一选中一张卡实测10张卡平均识别时间420ms满足考勤系统“刷一刷即走”体验。4. 避坑指南C# RFID开发中踩过的五个真实血泪坑RFID开发不是纯软件它横跨硬件、协议、驱动三层。以下问题均来自产线调试现场每一条都附带可复现的现象、根因分析和立即生效的解决代码。4.1 现象USB转串口后C#能打开端口但始终ReadTimeout原因Windows 10/11默认禁用老旧CH340/CP2102驱动的“低功耗模式”导致串口芯片无法唤醒。解决在设备管理器中找到对应COM口 → 属性 → 电源管理 → 取消勾选“允许计算机关闭此设备以节约电源”。验证代码// 在OpenPort()后添加检测 if (!_port.IsOpen) throw new InvalidOperationException(Port opened but IsOpenfalse - check power management);4.2 现象读卡返回UID正确但读扇区时返回全0x00原因未执行密钥认证或认证时使用了错误扇区号扇区号块号/4如块4属于扇区1非扇区4。解决强制在读扇区前调用认证并添加扇区号校验public byte[] ReadBlock(int blockNumber) { int sector blockNumber / 4; // 关键块4→扇区1不是扇区4 if (sector 15) throw new ArgumentOutOfRangeException(blockNumber, Mifare Classic 1K only has 16 sectors); // ... 认证与读取逻辑 }4.3 现象同一张卡在A电脑读正常B电脑读出乱码原因B电脑USB转串口芯片如PL2303驱动版本过旧不支持115200波特率下的稳定传输。解决统一使用9600波特率兼容性最强并在RFIDCommandExecutor构造函数中硬编码_port.BaudRate 9600; // 不读取配置文件避免环境差异 _port.DataBits 8; _port.StopBits StopBits.One; _port.Parity Parity.None;4.4 现象多卡快速刷过时部分卡UID丢失原因ReadResponseAsync()超时设为500ms但Power Focus 6000在多卡模式下卡间响应间隔可达600ms。解决动态调整超时——检测到多卡模式时将超时提升至800msprivate int GetResponseTimeout() _isMultiCardMode ? 800 : 500; // _isMultiCardMode由0x0A命令响应置位4.5 现象WinForm程序最小化后读卡事件停止触发原因SerialPort.DataReceived事件在UI线程挂起时被系统暂停Windows消息泵冻结。解决弃用DataReceived改用BeginRead轮询虽牺牲一点性能但100%可靠private void StartPolling() { _port.ReadBufferSize 1024; var buffer new byte[1024]; _port.BeginRead(buffer, 0, buffer.Length, OnReadComplete, buffer); } private void OnReadComplete(IAsyncResult ar) { try { int bytesRead _port.EndRead(ar); if (bytesRead 0) { var data new byte[bytesRead]; Buffer.BlockCopy(ar.AsyncState as byte[], 0, data, 0, bytesRead); ProcessResponse(data); // 解析帧 } } finally { // 立即发起下一轮读取保持监听 var buffer new byte[1024]; _port.BeginRead(buffer, 0, buffer.Length, OnReadComplete, buffer); } }5. 工程落地技巧用C#构建可维护的RFID考勤系统骨架考勤系统是RFID最典型落地场景但直接堆砌读卡逻辑会导致代码腐化。本包提供一套轻量级架构核心是事件驱动 状态机 配置中心让你在3天内搭出可交付原型。5.1 状态机设计从“读卡”到“考勤成功”的七种状态RFID交互不是线性流程而是状态跃迁。我们定义AttendanceStateMachine覆盖所有异常分支状态触发条件下一状态业务动作Idle系统启动WaitingForCard清空缓存准备接收WaitingForCard检测到新UIDAuthenticating记录UID启动认证Authenticating密钥认证成功ReadingData读取员工信息扇区ReadingData读取成功Validating校验员工有效性如在职状态Validating校验通过Recording写入考勤记录到本地DBRecordingDB写入成功Success播放成功音效LED绿灯Success3秒后Idle自动重置准备下一次public class AttendanceStateMachine { private State _currentState State.Idle; public void HandleEvent(RFIDEvent e) { switch (_currentState) { case State.Idle when e.Type EventType.CardDetected: _currentState State.WaitingForCard; OnStateChanged(_currentState); break; case State.WaitingForCard when e.Type EventType.AuthSuccess: _currentState State.Authenticating; // 启动扇区读取... break; // ... 其他状态转移 } } }优势状态转移逻辑集中新增需求如“迟到提醒”只需在Validating状态后插入新状态不破坏原有流程。5.2 配置中心把硬件参数从代码里抠出来Power Focus 6000的波特率、超时值、密钥绝不应硬编码在C#源码中。本包采用JSON配置{ device: { portName: COM3, baudRate: 9600, readTimeoutMs: 800, multiCardMode: true }, mifare: { defaultKeyA: FFFFFFFFFFFF, employeeSector: 1, attendanceSector: 2 }, database: { connectionString: Data Sourceattendance.db } }public class AppConfig { public DeviceConfig Device { get; set; } public MifareConfig Mifare { get; set; } public DatabaseConfig Database { get; set; } public static AppConfig Load() JsonConvert.DeserializeObjectAppConfig( File.ReadAllText(appconfig.json)); }好处产线换读写器改portName和baudRate客户要求换密钥改defaultKeyA无需重新编译运维人员可直接修改。5.3 日志与诊断当现场报“读不了卡”时你该看哪三行日志工业现场最怕黑盒。本包集成结构化日志关键路径打点// 在RFIDCommandExecutor.SendCommandAsync中 _logger.Information(Sending command {CmdCode:X2} with {ParamLength} params to {Port}, cmdCode, parameters?.Length ?? 0, _port.PortName); _logger.Debug(Raw frame: {Frame}, BitConverter.ToString(frame)); // 在ReadResponseAsync中 _logger.Warning(Timeout waiting for response on {Port} after {Timeout}ms, _port.PortName, timeout);现场排查三步法查Information日志确认命令是否发出如Sending command 01...查Debug日志比对发出帧与读写器文档是否一致查Warning日志若高频出现Timeout立即检查USB线缆或更换串口芯片。从那以后我每次部署新设备都强制走一遍appconfig.json校验 日志级别设为Debug 用串口助手抓原始帧对比。这套组合拳下来90%的“读不了卡”问题能在5分钟内定位到物理层还是协议层。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

门诊清洁消毒记录表设计:从填表工具到感控执行中枢

门诊清洁消毒记录表设计:从填表工具到感控执行中枢

简介:本资源是一份专为医疗机构门诊科室设计的标准化清洁与消毒记录表,面向医院感控管理人员、门诊护士长、院感科专员及基层医疗机构消毒操作人员,用于规范落实日常环境消毒流程、规避交叉感染风险并满足院感检查台账要求。文档为单个Word文…

2026/10/10 15:54:38 阅读更多 →
90天从一句话需求到上线App:FDE模式与需求收敛实战

90天从一句话需求到上线App:FDE模式与需求收敛实战

1. 从一句话需求到上线 App 的整体思路拆解1.1 为什么“一句话需求”最容易翻车“帮我做一个能记录每天工作内容、自动生成周报的 App。”这句话听起来简单,但它是我过去几年里见过最容易让项目翻车的需求类型。原因很简单:一句话需求天然缺少边界。它没…

2026/10/10 15:54:38 阅读更多 →
复刻版不等于官方版:跑 VoiceBox 前必看的三类坑

复刻版不等于官方版:跑 VoiceBox 前必看的三类坑

复刻版不等于官方版:跑 VoiceBox 前必看的三类坑 【免费下载链接】voicebox The open-source AI voice studio. Clone, dictate, create. 项目地址: https://gitcode.com/GitHub_Trending/voicebox1/voicebox 如果你的搜索记录里出现过「Meta VoiceBox 复刻」…

2026/10/10 15:54:38 阅读更多 →

最新新闻

博士申请联系导师专用简历:技术对齐型说服文档设计指南

博士申请联系导师专用简历:技术对齐型说服文档设计指南

简介:本资源是一份专为申请考核制博士项目设计的个人简历模板,面向硕士在读或应届毕业、计划主动联系博导的理工科(尤其管理科学与工程、数据科学、计算机应用方向)申请者,解决“如何系统呈现学术潜力与科研匹配度”这…

2026/10/10 17:32:51 阅读更多 →
SSM框架毕设实战:求职网站从数据库设计到答辩全指南

SSM框架毕设实战:求职网站从数据库设计到答辩全指南

1. 为什么"求职网站"是SSM毕设里最稳的选题先聊点实在的。2026届的同学现在启动毕设,时间刚好卡在黄金窗口期——秋招刚结束一轮,春招还没到,论文选题、系统开发、查重降重都能从容完成;拖延到下学期再动手,…

2026/10/10 17:32:51 阅读更多 →
C/C++数组传参详解:从数组退化指针到二维数组列数硬约束

C/C++数组传参详解:从数组退化指针到二维数组列数硬约束

1. 先搞清楚一件事:数组进函数,到底传了什么很多初学者(包括当年的我)第一次接触数组传参时,都默认函数收到的是整个数组的“拷贝”。听上去很合理:int 变量传参就是复制一份整数,float 传参就是…

2026/10/10 17:32:51 阅读更多 →
试用完 VSCode 的 AI 插件,“快失业了“的焦虑刷屏:程序员该慌还是该学?

试用完 VSCode 的 AI 插件,“快失业了“的焦虑刷屏:程序员该慌还是该学?

试用完 VSCode 的 AI 插件,"快失业了"的焦虑刷屏:程序员该慌还是该学? 【免费下载链接】cline Autonomous coding agent as an SDK, IDE extension, or CLI assistant. 项目地址: https://gitcode.com/GitHub_Trending/cl/cline …

2026/10/10 17:32:51 阅读更多 →
需求分析实战:从用例图到顺序图的酒店管理系统建模全流程

需求分析实战:从用例图到顺序图的酒店管理系统建模全流程

简介:软件工程课程中,需求分析是决定后续设计与开发质量的奠基性环节。这份实验报告以酒店管理系统为实际案例,完整呈现从需求概述到模型构建的分析流程,适合软件工程专业学生、课程设计人员以及需要快速掌握UML需求建模方法的开发…

2026/10/10 17:32:50 阅读更多 →
SQLiteSpy:Windows原生SQLite数据库查看与编辑工具

SQLiteSpy:Windows原生SQLite数据库查看与编辑工具

简介:本资源为轻量级SQLite数据库可视化管理工具SQLiteSpy 1.7.9的便携版安装包,面向嵌入式开发、移动应用调试及数据库初学者等技术人群,解决SQLite文件无法直观查看结构与数据、SQL操作依赖命令行等痛点。压缩包共6个文件(906KB…

2026/10/10 17:31:48 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →