ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Remotion 视频标注实战:3 步用框选、箭头与脉动高亮引导观众视线

Remotion 视频标注实战:3 步用框选、箭头与脉动高亮引导观众视线 Remotion 视频标注实战3 步用框选、箭头与脉动高亮引导观众视线【免费下载链接】remotion Make videos programmatically with React项目地址: https://gitcode.com/GitHub_Trending/re/remotion录制屏幕教程时最难的不是录下来而是让观众的视线落在关键操作上。Remotion 的视频标注思路很直接把标注写成 React 组件用形状库框出重点区域让箭头滑入画面再给高亮加上脉动节奏。下面用三步搭出来。用 Rect 和 Circle 框住重点区域让重点跳出来最朴素的办法是在画面上叠一层半透明形状。Remotion 形状组件remotion/shapes直接提供了一组现成的 SVG 形状不用自己拼路径Rect用width/height/cornerRadius定义矩形fill设空、只给stroke就得到空心框Circle用radius定义圆适合压住一个按钮或头像位置由x/y决定改数字即移动换高亮颜色只需要改fill或stroke一个属性全部形状组件的源码在 packages/shapes/src/components/需要时可以直接看实现下面这个最小组合解决框住一块区域 压住一个按钮的问题import {AbsoluteFill} from remotion; import {Circle, Rect} from remotion/shapes; export const HighlightZone () ( AbsoluteFill {/* 空心框圈住操作区域 */} Rect x{120} y{200} width{640} height{320} cornerRadius{16} fillnone stroke#2b6ef2 strokeWidth{6} / {/* 实心圆盖住待点击的按钮 */} Circle x{820} y{560} radius{46} fillrgba(255,193,7,0.35) stroke#ffc107 strokeWidth{4} / /AbsoluteFill );用 Arrow 滑入画面完成视线交接框住了区域箭头怎么引过来形状库里其实有现成的Arrow组件四个方向任选不需要手写折线路径direction控制朝向left/right/up/downlength/headWidth/shaftWidth控制粗细比例cornerRadius让箭头转角变圆润高码率渲染下不会显得生硬想让它滑进来用interpolate把帧号映射成位移——interpolate就是帧 12 到 36 对应进度 0 到 1这样的线性换算Remotion 箭头标注的动态部分基本都靠它下面这段解决箭头在第 12 帧开始、第 36 帧滑到位的问题import {useCurrentFrame, interpolate, Easing} from remotion; import {Arrow} from remotion/shapes; export const GuideArrow () { const frame useCurrentFrame(); // 渲染时返回当前帧号 const slide interpolate(frame, [12, 36], [0, 1], { easing: Easing.out(Easing.cubic), extrapolateRight: clamp, }); return ( Arrow x{760 - slide * 120} y{520} directionleft length{220} headWidth{110} headLength{90} shaftWidth{40} cornerRadius{10} fill#e5484d / ); };useCurrentFrame()是 Remotion 的动画入口组件每次渲染都能拿到现在是第几帧所有随时间变化的标注都从它出发。让标注随时间脉动或沿路径走静止的高亮大约 0.5 秒就会被观众视而不见加上节奏感才能持续吸住视线脉动最简单的做法是用正弦波驱动radius让高亮圆呼吸需要标注沿贝塞尔曲线巡航时packages/paths/ 里的getPointAtLength()能按长度取曲线上任意一点坐标逐帧求位置即可更多缓动与变换函数见 packages/animation-utils/标注动画视频里常用的缩放 位移组合都能拼出来下面这个片段解决高亮圆如何呼吸的问题import {useCurrentFrame} from remotion; import {Circle} from remotion/shapes; export const PulsingDot ({x, y}: {x: number; y: number}) { const frame useCurrentFrame(); // 半径在 30 到 46 之间往复形成呼吸感脉动 const radius 38 8 * Math.sin(frame / 5); return ( Circle x{x} y{y} radius{radius} fillrgba(16,185,129,0.3) stroke#10b981 strokeWidth{5} / ); };把三者合成一个完整标注片段真实教程里的一次标注 区域框 箭头 脉动点全部由同一个帧号驱动出场时机用spring()统一控制spring()生成带回弹的动画曲线标注弹进画面比硬切柔和得多把整层标注放进一个组件改一处坐标就能对齐到录屏里的任意位置想让箭头比框晚半拍出现给单个元素套一层Sequence延迟即可下面这个片段解决一个完整标注层如何一次成型的问题import {AbsoluteFill, useCurrentFrame, spring} from remotion; import {Arrow, Circle, Rect} from remotion/shapes; export const TutorialMarks () { const frame useCurrentFrame(); // 弹簧动画让整层标注弹进画面 const appear spring({frame, fps: 30}); return ( AbsoluteFill style{{opacity: appear}} Rect x{80} y{140} width{720} height{360} cornerRadius{18} fillrgba(43,110,242,0.08) stroke#2b6ef2 strokeWidth{4} / Circle x{520} y{320} radius{44} fillrgba(255,193,7,0.35) stroke#ffc107 strokeWidth{4} / Arrow x{700} y{300} directionleft length{200} headWidth{100} shaftWidth{36} fill#e5484d / /AbsoluteFill ); };避坑与性能调优⏱坐标绑定分辨率所有x/y都是按 1920×1080 硬写的换成竖屏就要整体重算。建议把标注坐标参数化或从 composition 尺寸推导别在每帧里造新对象静态标注的常量和子组件提到组件外或用useMemo缓存减少不必要的重新计算透明层叠加会糊三层rgba高亮叠在一起颜色会脏同一区域的高亮保持在两层以内标注和视频分开渲染标注层独立成一个 composition最后合成进主视频标注改色、调位都不必重渲整个片段下一步Star、Triangle、Heart 等更多形状组件都在 packages/shapes/src/components/配合 packages/animation-utils/ 的缓动函数可以拼出更复杂的标注动画完整 API 文档见 packages/docs/。把本文最后那段标注片段拷进你的下一个视频项目改几个坐标就能用。【免费下载链接】remotion Make videos programmatically with React项目地址: https://gitcode.com/GitHub_Trending/re/remotion创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表