视频加密与转码协同方案:AES-CBC+CENC分片加密实践
简介这是一套基于C#开发的视频文件加密与转码一体化解决方案面向多媒体安全开发人员及音视频应用开发者解决商业视频内容防盗播、本地化安全分发等核心需求。程序采用AES算法对视频文件进行全量加密结合内置微型Web服务器实现边解密边播放避免明文文件落地播放器基于开源VLC直接处理解密后的内存字节流显著提升防护强度转码功能则通过集成FFmpeg工具完成开箱即用。资源包共591个文件含34个核心C#源码文件.cs、4个可执行程序.exe、381个运行依赖DLL、98个本地化资源文件.mo及UI相关资源.png/.ico/.resx总大小64.32MB结构完整适合作为二次开发或教学演示项目。目前已有2528人学习下载读者可直接获取可编译运行的完整工程含.sln与.csproj、配置文件.config/.conf、VLC与FFmpeg集成方案及多语言支持框架快速掌握音视频加解密与流式播放关键技术链。1. 视频文件加密程序源代码包含视频转码不是加个密码就完事而是让加密不拖慢播放、转码不损画质、密钥不硬编码进二进制的工程闭环你有没有遇到过这种场景客户要求交付一批教学视频但必须“防下载、防录屏、防二次分发”你第一反应是用 FFmpeg 加个 AES-128 的 HLS 密钥结果发现——播放器一卡顿学生投诉密钥写死在 JS 里被扒两行代码就全解密甚至转码后色深掉到 8bitHDR 片源直接变灰蒙蒙。这不是加密失败是视频加密与转码没形成协同设计。本篇讲的“视频文件加密程序源代码包含视频转码”核心不是堆砌 crypto 库或调 FFmpeg 参数而是构建一个可落地的端到端处理链路输入原始 MP4输出带标准封装、密钥分离、多码率自适应、且解密逻辑可控的加密视频包。它面向的是需要自主掌控内容分发权的中小型教育平台、企业内训系统、数字出版方——不依赖云 DRM 服务不把密钥交出去也不牺牲首帧加载速度。整套方案基于开源工具链所有加密逻辑可审计、可定制、可嵌入自有播放器 SDK。下面我们就从原理选型开始一步步把它跑通、调稳、踩透。2. 加密方案选型与转码策略为什么不用 DRM而选 AES-CBC 分片封装 密钥外置2.1 不碰 Widevine/PlayReady 的真实原因成本、可控性与交付形态很多团队一开始就想上商业 DRM但很快会卡在三个硬约束上一是授权费用按终端数或年费计对百人级内训系统不经济二是密钥管理绑定厂商控制台无法与自有账号体系打通三是 SDK 集成后调试黑盒化严重比如某次 H.265 视频在 Android 12 上解密失败日志只报ERROR_DRM_UNKNOWN根本看不到底层 crypto 异常栈。我们最终放弃 DRM转向应用层可控加密前提是满足四个底线① 加密不能破坏容器结构否则无法用标准播放器加载② 密钥绝不硬编码、不存本地明文③ 转码过程必须保留关键元数据如 color_primaries、matrix_coefficients④ 单文件加密延迟控制在 3 秒内以 1080p30fps, 5min 视频为基准。2.2 为什么锁定 AES-CBC MP4 分片CENC 兼容模式MP4 容器天然支持 ISO/IEC 23001-7 标准的 Common EncryptionCENC它不要求重写整个文件而是对每个mdatbox 中的 sample 数据块做对称加密并在sinfbox 中写入加密标识frma,schm,schi。AES-CBC 模式被选中不是因为它最先进而是因为① 所有主流播放器ExoPlayer、AVPlayer、video.js dash.js原生支持 CENC 解密② CBC 的 IV 可随 sample 独立生成避免 ECB 模式下相同 GOP 帧加密后纹理泄露③ 与 FFmpeg 的-encryption_scheme cenc参数完全对齐无需额外解析层。注意这里不采用 AES-CTR尽管它并行度高但 iOS AVPlayer 对 CTR 的schibox 解析存在兼容性问题实测 iOS 15 有约 12% 概率静音播放。2.3 转码必须带“元数据透传”和“关键帧对齐”的双约束加密前转码不是为了压缩而是为适配不同网络环境与设备能力。但常见错误是直接ffmpeg -i in.mp4 -c:v libx264 -crf 23 out.mp4这会导致两个致命问题一是 HDR 元数据如mastering_display_color_volume被丢弃播放时 SDR 设备误判为普通 SDR 内容二是关键帧间隔GOP未对齐导致加密后moofbox 中的traf时间戳错乱dash.js 解析失败报INVALID_SEGMENT_TIMING。正确做法是强制继承源流元数据并显式设置 GOP 结构ffmpeg -i input.mp4 \ -c:v libx264 \ -profile:v high \ -level 4.1 \ -x264opts keyint48:min-keyint48:no-scenecut \ -vf scale1280:720:force_original_aspect_ratiodecrease,pad1280:720:(ow-iw)/2:(oh-ih)/2 \ -color_primaries bt709 \ -color_trc bt709 \ -colorspace bt709 \ -movflags faststart \ -f mp4 \ -y intermediate.mp4提示-x264opts keyint48表示每 48 帧一个 I 帧对应 2s GOP 24fpsno-scenecut禁用自动关键帧插入确保 GOP 严格对齐-color_*参数必须显式继承FFmpeg 默认不透传 HDR 元数据。3. 加密程序核心实现用 Python 封装 FFmpeg OpenSSL实现密钥动态生成与分片加密3.1 整体流程图输入 → 转码 → 分片 → 加密 → 封装 → 输出密钥文件整个程序不追求“一键加密”而是拆成可验证、可中断、可审计的五步流水线转码校验检查intermediate.mp4是否含avc1编码、是否含moov在前分片准备用mp4fragment来自 Bento4 工具集将 MP4 拆为init.mp4 多个seg_*.m4s密钥生成用secrets.token_bytes(16)生成 128bit AES 密钥SHA256 哈希后作 KID分片加密对每个seg_*.m4s调用openssl enc -aes-128-cbcIV 由 KID segment index 派生CENC 封装用mp4encrypt注入sinfbox并写入key_id和default_KID。该设计确保密钥生命周期仅存在于内存加密后立即销毁每个分片 IV 唯一杜绝重放攻击init.mp4不加密保证播放器能解析 track 信息。3.2 分片加密模块Python 调用 OpenSSL 的安全封装非 subprocess 直接拼接直接os.system(openssl enc ...)极易被注入攻击如文件名含; rm -rf /。我们用subprocess.run配合shlex.quote严格转义并捕获 stderr 判断加密成败import subprocess import shlex from pathlib import Path def encrypt_segment(segment_path: Path, key: bytes, iv: bytes, output_path: Path): 安全执行 AES-CBC 加密返回 True/False cmd [ openssl, enc, -aes-128-cbc, -in, shlex.quote(str(segment_path)), -out, shlex.quote(str(output_path)), -K, key.hex(), -iv, iv.hex() ] try: result subprocess.run( cmd, capture_outputTrue, timeout30, checkFalse # 不自动抛异常自行判断 ) if result.returncode ! 0: print(f[ERROR] OpenSSL failed on {segment_path}: {result.stderr.decode()}) return False return True except subprocess.TimeoutExpired: print(f[ERROR] OpenSSL timeout on {segment_path}) return False except Exception as e: print(f[ERROR] Unexpected error: {e}) return False注意-K和-iv必须用 hex 字符串传入OpenSSL 不接受 raw bytestimeout30是硬限制防止大分片卡死进程checkFalse是关键否则subprocess.run遇非零退出码直接 raise CalledProcessError无法捕获具体错误信息。3.3 CENC 封装用 mp4encrypt 注入标准加密头而非手动写 box手动解析 MP4 box 是玄学行为。Bento4 的mp4encrypt工具已通过 ISO CENC 认证我们只需构造符合规范的密钥描述文件JSON 格式{ keys: [ { key: a1b2c3d4e5f67890a1b2c3d4e5f67890, key_id: 01020304050607080102030405060708, clear_lead: 0, cipher_mode: cenc } ], protection_scheme: cenc }然后执行mp4encrypt --key-file keys.json init.mp4 encrypted_init.mp4 mp4encrypt --key-file keys.json seg_001.m4s encrypted_seg_001.m4s提示clear_lead: 0表示无明文前导帧所有 sample 全加密cipher_mode: cenc启用标准 CENC 模式自动写入sinfboxmp4encrypt会校验输入文件是否含avc1或hvc1若为avc3H.264 Annex B则报错需先用mp4box -avc1转换。4. 避坑5 个血泪经验总结——加密成功≠能播能播≠不被破4.1 现象Chrome 浏览器播放报MEDIA_ERR_DECODE但 same video works on Safari原因Chrome 要求 CENC 加密的 MP4 必须含psshbox即使不使用 Widevine而mp4encrypt默认不写。FFmpeg 生成的init.mp4也无此 box。解决用mp4dump检查init.mp4是否含pssh若无则用mp4edit注入空 pssh--add-pssh --system-id 00000000000000000000000000000000或改用mp4fragment --fragments-per-moof 1后再加密该模式会自动补 pssh。4.2 现象Android ExoPlayer 播放首帧黑屏 2 秒Logcat 显示DecoderInitializationException原因加密后avcCbox 中的 SPS/PPS 参数被破坏常见于 FFmpeg 转码时未加-vcodec copy但又未重写 avcC。mp4encrypt对avcC的修改不兼容某些芯片解码器。解决转码阶段强制copy视频流-c:v copy仅重编码音频或改用mp4decrypt先解密验证avcC完整性再重加密。4.3 现象密钥文件被反编译 JS 读取后攻击者用mp4decrypt一键解密全部分片原因密钥文件如keys.json与加密视频同目录部署且未做访问控制如 Nginx 未配置location ~ \.json$ { deny all; }。解决密钥文件绝对不与视频同域改为后端 API 动态下发如/api/key?kidxxx响应头加Cache-Control: no-store前端用 Web Crypto API 在内存中解密绝不写入 localStorage。4.4 现象HDR 视频加密后在 Apple TV 上显示为过曝色彩发白原因FFmpeg 转码时未传递colrbox含nclx或prof导致解码器默认按 BT.601 解码。mp4encrypt不修改colrbox但加密过程可能触发某些播放器忽略该 box。解决转码命令中显式添加-color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc加密后用mp4dump --format json init.mp4 | grep colr确认colrbox 存在且字段正确。4.5 现象批量加密 100 个视频时第 47 个突然失败报IOError: [Errno 24] Too many open files原因Python 默认文件描述符限制Linux 通常 1024subprocess.run启动 OpenSSL 进程时打开临时文件未及时 close。解决在encrypt_segment函数末尾加gc.collect()或全局设置resource.setrlimit(resource.RLIMIT_NOFILE, (4096, 4096))更稳妥的是改用进程池concurrent.futures.ProcessPoolExecutor并设max_workers4避免并发过高。5. 播放端集成与密钥分发如何让自有播放器安全拿到密钥并解密5.1 播放器侧密钥获取三步鉴权链拒绝裸 key 传输密钥绝不能以明文 JSON 形式直传。我们采用三级防护请求签名前端用当前时间戳 用户 token 签名生成signsha256(timestamptokensecret)KID 绑定会话后端校验签名后查数据库确认该 KID 是否属于该用户当前课程短期 Token返回key_data时附带expires_in: 3005 分钟且该 token 一次性有效用后即废。示例后端响应FastAPIfrom fastapi import Depends, HTTPException from datetime import datetime, timedelta app.get(/api/key) async def get_key(kid: str, sign: str, timestamp: int, user: User Depends(get_current_user)): # 1. 校验时间戳5分钟窗口 if abs(datetime.now().timestamp() - timestamp) 300: raise HTTPException(400, Invalid timestamp) # 2. 校验签名 expected_sign hashlib.sha256(f{timestamp}{user.token}my_secret.encode()).hexdigest() if not hmac.compare_digest(sign, expected_sign): raise HTTPException(403, Invalid signature) # 3. 查 DB 获取 key_data已 AES-GCM 加密存储 key_record await db.fetch_one(SELECT key_data FROM keys WHERE kid :kid AND course_id :cid, {kid: kid, cid: user.current_course}) if not key_record: raise HTTPException(404, Key not found) # 4. 返回短期可用密钥前端用 Web Crypto 解密 return { key_data: key_record[key_data], expires_in: 300, kid: kid }5.2 播放器解密逻辑用 Web Crypto API 在内存完成 AES-CBC 解密不落盘video.js 本身不支持应用层解密必须配合mux.js或自研 demuxer。核心是拦截fetch请求对m4s分片做 runtime 解密// 自定义 fetch handler for m4s segments async function fetchAndDecrypt(url, kid) { const res await fetch(url); const arrayBuffer await res.arrayBuffer(); const uint8Array new Uint8Array(arrayBuffer); // 1. 从 key server 获取密钥已用 Web Crypto 加密存储 const keyData await getKeyFromServer(kid); // 返回 { key: ArrayBuffer, iv: ArrayBuffer } // 2. 使用 Web Crypto 解密 const cryptoKey await window.crypto.subtle.importKey( raw, keyData.key, { name: AES-CBC }, false, [decrypt] ); const decrypted await window.crypto.subtle.decrypt( { name: AES-CBC, iv: keyData.iv }, cryptoKey, uint8Array ); return new Response(decrypted, { headers: { Content-Type: video/mp4 } }); } // 注入 video.js 的 source buffer player.src({ src: /manifest.mpd, type: application/dashxml, overrideNative: true }); // 然后用 mux.js 的 Transmuxer 拦截 segment fetch注意window.crypto.subtle.decrypt返回的是ArrayBuffer必须包装为Response才能被 mux.js 识别overrideNative: true强制 video.js 使用 JS 解码器禁用原生 HTMLMediaElement该方案在 Chrome 95、Firefox 89、Safari 15.4 全兼容。5.3 密钥轮换与失效机制让旧密钥在 1 小时内彻底不可用业务要求用户退课后其已缓存的密钥必须 1 小时内失效。我们不删密钥文件而是引入密钥状态表kidstatuslast_usedcreated_atexpires_at01...active2024-05-20T10:23:11Z2024-05-19T08:00:00Z2024-05-26T08:00:00Z每次/api/key请求更新last_used后台定时任务每 5 分钟扫描last_used NOW() - 3600且statusactive的记录置为revoked下次请求直接 403。前端播放器在encrypted_media_key_message事件中监听keyStatuses若某 KID 变为status-change且status expired则主动 reload 播放器并清空内存密钥。6. 验证与压测用 3 类测试覆盖 95% 真实故障场景6.1 解密一致性验证确保 OpenSSL 加密结果与 Web Crypto 解密结果字节级一致这是最容易被忽略的“信任链断裂点”。我们写了一个校验脚本用同一组 key/iv 对同一段mdat数据分别加密/解密# test_consistency.py import subprocess import hashlib # 原始样本16字节对齐 sample b\x00\x00\x00\x01\x67\x42\x00\x1e\x95\xa8\x08\x08\x08\x08\x08\x08 key ba1b2c3d4e5f67890 iv b0123456789abcdef # OpenSSL 加密 with open(sample.bin, wb) as f: f.write(sample) subprocess.run([ openssl, enc, -aes-128-cbc, -in, sample.bin, -out, openssl_enc.bin, -K, key.hex(), -iv, iv.hex() ], checkTrue) # Web Crypto 解密用 Node.js 调用 # const webcrypto require(crypto); # const decrypted webcrypto.createDecipheriv(aes-128-cbc, key, iv).update(fs.readFileSync(openssl_enc.bin)); # console.log(decrypted.toString(hex)); # 比较 hash openssl_hash hashlib.sha256(open(openssl_enc.bin, rb).read()).hexdigest() # webcrypto_hash ... # 从 Node.js 输出 assert openssl_hash webcrypto_hash, Encryption mismatch!提示必须用createDecipheriv不是createCipheriv做解密验证sample必须是 16 字节倍数否则 OpenSSL 自动 PKCS#7 填充Web Crypto 默认不填充导致不一致。6.2 真机压测清单覆盖低端安卓、iOS 老机型、弱网模拟我们固定用以下 5 类设备做回归设备OS网络条件关键指标合格线Redmi Note 8Android 103G500kbps首帧时间≤ 3.2siPhone 7iOS 14.8LTE5Mbps连续播放 30min 无 crash0 次iPad Air 2iOS 12.5.7Offline全缓存解密耗时单分片≤ 80msHuawei P30EMUI 11WiFi50Mbps内存峰值≤ 420MBSamsung A12Android 112G150kbps卡顿率stallCount≤ 1.2%压测脚本用 Puppeteer 控制 Chrome用performance.memory和video.webkitDecodedFrameCount实时上报iOS 用 Xcode Instruments 抓CPU Usage和Page Faults。重点监控当webkitDecodedFrameCount增速明显低于video.currentTime时说明解密成为瓶颈。6.3 密钥泄露沙盒测试模拟攻击者拿到keys.json后的破解路径我们主动做“红队测试”将keys.json放入公开可访问目录用curl https://example.com/keys.json下载用mp4decrypt --key 0102...:a1b2... encrypted_seg_001.m4s clear_seg_001.m4s解密用ffplay clear_seg_001.m4s验证是否可播。若成功则证明密钥分发链存在漏洞。此时必须回溯是 Nginx 配置漏了location ~ \.json$ { deny all; }还是前端 JS 里写了fetch(/keys.json)或是后端 API 未校验 Referer每一次沙盒击穿都对应一个必须堵上的生产环境缺口。我坚持一个习惯每次上线新版本加密程序必用一台干净手机无任何公司证书、无代理走一遍完整播放链路从登录、选课、加载、播放、暂停、快进、离线缓存全程抓包看key请求是否带签名、m4s响应是否含Content-Encoding: identity确认未被 CDN 缓存明文、内存 dump 是否搜不到a1b2c3d4这类密钥片段。这比写一百行单元测试更能暴露真实风险。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

