使用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。
问题在于,它只能以项目为单位进行分析,因此在导入时必须按各个文件夹分别导入,操作较为不便。

虽然看起来是选中了EP09,只分析了该文件夹,但实际上是对根文件夹整体进行了分析。
那么,制作的脚本是什么样的?

制作成了可以在没有GUI的终端中使用的脚本形式。
制作GUI既不是专业领域,而且也觉得并没有必要,所以没有进一步推进。
脚本本身全部由GPT和Claude编写,通过认真说明代码的方向性并逐步审查代码来完成。
从终端画面可以看出,其中包含了名为LUFS Manager的实际调整音量的脚本,以及可以进行各种音频操作的脚本。

示例是在一个根文件夹中放入5个子文件夹,每个文件夹各存放20个文件的状态。
根据游戏的层级结构,一个文件夹可以代表一个剧情场景,也可以代表一个角色。

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

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

输出结果会以与输入文件夹相同的名称加上附加文字,生成在相同位置。
Excel文件中包含详细数据,考虑到效率优先的使用习惯,Excel文件名中也会标注平均LUFS。

第一个文件的LUFS相当低,对吧?那是"[…]"呼吸声,而非台词。
Excel中记录了文件名、Sample Rate、Bit Depth、Channel、Length、Peak Level以及LUFS。
可计算平均值的数据会在最下方汇总,Sample Rate和Bit Depth等信息,若所有数据一致则标注O,否则标注X。
基于分析出的数据,即可继续进行所需的后续工作。
我们已经制作好了直接修改LUFS的代码,目前正在使用该代码进行进一步调整。