[通知] MUZIUM 官方域名已变更为 muzium.kr。
原域名 muziument.com 和邮箱仍可继续使用。
Skip to main content

使用Python进行LUFS分析

2024.08.22·Study·3 min readMUZIUM
其他语言:
简体中文···
使用Python进行LUFS分析

使用Python进行LUFS分析


今天的话题:使用Python进行LUFS分析

文章撰写日期:2024年08月22日

课程撰写所使用的计算机环境

Apple MAC Studio M1 Max, 32GB (2022)
14.6.1 Sonoma
Pro Tools Ultimate 2023.06 / iZotope RX 11 Editor

Mac OS设置为英文。Pro Tools同样以英文进行操作。


LUFS分析

其实,如果只是简单地整理和处理一两个文件,LUFS分析可能并没有太大意义。

因为在工作时,只需在轨道末端挂上Analyzer,就可以在工作过程中随时进行确认。

但是,对于像游戏这类会产生大量独立文件的工作,音频文件少则数百个,多则数千个,仅靠工作时挂着Analyzer的方式显然有很大的局限性。

而且,文件量越大,参与工作的人员也会越多,如果不事先定好数值标准,很可能出现A工作人员剪辑的素材音量极大,而B工作人员剪辑的素材音量极小的情况。

为了解决这些问题,必须以LUFS为基准来处理工作流程。

直接用LUFS Control跑Batch Processing不就能对齐了吗?

从某种角度来看,这确实是最简单的方法。

完全可以提出这样的问题:直接把处理好的文件扔进RX Batch Processor,用Loudness Control对齐不就完事了吗?

但是,游戏CV的动态范围往往非常宽泛。

例如,视觉小说中经常出现的"[…]"表现形式,用呼吸声来代替,音量相对较小;独白的情况同样音量相对较小。

(而且要自然地还原那种感觉,声音就必须小)

相反,尖叫声或战斗中使用的情感表现,音量则相对较大。这同样是为了自然地还原感觉,声音必须大。

然而遗憾的是……所有程序都只通过分析音量来进行处理,并不了解是哪句台词、是何种情感,只专注于将所有内容统一对齐。

于是便会发生这样的惨剧:独白或短暂的呼吸声被极度放大,而本应响亮的喊声却被压低。

(要解决这类问题,恐怕需要将AI深度学习、识别台本与文件名的功能,以及STT(Speech To Text)功能结合在一起,才能做出理想的程序。)

因此,即便跑了Batch Processing,也必须逐一试听,对有问题的文件进行单独修正。

市面上有没有现成的分析程序?

"仅进行分析"这一选项,比想象中要少得多。

大多数情况下,要么直接改变LUFS,要么无法计算整体平均值。

其中,Alto Studio提供了较为相似的功能,

分析完成后进入Report页面,可以计算出已分析文件的平均LUFS。

问题在于,它只能以项目为单位进行分析,因此在导入时必须按各个文件夹分别导入,操作较为不便。

Alto Studio界面截图

虽然看起来是选中了EP09,只分析了该文件夹,但实际上是对根文件夹整体进行了分析。

那么,制作的脚本是什么样的?

LUFS代码截图01

制作成了可以在没有GUI的终端中使用的脚本形式。

制作GUI既不是专业领域,而且也觉得并没有必要,所以没有进一步推进。

脚本本身全部由GPT和Claude编写,通过认真说明代码的方向性并逐步审查代码来完成。

从终端画面可以看出,其中包含了名为LUFS Manager的实际调整音量的脚本,以及可以进行各种音频操作的脚本。

LUFS代码截图02

示例是在一个根文件夹中放入5个子文件夹,每个文件夹各存放20个文件的状态。

根据游戏的层级结构,一个文件夹可以代表一个剧情场景,也可以代表一个角色。

LUFS代码截图03

通过命令行参数输入文件夹路径并执行后……

LUFS代码截图05

脚本就会如此处理。(当然,终端窗口中显示的提示文字只是引导说明,并非实际输出结果)

LUFS代码截图05_2

输出结果会以与输入文件夹相同的名称加上附加文字,生成在相同位置。

Excel文件中包含详细数据,考虑到效率优先的使用习惯,Excel文件名中也会标注平均LUFS。

LUFS代码截图06

第一个文件的LUFS相当低,对吧?那是"[…]"呼吸声,而非台词。

Excel中记录了文件名、Sample Rate、Bit Depth、Channel、Length、Peak Level以及LUFS。

可计算平均值的数据会在最下方汇总,Sample Rate和Bit Depth等信息,若所有数据一致则标注O,否则标注X。

基于分析出的数据,即可继续进行所需的后续工作。

我们已经制作好了直接修改LUFS的代码,目前正在使用该代码进行进一步调整。