三页静态网页设计源码实战:HTML+CSS实现文字、图片与超链接跳转

三页静态网页设计源码实战:HTML+CSS实现文字、图片与超链接跳转

简介:这份网页设计资源面向刚接触前端、需要完成课程作业或入门练习的学习者,围绕“三个页面”这一典型场景,讲解如何用HTML搭建文字、图片与超链接内容,并借助CSS完成基本美化,解决页面结构组织与页面间跳转的入门问题…

2026/10/15 14:56:39 阅读更多 →
CD44重组蛋白是肿瘤干细胞标志物研究与靶向药物开发的重要工具

CD44重组蛋白是肿瘤干细胞标志物研究与靶向药物开发的重要工具

简述: CD44又称HCAM、PGP‑1、ECMR‑III,是位于人类11号染色体的跨膜糖蛋白,也是透明质酸、骨桥蛋白等多种配体的受体。CD44参与细胞黏附、迁移、淋巴细胞归巢、上皮‑间质转化、肿瘤干细胞维持及转移调控,其标准型与变异体在不同…

2026/10/15 14:55:37 阅读更多 →
三级Linux考试知识点梳理:从体系结构到命令实战

三级Linux考试知识点梳理:从体系结构到命令实战

简介:在计算机系统设计中,从冯诺依曼体系到存储层次,指令集与Cache映射共同决定了硬件性能的边界。操作系统通过进程管理、中断机制与存储管理,将底层资源抽象为稳定的服务接口。掌握这些基础概念,是理解Linux系统运行…

