简介:BeatEdit Pr 2.1是一款专为Adobe Premiere Pro设计的智能音乐节拍编辑插件,面向视频剪辑师、自媒体创作者与节奏卡点需求较高的后期人员,可自动检测音乐节拍并在时间线上生成节拍标记,大幅减少手动对齐音画节奏的时间,对MV混剪、宣传片与短视频制作尤其适用。压缩包共391个文件、约6.77MB,以js、json、md等脚本、配置与说明文档为主,另含png/svg界面图标、wav示例音频及可执行安装程序,解压后即可安装使用。新版在节拍检测算法、音频格式兼容性、界面操作与自定义参数等方面均有优化,并修复了已知稳定性问题,降低了多轨项目中手动调整节奏的负担。目前已有1743人浏览学习,包内丰富的配置说明与示例音频可帮助用户快速上手并理解节拍标记工作流;安装后即可在Premiere Pro中导入音乐、生成节拍标记,实现剪辑与音乐节奏的精准同步。
1. 用 BeatEdit 2.1 之前先想清楚:它到底帮你省了哪几步
做卡点视频、运动剪辑或者混剪,最耗时间的不是拉节奏,而是数拍子。你一边听歌一边按M键打标记,打完发现高潮段落提前了半拍,又全选往右拖一帧。PR BeatEdit 就是来解决这个问题的:它先把音频的 BPM 和节拍位置算出来,然后在时间线上自动生成标记,让剪辑点能吸附到这些标记上。2.1 版本在这条链路上做了不少收敛:分析速度更快、标记密度可控,还能把节拍信息用在字幕卡点或者转场上。适合那些不想再手动打点、又需要精确对齐音乐的剪辑师和编导。但装上不等于用对,这篇笔记会把原理、安装、操作和常见坑都过一遍,让你拿到手就能用,而不是被它牵着走。
2. BeatEdit 2.1 节拍检测原理:BPM、瞬态与标记生成逻辑
很多人装上 BeatEdit 2.1 后直接点“Analyze”,看到满屏标记就觉得已经会用了。但一旦音乐换成爵士、布鲁斯或者有变速的现场音乐,标记就开始乱跳。这时候回头补一下检测原理,比瞎调参数有用得多。
2.1 瞬态提取与节拍追踪:算法怎么找重拍
BeatEdit 的检测流程可以拆成两步:先做瞬态提取,再做节拍追踪。瞬态就是音频里能量突然爆发的位置,比如鼓点、贝斯拨弦、镲片敲击。它会把音频切成 20ms 左右的重叠帧,计算每一帧的频谱通量,也就是前后帧频谱差异的幅度。差异大的帧被标为瞬态候选点。2.1 版本改进了频谱通量算法,对低频鼓点的权重更高,所以电子乐里那种“咚、咚、咚”的底鼓能被识别得比 1.x 更准。
瞬态提取完,第二步是节拍追踪。算法会假设节拍间隔大致稳定,先估计一个 BPM 候选范围,然后用动态规划在所有瞬态点里找一条“最像节拍链”的路径。这条路径上的点就是最终的节拍标记。这里有个关键参数叫“灵敏度”,它控制的是瞬态提取的阈值。灵敏度调高,更多弱拍会被识别成候选点;调低,则只保留明显的强拍。但灵敏度不是越高越好。太高会让节拍追踪被密集的瞬态干扰,动态规划容易选错路径,导致标记忽快忽慢。
我在实际项目里一般这样设:先手动数一下音频前 15 秒的重拍数,估算 BPM 范围,再填进去。比如一段 House 音乐我数到约 128,那就把 BPM 范围设成 120-140。范围越窄,动态规划的搜索空间越小,输出的节拍链越稳。如果音频有渐快渐慢,比如古典现场,2.1 里可以开启“BPM 变化”选项,但那样会牺牲一部分稳定性,建议只在明确变速的片段用。
检测完成后,BeatEdit 会把标记写到 PR 时间线上。如果你用的不是 PR,而是别的剪辑软件,可以先把检测结果导出成 CSV 或标记数据。我这里有一段用 Python 读取 CSV 做标记间隔分析的脚本,用来验证检测结果是否均匀:
import csv with open('beat_marks.csv') as f: rows = list(csv.reader(f)) times = [float(r[0]) for r in rows[1:]] # 第一列是秒 intervals = [round(times[i+1] - times[i], 3) for i in range(len(times)-1)] print('平均间隔:', sum(intervals)/len(intervals)) print('最大偏差:', max(intervals) - min(intervals))这个脚本读的是 PR 导出的标记 CSV,第一列为时间(秒)。平均间隔应该等于 60/BPM,最大偏差越小说明检测越稳定。如果偏差超过 50ms,建议回头调灵敏度或 BPM 范围。注意,PR 导出的 CSV 可能带列标题,具体列位置以实际导出为准,我这里用的是常见的格式。
参数说明:20ms 左右的重叠帧是很多音频分析库的默认设置,BeatEdit 内部不一定正好是 20ms,但概念类似。BPM 范围直接影响动态规划的搜索区间,填得准确比调灵敏度更有效。
2.2 标记密度与时间线对齐:为什么不是每个节拍都要落点
很多用户有一个错觉:标记越多越好。实际上在剪辑时,画面切换点往往落在重拍(每小节第一拍)上,而不是每个八分音符都切。BeatEdit 2.1 默认只在检测到的“节拍”上落点,但如果你把“每 N 拍”设成 1,那就是每个拍子都有标记。对于 120BPM 的音乐,每分钟 120 个标记,时间线密密麻麻,剪辑时反而会因为磁性吸附太强而操作困难。
我的习惯是:根据镜头数量决定标记密度。如果是快速混剪,每两个拍子放一个标记;如果是卡点视频,每个重拍拍放一个。重拍和普通拍的区别可以靠音频的响度包络判断,通常第一个拍子低频会更重。在 2.1 面板里,这个参数叫“标记间隔”,单位是拍。设成 2 就是每两拍一个标记,设成 1 就是每拍一个。
另一个容易被忽略的是“偏移量”。真实剪辑环境里,音频播放通过声卡和监听音箱会有延迟,PR 内部渲染也会引入一定的帧偏移。如果标记听起来比音乐快,说明标记时间戳整体偏早,需要把偏移量调正。常见的做法是:生成标记后播放一段,注意第一个重拍是否和画面对上。没对上就每次调整 20ms,多试几次。注意,偏移量是全局的,不要对单独标记手动拖,否则很容易乱。
2.3 与 Premiere Pro 的通信:扩展面板、脚本桥接还是手动导出
BeatEdit 2.1 是作为 Premiere Pro 的 CEP 扩展运行的,不是视频滤镜。它通过扩展接口读取时间线、访问音频数据、生成标记。CEP 扩展在 PR 后台通过 Node.js 进程运行,所以它里边的 UI 和本地计算是异步的,分析大文件时界面会卡住,但 PR 主线程不受影响。
如果你不想用扩展面板,BeatEdit 也支持把节拍信息导出为标准数据文件,比如 CSV、FCPXML,再通过脚本导入到其他软件。我遇到最多的是 FCP 平台迁移的场景:在 PR 里生成标记,导出 FCPXML,Final Cut Pro 就能直接读出标记。但注意,FCPXML 版本兼容性很玄学,导出前最好先备份工程,导出后检查一下标记数量是否一致。
还有一种方式是用 ExtendScript 直接从 PR 时间线读取标记,适合批处理。比如我写了一个脚本,把标记批量向右移动 15 帧,用于校正偏移量。脚本如下:
var seq = app.project.activeSequence; var markers = seq.markers; for (var i = 0; i < markers.numMarkers; i++) { var m = markers.getMarkerByIndex(i); m.setTime(m.time.seconds + 0.5); // 向右偏移0.5秒 }这段代码把当前序列的所有标记统一后移 0.5 秒。注意setTime的参数是秒数,而不是帧数。如果用帧数,需要先通过seq.timebase换算。这个脚本适合在 BeatEdit 生成标记后,用来做整体微调。0.5 秒只是示例,实际偏移量可能是 0.02 秒。
参数说明:timebase是 PR 序列的帧速率,比如 30 表示每秒 30 帧。偏移量要精确到帧时,用帧数除以 timebase 得到秒数。例如要把标记右移 5 帧,代码里就是加5/seq.timebase。我一般会先跑一个只读脚本输出当前标记时间,再决定偏移方向,避免改错。
以上是原理部分,接下来安装和授权才是真正让人翻车的地方。
3. BeatEdit 2.1 安装、授权与兼容性:从旧版升级到新版需要注意的边界
原理讲完,下面开始实际操作。这一章的坑我当年踩了不少,尤其是从 1.x 升级到 2.1 时,不是简单覆盖安装就行。
3.1 安装包结构与常见安装路径
BeatEdit 2.1 通常以压缩包形式分发,解压后里面至少会有:一个包含扩展资源的文件夹,一个安装说明,以及一个授权文件或激活工具。有些打包会把 Windows 和 Mac 的文件分开放在Win和Mac两个子目录里,别装错了。
安装步骤分三步:
- 关闭 Premiere Pro。
- 把扩展文件夹复制到 CEP 扩展目录。
- Windows:
C:\Users\<用户名>\AppData\Roaming\Adobe\CEP\extensions\ - macOS:
/Users/<用户名>/Library/Application Support/Adobe/CEP/extensions/
- Windows:
- 启动 PR,在“扩展”菜单里找到 BeatEdit。
注意:有时 PR 的菜单里不显示扩展,因为 CEP 扩展没有签名。CEPHost 会把扩展加载限制在已签名列表里。Windows 下可以通过修改注册表绕过,macOS 下需要运行特殊命令给扩展签名。这个问题在 2.1 版本里依然存在,尤其是 PR 2022 以后查得比较严。
我提供一个简单的验证方法:启动 PR 后,按 F12 打开开发控制台,如果扩展加载失败,控制台会报“CEP extension not loaded”之类的错误。看到这个错误,说明扩展文件目录权限或注册表设置有误。Windows 用户右键单击安装目录,选择“属性-安全-编辑”,给Users组添加“读取和执行”权限。这个操作能解决 90% 的加载失败问题。
常见安装错误还有:把扩展文件夹直接放到了/Library/Application Support/Adobe/Premiere Pro/Plug-ins/,那是放插件(如视频效果)的路径,BeatEdit 不会加载。区分方法很简单:BeatEdit 是要在窗口菜单里打开的,不是应用特效的,所以必须放在 CEP extensions 目录。
3.2 Premiere Pro 版本匹配与插件访问权限
BeatEdit 2.1 官方说明里通常会列出支持的最低和最高 PR 版本。根据经验,PR 2021 到 2024 的正式版都能跑,但 Beta 版经常不兼容。Beta 版的内核 API 变动频繁,CEP 扩展的 host 环境也会被改,所以很多扩展在 Beta 里直接消失。如果你同时装了 PR Beta 和正式版,安装后先在正式版里测试一遍,再开 Beta。
另外,如果你的 PR 是精简版或绿色版,注册表信息不完整,CEP 扩展可能无法识别宿主版本。表现为:扩展菜单里能看到 BeatEdit,但点击后没反应。解决办法是换用完整安装版。这也是很多用户装上打不开的根本原因,不是 BeatEdit 本身坏了。
3.3 授权失效与恢复流程
BeatEdit 2.1 的授权机制是基于机器码的,激活时会把硬件信息绑定到许可证文件里。重装系统、更换硬盘、升级主板的其中一个动作,都可能导致授权失效。现象是打开面板后提示“Invalid License”或“Trial Expired”。
这里有几个固定流程:
- 打开系统时间设置,确认时间和时区正确。
- 进入 BeatEdit 安装目录,找到类似
license.dat的文件,删除后重启 PR。这种删除操作会重新触发激活流程,但注意要保留序列号。 - 如果还不行,检查是否杀毒软件拦截了授权验证的本地端口。BeatEdit 的授权验证一般是在本地完成的,不需要联网,但某些杀软会误杀它的后台进程。把 BeatEdit 安装目录加入白名单。
还有一个容易忽略的点:PR 在打开工程时如果开启了硬件加速(如 Metal 或 CUDA),BeatEdit 的授权模块可能因为显卡驱动异常而崩溃。解决方案是在 PR 项目设置里暂时关闭“Mercury Playback Engine GPU 加速”,重启 PR 再试。这个方法不仅对授权有效,也适用于其他 CEP Host 扩展。
我遇到过最离谱的一次,是把系统从 Windows 10 升级到 Windows 11,授权文件还在,但 BeatEdit 提示需要重新激活。后来发现是用户目录被系统迁移,路径变了。把旧的AppData\Roaming\BeatEdit文件夹整体复制回新位置就恢复了。所以备份时最好连Roaming目录一起备份,别只备份程序文件。
3.4 从旧版升级到 2.1:别覆盖安装,先清理残留
如果你之前用过 1.x,升级到 2.1 最忌讳的是直接把新文件覆盖进去。旧版本的配置和缓存可能不兼容。正确的升级步骤是:先卸载 1.x(通常就是删除 CEP 目录下的 BeatEdit 文件夹),清空缓存目录C:\Users\<用户名>\AppData\Local\Temp\BeatEdit(如果存在),然后安装 2.1。缓存残留会导致新版本分析音频时出现奇怪的 BPM 结果,因为旧缓存的时间戳可能误导新的检测引擎。
如果你有重要的预设(比如常用的灵敏度、偏移量),升级前到%APPDATA%\BeatEdit下备份配置文件,里面有settings.json,把里边的灵敏度参数抄下来,升级后手动填回。不是所有参数都能自动迁移,特别是在跨大版本时。
4. BeatEdit 2.1 实战:从音频到节拍标记的完整操作链路
这一章直接给你一套我常用的操作流程,按这个流程走,基本上十分钟能完成一条卡点视频的标记铺设。在此之前,你需要先熟悉 BeatEdit 面板的几个核心控件。
4.1 快速检测:设置 BPM 范围与灵敏度
打开 BeatEdit 面板后,界面主要分两个区域:上面的检测设置区和下面的标记管理区。检测设置区包括 BPM 范围、灵敏度、标记间隔、偏移量。首次使用时,我按下面的参数表设置:
| 参数 | 我的常用值 | 说明 |
|---|---|---|
| BPM 范围 | 歌曲估算 BPM ± 10 | 例如 House 音乐设 120-140 |
| 灵敏度 | 70-80% | 过高会引入大量弱拍 |
| 标记间隔 | 2 拍 | 适合常规卡点视频 |
| 偏移量 | +20ms | 根据实际情况微调 |
设置完后,选中时间线上的音频片段,点击“Analyze”。分析过程会显示进度条,大音频(10 分钟以上)可能需要 30 秒到 1 分钟。分析完成后,时间线上会出现黄色标记。
注意,分析时 PR 最好处于停止状态,不要播放。如果你在播放过程中点 Analyze,BeatEdit 会尝试实时分析,结果会包含播放位置偏差,导致标记错位。我一般在按空格停止播放后,再执行分析。这一步听起来简单,但很多人忽略。
4.2 剪辑吸附:让每一刀都落在节拍上
标记生成后,接下来就是剪辑。要让剪辑点吸附到标记上,先启用 PR 的“磁性吸附”按钮(快捷键 S),然后确保时间轴的对齐选项里没有关闭“对齐到标记”。具体路径:时间轴右上角的磁铁图标下拉菜单中,勾选“对齐到标记”。如果不勾选,即使磁铁开了也不会吸附。
第二个技巧是:在剪辑模式下,用“箭头选择工具”拖动素材边缘时,靠近标记附近会有一条白线提示吸附。如果你发现吸附的是素材边缘而不是标记,检查一下是不是“对齐到素材”优先级更高。在 PR 里,“对齐”选项可以根据需要分离,我把“对齐到标记”排在最高优先级,这样切开刀处正好在节拍上。
对于已经切好的素材,也可以用标记批量修整。我习惯先粗剪,再根据标记微调。例如将素材纳秒级别对齐到标记,PR 的“滑动工具”(Y)可以移动素材的入出点而不影响轨道位置,结合标记的吸附能快速完成微调。
4.3 用 ExtendScript 批量调整标记:偏移、筛选、改名
有时候 BeatEdit 生成的标记会有少量偏差,比如某个段落因鼓点缺失导致标记跳过一个拍。手动拖动单个标记很慢,我一般用 ExtendScript 来批量处理。下面这段脚本会将当前序列里的所有标记,按 BPM 间隔重新对齐到最近的节拍点上,相当于一个后处理的“校准”步骤:
var seq = app.project.activeSequence; var markers = seq.markers; var bpm = 128; var beatDur = 60.0 / bpm; for (var i = 0; i < markers.numMarkers; i++) { var m = markers.getMarkerByIndex(i); var t = m.time.seconds; var nearestBeat = Math.round(t / beatDur) * beatDur; m.setTime(nearestBeat); }这段代码先把 BPM 转成拍长(秒),然后计算每个标记时间最接近的理论节拍点,把标记挪到那里。注意,直接使用会改变所有标记位置。如果只是想把标记精确吸附到节拍网格,这个脚本很实用。但如果原曲有轻微变速,这样的硬吸附反而会引入偏差。所以脚本里的 BPM 需要先通过 BeatEdit 检测出来的实际 BPM 来填。我一般从 BeatEdit 显示的平均 BPM 读取,填进去后再跑脚本。
参数说明:Math.round是四舍五入,如果你希望标记只能向前移动而不能向后,可以用Math.floor。实际业务里,向后移动会导致画面晚半拍,向前移动又可能提前,所以四舍五入是相对中性的选择。
跑完脚本后,按 Ctrl+S 保存工程,再检查标记是否还吸附在音频波形上。如果音频波形和标记错位,说明原始 BPM 估算错了。这时要回 BeatEdit 里重新看检测 BPM,或者手动调整偏移量。
4.4 多素材同步:用一份节拍数据驱动多个序列
在宣传片或多机位剪辑中,经常需要把多个素材按同一段音乐剪辑。BeatEdit 2.1 允许在序列 A 分析音频后,把生成的标记复制到所有序列。操作方法:在 BeatEdit 标记管理区,选择“Export Markers”,生成一个.xml标记文件。然后在另一个序列里,选择“Import Markers”导入。
这样做的好处是,所有序列共享同一套节拍标记,剪辑标准统一。但注意,导入标记时,PR 默认会插入到同一个时间点,如果序列不是从零开始,会导致错位。我一般会在每个序列开头放一个同步帧,再导入标记。或者在导入后,全选标记,用“滑动工具”移到正确位置。
5. BeatEdit 2.1 常见问题与排查:五个值得记住的踩坑记录
下面直接列 5 个我实际遇到过的坑,每条都按“现象→原因→解决”的结构来写,你可以直接对照排查。
5.1 标记与波形错位
- 现象:生成的标记在音频波形上不是对准鼓点,而是偏左或偏右。放大时间线后,标记总是离瞬态峰值差那么一两帧。
- 原因:音频的采样率和 PR 序列设置的采样率不一致。PR 工程默认可能是 48kHz,而源文件是 44.1kHz。BeatEdit 分析时调用了音频数据的原始采样率,但标记写入时间线时却按序列时间基准转换,造成固定偏移。另外,声卡延迟也可能会加剧。
- 解决:先把工程音频采样率统一。在 PR 里,序列 -> 序列设置 -> 音频采样率,改成和源文件一致。如果还偏移,在 BeatEdit 偏移量里加一个固定值,通常是正 5 到 20 毫秒。不要只调一次,应该多试几个值,每次调整后生成标记,播放开头部分验证。
5.2 检测结果全是弱拍
- 现象:标记明明多,但没有一个打在正拍上,听感完全对不上。
- 原因:BPM 范围设置成了歌曲实际值的两倍或一半。比如一首 70BPM 的歌,你设成 140,动态规划会把每半拍当成一拍来追踪,导致标记落在弱拍上。BeatEdit 2.1 的 BPM 估算是全局最优的,如果范围不对,它会硬选一个“最优”路径,但实际上是错的。
- 解决:重新数 BPM。打开节拍器,播放歌曲,按重拍打拍子,数 15 秒内的重拍数乘以 4 就是大概 BPM。注意数的是四分音符,不是八分音符。设置 BPM 范围时,把估算值放在中间。例如你数到 70,范围设 65-75,不要设 70-140。
5.3 高速剪辑掉帧
- 现象:在标记很多的序列里做快速剪辑,播放预览时画面卡顿,甚至出现绿色感叹号,提示帧无法实时播放。
- 原因:时间线上的标记本身不会消耗性能,但如果你用了大量“按标记切割”产生的素材切片,每个切片都需要实时渲染,转场和叠加也会增加负担。标记太多导致剪辑点过多,进而产生大量零碎片段。
- 解决:降低标记密度。在 BeatEdit 里把“标记间隔”从 1 改成 2 或 4,然后重新分析。或者不重新分析,用脚本删除一半标记。另外,在 PR 里把预览文件渲染一下(Enter 键),能显著改善播放流畅度。
5.4 授权突然失效
- 现象:昨天还能用的 BeatEdit,今天打开 PR 发现面板上弹出激活窗口,所有功能被锁定。
- 原因:授权状态与系统时钟、硬件标识绑定。最常见的原因是系统时间被修改,或者杀毒软件清理了授权临时文件。也有情况是 PR 在后台更新后,替换了 CEP 扩展的签名信息,导致 BeatEdit 认为没有被授权。
- 解决:第一步恢复系统时间自动同步。第二步去 BeatEdit 安装目录查看是否有隐藏的备份授权文件,比如
license.bak,复制回来覆盖license.dat。如果没有,就重新输入序列号或重新激活。注意,激活码一般通过邮件发送,不要相信那些“在线激活”的弹窗,防止钓鱼。
5.5 批处理失败
- 现象:用 BeatEdit 对多个音频文件批量分析时,只有第一个文件成功,后面的文件检测结果全乱,或者根本没有标记。
- 原因:BeatEdit 在批量分析时,PR 必须保持同一个时间线处于激活状态。如果你在批处理过程中切换了时间线,分析结果会写错地方。此外,源文件路径包含中文或特殊字符,也可能导致音频读取失败,因为 CEP 环境的解码默认可能是本地代码页。
- 解决:批量分析前,把所有音频拖到一个独立的序列中,依次排列,然后对每个音频片段单独点分析。或者使用 PR 的“Automate to Sequence”功能先放好片段,再逐一点击。路径尽量改成全英文。如果文件名里有中文,先改成拼音或英文字母。这算是老生常谈,但对很多国产素材来说依然有效。
6. BeatEdit 2.1 的进阶用法:自定义节拍映射与多素材同步
这一章讲两个我用得最熟的进阶技巧:把节拍标记变成字幕卡点的节奏源,以及用批量脚本统一多序列的标记布局。
6.1 自定义节拍映射与字幕卡点
2.1 版本里,标记的生成不是一次性定死的。你可以在标记管理区看到每个标记的时间,手动双击时间值修改。在音乐变化复杂的段落,比如 7/8 拍或者重音倒置的地方,算法抓到的重拍和作曲家实际的重音位置可能不同。我一般把整个段落选出来,手动调整每一个标记的相对位置。具体步骤:在时间线上选中要修改的标记,用面板里的“+/-”按钮微调 10ms。虽然原始检测不是 100% 完美,但 2.1 的微调效率比我在 PR 里手工移动高很多。
这些微调后的标记,可以直接作为字幕弹入的节奏参考。我常用的方法是:把节拍标记对应的时间点记录到 Excel,然后用字幕工具批量生成字幕文件。这样字幕和画面的节奏完全对齐,而且字幕内容可以随时改,不用在 PR 里反复调整。
6.2 多序列标记同步脚本
在宣传片剪辑里,多个序列可能对应不同机位或不同故事线,但他们共用同一首背景音乐。BeatEdit 在其中一个序列里分析出标记后,我想让其他序列也拥有同样位置的标记。但 PR 的标记是每个序列独立的,所以共享标记需要用脚本逐条复制。下面这段脚本可以把源序列的所有标记复制到目标序列:
function copyMarkers(sourceSeq, destSeq) { var markers = sourceSeq.markers; for (var i = 0; i < markers.numMarkers; i++) { var m = markers.getMarkerByIndex(i); destSeq.markers.addMarker(m.time.seconds); } } var active = app.project.activeSequence; var target = app.project.sequences[1]; // 目标序列 copyMarkers(active, target);这段代码默认目标序列是项目中的第二个序列。如果多个序列,可以循环遍历。注意,直接把所有标记复制到目标序列,如果目标序列起始时间不同,标记位置会错位,所以我在复制后还会统一加一层偏移。
最后一个技巧:验证标记是否对齐的方法。把音频放在时间线上,打开标记,选一个重拍,播放时盯着波形。如果标记中心正好在瞬态峰值前一点,说明偏移量不错。从第一次踩坑开始,我每次检测后都强制走一遍“BPM 范围 -> 分析 -> 偏移验证 -> 脚本校准”流程,从那以后卡点视频的返工率降了不少。希望帮到你。
本文还有配套的精品资源,点击获取