⚠ 合约状态:工艺是当前的,代码不是
此堆栈的输出框架是 Remotion + React(
/hyperframes-core)。 这里的运动工艺仍然适用:时间安排、缓动选择、动作的形状、命名规则和蓝图。 代码不适用:示例和适配器是针对已退役的 HTML + 暂停的 GSAP 时间线运行时编写的。阅读时请进行转换:
这里 在 Remotion 中 gsap.fromTo(el, {x:-40}, {x:0, duration:0.5})interpolate(frame, [0, SEC(0.5)], [-40, 0], {…"clamp"})ease: "back.out(1.7)"spring({frame, fps, config:{damping}}),通过肉眼调整window.__timelines[id]处的暂停时间线无;每个值都是 useCurrentFrame()的函数剪辑上的 data-start/data-duration<Sequence from>/durationInFrames,以帧为单位CSS 关键帧或过渡 基于帧的内联 style(CSS 动画不渲染)切勿将本技能中的示例未经修改地粘贴到 Remotion 项目中。
HyperFrames 音频
混音是一组关系,而不是处理器的堆叠。单独听起来很好的两条轨道放在一起可能无法入耳,而解决方法几乎从不是“调低一个”——而是找出它们在争夺什么,然后把它交给需要的那个。这里的每个工具都用于表达这些关系之一。
效果位于元素上,作为 data-fx-chain,预览和渲染运行相同的 Web Audio 图——在实时上下文中运行工作室,在离线上下文中运行引擎,都在它已经驱动的浏览器内部。每个效果只有一个实现,因此你在逐帧预览时听到的就是最终写入的内容。你永远不需要调整两次。
剪辑时间线属于 /hyperframes-core:音视频修剪和源范围使用 data-start、data-duration 和 data-media-start,交叉淡变将不同轨道上的剪辑重叠。本技能负责已放置轨道的淡入/淡出、交叉淡变包络线、轨道增益/轨道音量、音量和效果自动化、闪避/人声雕刻,以及效果链。/media-use 负责源素材、生成和预处理。
常量 data-playback-rate(0.1..5)在匹配的音视频元素使用相同的时间线、源偏移和速率时,对图像和保持音调的声音是渲染安全的。不支持源速度渐变,因为没有速率包络线;请预处理一个派生的同步资源。HyperFrames 不提供自动波形同步或漂移校正。
对于可复制的剪切/交叉淡变/重新定时配方,请使用 /hyperframes-core → references/editing-recipes.md。
三个属性承载所有内容,全部位于音视频元素本身:
| 属性 | 包含的内容 |
|---|---|
data-fx-chain | 效果,按信号顺序 |
data-automation | 此轨道音量或其效果参数的包络线 |
data-fx-carve | 雕刻自身的设置,以便可以重新推导 |
已提供的效果系列包括增益、均衡器(高通、低通、峰值、搁架)、压缩器、限制器、噪声门、饱和、延迟、混响、合唱、移相器和比特率压缩。
每个效果的精确 JSON,以及轨道必须满足的规则:references/attributes.md。
每个效果及其参数、范围和单位:references/fx-registry.md。
如何解决听不到音频文件的问题:references/diagnosis.md。
预设、命名任务和单旋钮配置文件,以及症状到修复表格:references/presets.md — 在手动构建效果链之前请阅读它,因为通常其中一个预设或命名任务已经命名了问题。
如何协同工作
两个创作界面写入这些属性;两个运行时通过相同的构建器读取它们。正是这个共享的中间层确保预览预测渲染。
flowchart TB
voice["语音轨道<br/>媒体文件"]
bed["音乐底垫<br/>媒体文件"]
subgraph AUTHOR["创作——唯一写入属性的地方"]
panel["工作室<br/>人声雕刻控制"]
script["scripts/carve.mjs<br/>检测配对,默认动态"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
panel --> analysis
script --> analysis
end
voice --> analysis
bed --> analysis
subgraph ATTRS["写入底垫元素"]
carveAttr["data-fx-carve<br/>source · strength · dynamic"]
chainAttr["data-fx-chain<br/>peaking xN + gain,标记为 fromCarve"]
autoAttr["data-automation<br/>每个雕刻参数一条轨道"]
end
analysis --> carveAttr
analysis --> chainAttr
analysis --> autoAttr
subgraph SHARED["一个实现,由两者读取"]
build["audioFxGraph.ts · buildFxChain"]
sched["audioFxAutomation.ts · scheduleChainAutomation"]
end
chainAttr --> build
autoAttr --> sched
build --> preview["预览<br/>实时 AudioContext<br/>attachElementFxChain"]
sched --> preview
build --> render["渲染<br/>头无浏览器中的 OfflineAudioContext<br/>applyAudioFxChain"]
sched --> render
preview --> heard["逐帧预览时听到的内容"]
render --> wav["处理后的 WAV<br/>+ chainTailSeconds 以便混音让尾部通过"]
wav --> mix["引擎 · audioMixer<br/>此处音量轨道已烘焙到 PCM 中,不在图中"]
mix --> out["渲染后的混音"]
edit["播放中编辑属性"] -.->|MutationObserver| preview
雕刻自身的设置永远不会在播放时读取——它产生的效果链和轨道才是播放的内容。data-fx-carve 的存在是为了可以在现有雕刻上更改强度,而无需从滤波器中反向推测。
在雕刻的底垫内部,信号首先通过凹陷,然后通过电平匹配,然后是你自己构建的任何内容——这就是为什么你添加的限制器仍然作为最后的限制器:
flowchart LR
src["解码后的底垫"] --> p1["峰值<br/>400 Hz"]
p1 --> p2["峰值<br/>1 kHz"]
p2 --> p3["峰值<br/>1.6 kHz"]
p3 --> g["增益<br/>电平匹配"]
g --> hand["你自己的效果<br/>例如限制器"]
hand --> dest["轨道增益,然后输出"]
l1["轨道 fx.n1.gain"] -.->|"语音在该频段的<br/>电平包络线"| p1
l4["轨道 fx.n4.gain"] -.->|"底垫整体<br/>闪避程度"| g
静态雕刻是同一张图,只有固定值,没有轨道。
首先,找出问题所在
下面的表格从“听起来轰鸣”开始——这假设已经有人听过并指出了这一点。如果你拿到一个文件并被告知“修复它”,但你没有这样的描述,也无法听,那么你必须进行测量。一条规则支配一切:
无法诊断单个未知语音的绝对频谱。 共振峰是 ±10 dB,基频范围在 85–255 Hz,句子结尾下降 5–6 dB。 单独的每一项都会被视为缺陷,而每一项都是说话者的。
因此,请进行比较,并且与同一文件内部的内容进行比较:如果存在,干净的原始音频;否则,使用停顿音——在间隙中可听到的任何内容都是附加的,而间隙的频谱是通道本身,而不是语音。与公开的平均频谱或合成的参考语音进行比较是行不通的:两个说话者之间的差异超过大多数缺陷,而本指南背后的评估中的两个错误答案正是来自这种方法。
当既没有原始音频也没有可用的静音时,静态音调缺陷实际上是欠定的。说明这一点,并提供适合的读数,而不是选择一个并在此基础上构建效果链。
命令、陷阱和已实践配方:references/diagnosis.md。在诊断一个没有人描述过的文件之前,请阅读它。
从症状开始
一旦你知道了频段和类型,就命名音频中的问题。大多数糟糕的音频是以下一两个问题,每个都有现成的答案:
| 听起来像 | 使用 |
|---|---|
| 下面的嗡嗡声或砰声 | rumble-cut,或 80 Hz 的 highpass |
| 轰鸣、胸腔音 | 驯服轰鸣感任务(200 Hz) |
| 沉闷、像隔着一层纸板 | 减少混浊任务(250 Hz) |
| 难以辨认单词 | 增加清晰度任务(3 kHz),或雕刻底垫 |
| 刺耳且令人疲劳 | 柔化刺耳感任务(3.2 kHz) |
| 某些单词比其他单词响得多 | 压缩器上的 均匀度,或均衡电平 |
| 句子之间的环境音 | room-gate |
| 人声和音乐在打架 | 人声雕刻——不是对任何一个应用均衡器 |
| 干燥、听起来像没在录音棚录制 | room-tight 或 room-natural |
| 只是感觉“业余” | voice-clean,这是按顺序的上述四个 |
完整目录、每个预设包含的内容、频段词汇表,以及有意不涵盖的内容(去咝声、降噪、音色匹配):references/presets.md。
先减法后加法,滤波后调电平,电平后调关系,最后调音色和限制器。每个步骤都会改变下一步听到的内容——在高通滤波器之前设置的压缩器会将其时间花费在追逐隆隆声上。
根据问题选择效果系列,而不是根据名称
滤波器(highpass、lowpass、peaking、lowshelf、highshelf)决定一个轨道被允许占据哪些频率。这是两个来源冲突时的第一个工具,因为冲突发生在频段中:底垫和人声都想要 1–3 kHz,从底垫中取出这些频率对底垫的损害远小于将整个音量调低对混音的损害。在人声上使用高通滤波器是解决隆隆声的标准方法;低通滤波器会刻意使声音变暗或模糊。
动态效果(增益、压缩器、限制器、噪声门)决定一个轨道的电平如何随时间变化。压缩器缩小响亮和安静之间的距离,以便安静的部分可以提升。限制器是一个上限——它不会塑造任何东西,它只是保证没有信号超过它。噪声门去除低于阈值的部分,这就是如何静音短语之间的环境音。增益 是一个简单的电平级,当轨道需要让路时,自动化轨道就是用它来控制的。
非线性效果(饱和度、比特率压缩)改变波形的形状,从而增加原本不存在的谐波。当轨道需要个性和力度而不是修正时使用它——但要记住它是生成性的:它使薄弱的源变得更密集,而不是更干净。
时间效果(延迟、混响、合唱、移相器)将轨道放入空间或赋予其宽度。这些效果最容易破坏混音,因为尾部或失调的副本会占据人声需要的空间。将它们用于应该放在其他东西后面的物体上,并使湿声量低于单独听起来正确时的量。
效果链是串行的:每个效果处理前一个效果产生的结果。因此,校正性滤波靠前,特性处理在中间,限制器最后,以便它能够实际作为上限起作用。
人声雕刻
它解决的问题。 人声下的音乐底垫使人声难以听清。本能反应是闪避整个底垫,这有效,但代价是底垫失去了所有存在感——音乐在整个画外音期间变得无力。但人声并不需要整个频谱。它只需要它实际占据的几个频段。雕刻只拿走这些频段,而底垫保留其低频和顶端,因此当人声仍然可理解时,音乐仍然是音乐。
它是一种关系,而不是一个效果。 设置位于底垫上——即被处理的轨道——它们指定要监听的语音,就像侧链压缩器一样:你选择变静的轨道,并指定什么让它变静。绝不要在人声轨道上放置雕刻。 语音对自身进行雕刻是一个错误,而不是微妙的混音选择。
所有语音,而不是其中之一。 sources 是一个列表,因为底垫通常在全序列下运行——解说员、采访回答、第二主持人。它们被求和到底垫自己的时钟上,然后才进行测量(mixCarveSources),因此一次分析涵盖所有语音:频段来自所有存在的演讲,包络线在语音发生的任何地方上升。在底垫播放时从未播放的语音被排除在外;它们无法掩盖它。
一个旋钮。 strength 是 0..1,并推导一切:切割多深、多少个频段、多宽、在可理解性与原始语音能量之间偏向多少、电平可以下降多少、目标低于语音多少。这六个因素在实际混音中一起移动——温和的雕刻是浅切割,频段少,闪避少;强硬的雕刻是深切割,频段多,闪避多——因此它们是一个关系,一次写入,在 carveProfile 中。默认值是 0.25——三个频段的 6 dB 下降,具有 6 dB 的电平余量,可听见但听起来不像坑。在 0.5 时,下降达到 10 dB,此时雕刻开始被当作效果而不是为人声留出空间;高于此值是为了响亮底垫下的安静人声而故意为之的领域。0 仅频谱——一个频段,完全没有电平匹配。
默认进行雕刻。 在叙述下播放的底垫想要雕刻;这不是有时间才做的润色步骤。放置两条轨道,运行下面的命令,聆听。仅当底垫下没有叙述时——音乐视频、标题卡、蒙太奇剪辑到轨道——才跳过它。
它始终跟随语音。 没有静态模式:固定深度会在每个停顿期间削弱底垫,一旦你听到两者,就没有理由动摇……
(原文截断。