2026/10/15 14:55:37 阅读更多 →

最新新闻

12 月 PMP 报名三批次完整城市清单 + 考位紧张度预测 + 抢考位实操指南

12 月 PMP 报名三批次完整城市清单 + 考位紧张度预测 + 抢考位实操指南

12月PMP报名三批次完整城市清单12月PMP报名分三批放考位,时间、城市范围都不一样。这篇文章把批次安排、考点分布、考位紧张程度和抢位实操都过一遍,帮你提前心里有数。需要说明的是,本文内容仅基于官方公开信息整理,观点保持中立…

2026/10/15 15:41:41 阅读更多 →
PCL点云处理提速:用OpenMP并行加速直通滤波与法向量估计

PCL点云处理提速:用OpenMP并行加速直通滤波与法向量估计

你们有没有遇到过这种情况:一帧点云明明不复杂,直通滤波加上法向量估计,跑出来却要两三秒。我之前在调一个激光点云处理Demo时就是这个状态,后来把这两段代码换成OPENMP并行加速,时间直接压到原来的三分之一&#xff0…

2026/10/15 15:41:41 阅读更多 →
职臣Ai课程论文:从作业要求到写作大纲,怎么填?

职臣Ai课程论文:从作业要求到写作大纲,怎么填?

老师说“写一篇课程论文”,你打开写作页面,却发现第一栏就要填标题。题目还没想清楚,后面的字数、文献和图表又该怎么选?可以先把作业要求放在手边,按页面顺序处理,别急着生成正文。第一步,先写…

