Flutter音乐播放器专辑封面:旋转动画、手势与HarmonyOS适配实践
最近在做音乐播放器跨端项目时把目标平台切到了 HarmonyOS 6.0Flutter 侧整体迁移成本比预想低真正花时间打磨的反而是“专辑封面区域”这一块。很多播放器项目容易把封面当作一个静态图片丢进页面就完事但在实际产品里这张封面承担着展示当前曲目、承载播放状态、提供手势入口三层职责是播放器界面里交互密度最高的区域之一。这篇就把我在设计和实现过程中沉淀下来的思路、代码结构、踩过的坑一起整理出来给正在做同类功能的朋友一个参考。1. 为什么专辑封面区域值得单独设计1.1 表面是 UI实际是交互状态的中枢先说说这个模块的定位。音乐播放器的页面结构通常不复杂顶部是返回栏中间是专辑封面下面跟着进度条和三个控制按钮。很多开发者会把注意力放在控件逻辑、音频通信这些“硬核”部分封面区域随便放个Image.network就算完成。但从实际体验看用户盯着播放器页面时视线停留最久的就是封面区域——它不仅是视觉焦点还要承担多种交互单击封面播放/暂停或者切换播放模式双击封面点赞收藏或者呼出歌单列表左右拖动封面切换上一首/下一首长按封面唤起更多操作浮层。也就是说封面区域的“表现力”直接决定了播放器的质感。如果把交互全部散落在页面上用一堆按钮堆叠来实现界面就会显得零散操作也不跟手。因此我在项目开始时就把封面区域拆成一个独立组件承载图片渲染、旋转动画、手势识别、背景氛围这四件事。1.2 HarmonyOS 6.0 与 Flutter 的适配现状这个项目有一个特殊背景底层运行在 HarmonyOS 6.0 设备上应用外壳是 Flutter。HarmonyOS 对 Flutter 的兼容性目前已经有官方适配方案但细节上不同于 Android 或 iOS主要体现在三点安全区避让规则不同特别是底部导航条和顶部状态栏的高度获取系统返回手势与页面内水平拖动手势的冲突概率更高部分 HarmonyOS 设备对 GPU 合成有限制过度复杂的模糊效果需要做降级处理。这些差异在做封面区域时会直接转化为布局参数、手势竞争处理、视觉效果裁剪三类问题。后面我会分别展开讲。2. 布局设计撑起一个“会呼吸”的封面区域2.1 尺寸体系与屏幕适配封面区域的第一步是定尺寸。我在设计稿阶段就定了一个原则封面区域占可用高度的比例需要随屏幕变化而不是固定写死一个值。常见的封面色块逻辑有三种固定边长比如 320×320简单但小屏手机和大屏平板差距巨大按屏幕宽度比例宽度 × 0.75 左右适合竖屏为主的手持设备按可用高度比例结合状态栏、控制区高度做动态计算最灵活。这个项目最终采用了“宽度比例 高度上限”的组合方案。核心逻辑是在 LayoutBuilder 里读取父级约束计算coverSize min(maxWidth * 0.72, maxHeight * 0.55)。这样在窄屏手机上封面占视觉主导到了平板或折叠屏上也不会无限放大始终为歌词区和控制区留出合理空间。LayoutBuilder( builder: (context, constraints) { final maxWidth constraints.maxWidth; final maxHeight constraints.maxHeight; final coverSize math.min(maxWidth * 0.72, maxHeight * 0.55); return _buildCoverContent(context, coverSize); }, )盒子模型上封面本身我用了 Stack 嵌套底层是模糊放大的背景中间是唱片状旋转封面上层叠加渐变遮罩和手势热区。这样三个层互不干扰后续替换视觉效果也不需要动结构。2.2 背景氛围的处理逻辑大多数播放器的封面区域左边是封面图右边留白给歌词或菜单。我这里做成了整块区域都被封面“浸染”的全沉浸式设计背景取封面图的主题色整体模糊后铺满区域。这个逻辑的好处是每次切歌时背景颜色会自然跟随封面变化从视觉上给用户一种“播放器跟着音乐在切换”的感觉。背景层实现时的关键点是不能让模糊后的图喧宾夺主。我会对背景图做三遍处理先缩略到 32×32 再放大减少 GPU 压力叠加一个 45% 黑色半透明层再在顶部加一层从透明到近黑的渐变。这样无论封面原图亮暗前景的专辑信息文字都能保证可读性。ImageFiltered( imageFilter: ImageFilter.blur(sigmaX: 48, sigmaY: 48), child: Image.memory( _blurredCoverBytes, fit: BoxFit.cover, color: Colors.black.withOpacity(0.45), colorBlendMode: BlendMode.darken, ), )这里有个小技巧ImageFiltered不适合对高清大图直接做模糊很耗性能。我会在拿到封面数据后先裁剪出一张低分辨率副本再用ImageFiltered处理实测重绘开销降低 70% 以上。3. 封面主体旋转唱片的动画实现细节3.1 Rotation 动画与状态解耦封面主体我做成了“旋转唱片”效果这是音乐播放器最常见的封面形态。设计思路是把封面放进一个圆形容器中心穿一个唱片孔外圈加一点唱片纹理整体以恒定的角速度旋转。旋转本身不复杂关键是旋转速度要与播放状态联动播放中匀速旋转暂停时长按状态保持在当前角度切歌时重置角度并做缩放过渡。我这里的实现方式是让AnimationController只管旋转不直接依赖播放器的isPlaying状态而是监听音频播放器回调来启停动画。这避免了一个常见问题UI 层的旋转动画和音频层的播放状态失去同步导致用户看到封面在转但声音没播或者相反。class CoverRotateController extends StatefulWidget { final bool isPlaying; final Widget coverWidget; // ... } class _CoverRotateControllerState extends StateCoverRotateController with SingleTickerProviderStateMixin { late final AnimationController _rotationController; override void initState() { super.initState(); _rotationController AnimationController( vsync: this, duration: const Duration(seconds: 24), )..forward(); } override void didUpdateWidget(covariant CoverRotateController oldWidget) { super.didUpdateWidget(oldWidget); if (widget.isPlaying !oldWidget.isPlaying) { _rotationController.repeat(); } else if (!widget.isPlaying oldWidget.isPlaying) { _rotationController.stop(); } } // ... }转速上我试了几个值每秒旋转 15° 左右视觉最舒服。太快会让人头晕太慢会让人觉得动画“卡住了”。24 秒转一圈是我实测下来比较均衡的数值。另外从暂停恢复播放时我用CurvedAnimation加了 300ms 的缓出避免封面突然从静止“跳”到高速旋转这个细节很影响流畅感的一致性。3.2 唱片纹理与明暗层次纯圆形封面旋转时容易显得单薄特别是没有专辑图集边缘修饰的情况下。我在封面下方叠了一层唱片纹理外圈半透明黑色圆环、中心高光点、几圈淡淡的同心圆凹槽纹理。这些都用CustomPainter绘制不引入额外图片资源。class VinylTexturePainter extends CustomPainter { override void paint(Canvas canvas, Size size) { final center Offset(size.width / 2, size.height / 2); final radius size.width / 2; // 外圈描边 final outerRing Paint() ..style PaintingStyle.stroke ..strokeWidth radius * 0.06 ..color Colors.black.withOpacity(0.3); canvas.drawCircle(center, radius - 4, outerRing); // 同心圆凹槽 final groove Paint() ..style PaintingStyle.stroke ..strokeWidth 1 ..color Colors.white.withOpacity(0.12); for (var i 3; i 5; i) { canvas.drawCircle(center, radius - radius * i / 6, groove); } // 中心高光 final highlight Paint()..color Colors.white.withOpacity(0.9); canvas.drawCircle(center, radius * 0.14, highlight); } override bool shouldRepaint(covariant CustomPainter oldDelegate) false; }纹理层通过Transform.rotate与封面叠在一个旋转容器里保证整体旋转同步不会出现封面在转纹理不转的割裂感。封面主体的阴影我也没直接用默认BoxShadow而是画在Stack里的一层半透明黑色圆形渐变上效果更柔和。4. 手势交互让封面区域跟手又不误触4.1 单击、双击与长按的竞争处理封面区域的交互里,手势识别是争议最多的地方。单击播放/暂停、双击收藏、长按呼出菜单三件事在 Flutter 的 gesture arena 里天然就是竞争的。很多刚接触 Flutter 的开发者会同时挂GestureDetector的onTap、onDoubleTap、onLongPress然后发现单击总是要等 300ms 才能触发体验很肉。这里需要理解 Flutter 手势竞技场的机制onTap在双击事件可能存在时必须等待确认是否是一次双击而非单击。解决思路有两种一是接受系统延迟调整 UI 反馈来掩盖等待感二是用RawGestureDetector自己实现事件裁决。我选的是第一种因为播放器场景下单击的 300ms 延迟并不致命且自研手势裁决容易引入边缘 bug。实操上我会让单击的回调里加一个“按压变色”的即时视觉反馈按下瞬间封面中心会出现一个半透明的圆形涟漪松开时如果判定为单击涟漪消失播放状态切换。这样用户在等待双击判定时依然能感觉到封面是“有生命”的不会觉得界面卡顿。4.2 水平拖动与页面返回手势的冲突切歌手势做的是左右拖动封面超过阈值后触发这是封面区最有“物理感”的交互。但在 HarmonyOS 上系统返回手势是屏幕左缘或右缘的水平滑动如果封面区靠近屏幕边缘两套手势会同时识别。我采用的方案是分区域处理最外层水平滑动留给系统返回封面本体上再做一层自己的拖动。封面拖动的识别只响应“起始点在封面内部”的拖动而且当拖动位移超过 30px 之后立刻调用GestureDisposition.accepted抢占事件不把事件交给外层导航。这里用GestureDetector配onHorizontalDragStart和onHorizontalDragUpdate即可。GestureDetector( onHorizontalDragStart: (details) { _dragStartX details.localPosition.dx; }, onHorizontalDragUpdate: (details) { setState(() { _dragOffset details.localPosition.dx - _dragStartX; }); if (_dragOffset.abs() 30) { _acceptDrag true; } }, onHorizontalDragEnd: (details) { if (_acceptDrag _dragOffset.abs() 120) { widget.onSwitchSong(_dragOffset 0 ? -1 : 1); } else { // 回弹动画 } _acceptDrag false; _dragOffset 0; }, child: _buildCover(), )拖动过程中我让封面跟随手指水平位移同时叠加一个与位移量成正比的旋转角度和一点缩放制造“抓着封面翻过去”的氛围。位移超过阈值松手时封面飞出屏幕边缘然后新封面从另一侧滑入未超过阈值松手时封面弹性回弹。手指离开后用 350ms 的Curves.easeOutBack做回弹真实感很强。5. 性能优化封面区域最容易忽略的三个瓶颈5.1 图片解码与缓存治理音乐播放器是图片切换非常频繁的应用几乎每切换一首歌就要加载一次新封面。Flutter 默认的Image.network自带内存缓存但在 HarmonyOS 上直接用会有两个问题一是部分设备网络图片缓存磁盘写入失败率高二是大尺寸封面解码后驻留内存不及时释放导致连续切歌几十次后内存暴涨。我在这个项目里做了两层处理。第一层是引入了统一的图片加载入口内部封装ImageProvider的获取逻辑先用内存 Key 查缓存没有再走网络第二层是强制将网络图经过ResizeImage约束到页面实际需要的尺寸比如页面最多显示 720px 的封面我就不解码超过这个精度的原图。Image( image: ResizeImage( NetworkImage(coverUrl), width: 720, height: 720, ), )这里一个经验是不要对封面使用CacheWidth和CacheHeight之外的解码限制参数因为它们只影响显示尺寸不影响解码精度。若要真正确控解码像素ResizeImage是更可靠的方式。5.2 模糊背景的低频更新策略封面区域的背景模糊图如果每次播放状态变化都重新生成会带来明显的卡顿。我在进入页面的瞬间生成一次模糊图之后只有切歌时才重新生成。暂停/播放切换、拖动进度条这些高频操作不会触发生成逻辑。生成模糊图的异步过程用的是compute把图片缩放模糊放到 isolate 里执行避免 UI 线程阻塞。实现上我封装了一个CoverVisualCache内部维护两个 key一当前曲目 URL、二模糊版本号。只有当两者都变化时才重新跑一次模糊流程。这样切回曾经播放过的歌曲时直接命中旧的缓存完全不需要重新计算切换动画也更干脆。5.3 减少不必要的 rebuild封面区域涉及动画setState的调用频率非常高。如果整个封面页都包在一个大 StatefulWidget 里每次旋转帧回调都会重建整棵组件树严重的话会掉帧。我的做法是把封面区域拆成三个独立组件背景层低频更新、唱片区动画区域、控制信息层文字更新。各组件通过ValueListenableBuilder或StreamBuilder订阅各自关心的数据源。AnimationController的每一帧只重建唱片区背景层和控制区不受影响。这样即使旋转动画跑满 60fps页面整体的 widget 重建范围也控制在了非常小的范围内。性能工具里可以明显看到FPS 稳定在 55~60CPU 占用也没有异常飙升。6. HarmonyOS 6.0 下的特殊适配经验6.1 安全区域与避让HarmonyOS 6.0 在全面屏手势上有个特点底部导航指示条区域在横竖屏切换时占用的高度不一致如果直接用 Flutter 的MediaQuery.padding.bottom在部分设备上拿到的是0导致控制按钮被遮挡。我的处理方案是通过ViewPadding而不是padding来读取底部安全区。另外在页面初始化时主动向平台层请求一次真实安全区高度用MethodChannel调用系统接口避免纯 Flutter 侧在某些国产设备上拿到失效数据。final bottomPadding MediaQuery.of(context).viewPadding.bottom;有一点要提醒HarmonyOS 不同版本的 API 返回格式不完全一致有的返回double有的返回字符串。稳妥起见我在 MethodChannel 端统一做了一次类型转换保证 Flutter 侧拿到的永远是 double。6.2 水平手势与系统导航的手感权衡之前提到左缘滑动手势冲突实际适配中我还发现HarmonyOS 的侧滑返回区域宽度比 Android 原生更宽在部分设备上会占到屏幕宽度的 24% 左右。也就是说即使手势起点在封面内也可能被系统抢先判定为返回。为了不牺牲切歌拖动手感我做了一个折中封面区域不铺满整块宽度左右各留出 40px 的安全带让系统手势区始终优先。这样会稍微缩小封面可视面积但换来的是两个手势不打架用户操作的确定性更高。7. 切歌动画的完整视觉链条7.1 旧封面退场与新封面入场切歌动画我做了两个阶段。第一阶段当前封面加速旋转同时整体向水平方向偏移并缩小透明度降至 0整个过程 220ms第二阶段新封面带有 20ms 延迟从对侧滑入回弹到正常位置同时背景模糊图从旧图过渡到新图。两个阶段合起来不到 400ms但视觉上的“换歌”感受非常明显。为了让旧封面旋转加速和新封面入场不突兀我使用了一个AnimationController负责整条时间线而不是为每个阶段单独开 controller。这样过渡时间可以精确控制。切换中如果用户再次快速切歌我会controller.forward(from: 0)重新开始旧动画不会产生残余状态。7.2 封面进出时的歌词联动封面区域切歌时右侧或下方的歌词首行也会同步刷新。这里有个细节如果歌词晚于封面动画 100ms 再切换观感更自然像是“封面先带出歌曲信息”的感觉。我直接用了一个 100ms 延迟的定时器来刷新下方歌词文本。这个数值不要加大超过 200ms 用户会明显觉得更新卡顿。8. 实践中的额外提醒8.1 数据缺失时的兜底实际项目中经常遇到歌曲本身没有封面图的场景。这时候如果直接让Image.network加载空地址会抛异常封面区域直接白屏。我在封面数据源加了一个兜底链网络图加载失败时依次尝试缩略图、本地占位图、纯色渐变。最后兜底的大色块也要用当前歌曲色相生成而不是系统默认紫色这样界面颜色不会因为缺图而显得突兀。8.2 拖动手势阈值要适配屏幕切歌手势阈值我最初写死 120px。后来发现折叠屏或平板上用户从中间起手拖动 120px 的距离比例很小容易误触而在小屏手机上 120px 可能又太“远”。适配方案是把阈值改成相对于封面尺寸的比例也就是coverSize * 0.18。这样任何屏幕上手感一致测试体验明显提升。8.3 封面纹理不要过于精致我最初给唱片纹理加了非常细致的细节包括 12 条同心圆、外圈高光、阴影内衬。绘制效果确实好看但在低端 HarmonyOS 设备上CustomPainter的重绘开销会让旋转动画掉到 40fps 左右。后面把同心圆减到 5 条、去掉逐帧重绘的部分动画恢复满帧。这件事给我的教训是视觉细节要为性能让步特别是跟动画绑定在一起的静态元素不要让它们在每一帧都参与重绘。9. 个人实操后的最终建议封面区域看着简单实际做完一遍后我对这类功能模块的建议顺序是这样先定交互语义再拆组件边界最后才动手写旋转动画。很多项目是先做动画再加手势结果手势冲突、性能问题全堆在后期返工。另一点建议是HarmonyOS 上的表现要尽早用真机验证。模拟器里模糊效果好、手势顺滑但真实设备上安全区、GPU 合成、侧滑手势这些“环境差异”影响很大。以我的经验封面区域在真机上做一轮完整切歌滑动测试能发现至少两三个在开发环境完全暴露不出来的问题。如果你正在做的播放器也有封面区域不妨先挑一个最小闭环做出来一张图、一个旋转动画、一个拖动切歌就这三样。先把手势、动画、性能这三角关系理顺再往上面叠歌词、收藏、推荐歌单这些功能整个模块的稳定度会高很多。

相关新闻

免费解锁 Wand(WeMod) 的 Pro 功能与手机远程面板:Wand-Enhancer 从构建到打补丁完整教程

免费解锁 Wand(WeMod) 的 Pro 功能与手机远程面板:Wand-Enhancer 从构建到打补丁完整教程

免费解锁 Wand(WeMod) 的 Pro 功能与手机远程面板:Wand-Enhancer 从构建到打补丁完整教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer …

2026/10/18 4:44:34 阅读更多 →
python项目管理

python项目管理

一、中医学习工具 1.项目名称:TCM 2.定稿时间:2026-09-22 3.定搞文件:t59.py 4.开发历程:中医辩证窗口实现 - DeepSeek 5.项目文件: 开发文件夹:D:\My Program\HaiSuan\ChinaYixue备份文件:D:\海算档案\01知识产…

2026/10/18 4:44:34 阅读更多 →
RTSP客户端源码拆解:状态机、RTP/RTCP与音画同步机制

RTSP客户端源码拆解:状态机、RTP/RTCP与音画同步机制

简介:这是一份面向C/C开发者的RTSP客户端源码与测试例程包,基于标准RTSP协议实现,可应用于IP监控、在线教育、直播等领域,用于测试和验证服务器交互能力,适合需要学习协议控制、搭建客户端或调试服务器的开发者。资源共…

2026/10/18 4:44:34 阅读更多 →

最新新闻

国庆AI行业盘点:模型更新、开源生态与智能体落地加速

国庆AI行业盘点:模型更新、开源生态与智能体落地加速

国庆长假这两天,AI圈跟过年似的。10月1日到10月8日,前后八天,不断有模型更新、开源仓库爆点、智能体应用密集落地。作为一个长期跟踪这条赛道的人,我几乎每天都要刷好几遍测试榜单和社区讨论串,很多信息还没来得及沉淀…

2026/10/18 5:37:42 阅读更多 →
程序员必备20个网站:技术阅读、刷题、接单与效率工具盘点

程序员必备20个网站:技术阅读、刷题、接单与效率工具盘点

程序员必备网站这个老话题,几乎每隔几个月就会被重新拿出来聊一轮。技术、接单、刷题这三类网站,每个开发者的收藏夹里都躺着不止一个,但真到要用的时候,很多人会发现:收藏了 300 个网站,能稳定打开、准时解…

2026/10/18 5:37:42 阅读更多 →
全大写提示词触发AI风控?解析Claude互审封禁真相与安全写法

全大写提示词触发AI风控?解析Claude互审封禁真相与安全写法

有意思。“让Claude管Claude”本身没问题,问题是这句提示词是用全大写敲出来的。我是在一个技术讨论群里看到这件事的:某人做了个自动化流程,让一个Claude会话去审核另一个Claude会话生成的文案,这本来是个很常见的质检思路&#…

2026/10/18 5:37:42 阅读更多 →
Image GPS Editor实战:照片GPS数据的读取、修改与批量处理

Image GPS Editor实战:照片GPS数据的读取、修改与批量处理

前阵子帮朋友整理一趟长途自驾的素材,几百张照片导进电脑,结果发现相机里明明开了GPS记录,出来的照片却有一大半坐标信息是空的。另一批用手机拍的照片倒是带位置,但其中有几张因为当时在船上漂着,定位偏到了海里。用看…

2026/10/18 5:37:42 阅读更多 →
变量之路:理清编译与链接中的符号、地址与重定位机制

变量之路:理清编译与链接中的符号、地址与重定位机制

先问一个问题:你在 IDE 里写了int counter 0;,点一下运行按钮,程序跑起来了。可是那个叫counter的变量,它的地址到底是谁给它的?它为什么能从一个名字变成一个真实存在于内存里的地址?我在带新人的时候发现…

2026/10/18 5:37:42 阅读更多 →
律所案件管理系统设计与落地:角色权限、流程引擎与文书协同实践

律所案件管理系统设计与落地:角色权限、流程引擎与文书协同实践

1. 这个系统到底在解决什么问题做律师的朋友应该都有过这种体验:一个案子从收到材料到最终归档,中间要经过立案、排期、取证、文书起草、审核、盖章、送达、开庭、归档这么一串流程。传统做法是什么?微信群接龙、Excel表格、共享文件夹、Outl…

2026/10/18 5:36:42 阅读更多 →

日新闻

基于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 阅读更多 →

周新闻

基于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/16 14:23:36 阅读更多 →