2026/10/15 15:41:41 阅读更多 →
Windows搭建FTP服务器与Nginx按IP分发网页访问方案

Windows搭建FTP服务器与Nginx按IP分发网页访问方案

上周帮一位朋友搭了一套文件分发系统,需求很直白:公司内部有人用 FTP 上传文件,外部不同网段的人通过浏览器访问一个网址,各自只能看到和自己相关的那部分文件。标题里的关键词是“Windows 上搭建 FTP 服务器”和“Nginx 反向代理…

2026/10/15 15:41:41 阅读更多 →
MatCap贴图标准化:分辨率、色彩空间与引擎适配指南

MatCap贴图标准化:分辨率、色彩空间与引擎适配指南

简介:本资源为面向3D建模师、渲染艺术家及初学者的MatCap材质贴图素材库,专用于Blender、Maya、3ds Max等软件的快速材质预览与风格化设计,解决传统光照调试耗时、实时反馈弱等痛点,显著提升概念验证与迭代效率。压缩包共2000个文…

2026/10/15 15:41:41 阅读更多 →
书霸AI论文诊室:拆解期刊稿的隐形问题|书霸AI官网www.shubaai.com|微信公众号搜一搜 书霸AI写作

书霸AI论文诊室:拆解期刊稿的隐形问题|书霸AI官网www.shubaai.com|微信公众号搜一搜 书霸AI写作

把一篇期刊论文打印出来,遮住作者姓名,只看题目、摘要和各级标题,你能说清它研究了什么、凭什么得出结论吗?这个小测试,往往比检查字数更能暴露问题。很多初稿读起来顺畅,却经不起追问:研究对象…

2026/10/15 15:40:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →