Praat脚本-033 | Praat脚本裁剪归整句中停顿

引题

作者曾经分享过一个脚本,是可以处理一个音频中首尾的静音段,Praat脚本-013 | 无需标注自动切除音频首尾静音段。后来,在应用中,发现也会用到这样一个处理,就是希望能批量的对于句子中间可能存在的比较长的静音段进行处理,因为在录音的过程中,虽然希望在句中的静音段都比较适中,但是因为毕竟在录音的过程中很难控制的各种状态和因素,再者,如果手头上的语料是来自遥远的“年代”,或者来自网上的录播等途径,那就更有必要进行这样的操作,这样保证所有的音频无论是正常读音还是静音段都处在一个较为平衡的范围内,尤其对于那些想研究语句停顿或者统计静音段等目标的朋友们。

先来解释一下遇到这样的静音段,脚本是如何处理的。首先我们先确定一个要处理的时长,比如我们要将句子中所有的静音段超过(大于)0.6秒的静音段部分都裁剪掉。
在这里插入图片描述
操作完成之后,上图中标黄的静音段部分被切掉,两边的都补充保留,尽量没有破坏和语音比较接近的部分。如下图所示。
在这里插入图片描述
请注意,如果中间部分的静音段小于我们期望切割的0.6这个值,这部分是不会有任何操作的。同时,该脚本也会同样处理首、尾的静音段,但是处理方法同样是遵循尽量不去切割靠近语音的部分,即音频首,是切分从0开始的位置;音频尾,是切割从尾部开始算的部分;

方案介绍

第一种 存在标注

如果你这些对应的音频是有标注数据的,即是对于首、尾,或者句中的长停顿有标注的,这种情况下脚本在处理静音段的时候,在计算静音段时长是否进行切割的时候是严格按照标注的情况来的。但是处理的策略也是同上面描述的。我们来演示一下如何使用脚本。

首先说一下输入的数据,必须是有要处理的音频,和标注的TextGrid文件,为了演示,我们在一个input_wavs_textgrids目录里放置了两个文件,也请注意,这两个文件必须有相同的名字,只是扩展名不同,一个为音频wav,一个为标注TextGrid。
在这里插入图片描述
打开标注的文件,请注意标注停顿的位置的符号#,这是关键的,因为在脚本处理的时候要根据这个符号来知道这里是停顿位置,大家如果自己有标注的比如silence, sp, …都可以在脚本里设置。
在这里插入图片描述

这个脚本在git目录(具体地址见本文最后)里的第34个脚本34-normalize_silence\Cut_Wav_TextGrid_middle.Praat

Praat运行脚本,Praat->Open Script->Cut_Wav_TextGrid_middle.Praat

  1. 对应图上的1处,这里要填入音频所在的目录,这里采用相对路径的形式,因为脚本和数据在同个目录下,只需输入input_wavs_textgrids\即可;
  2. 这里需要输入的是TextGrid的目录,虽然本例中音频wav和TextGrid是在同目录下,但是也要输入一遍,脚本这样处理是为了后文第二种方案考虑,所以在本例中,这里的目录仍然和第1是一样的,大家可根据自己数据的情况自由处理;
  3. 这里需要选择has TextGrid这个选项,表示是有TextGrid的;
  4. 在这个文本框里要填的就是上文提到的你是如何标注停顿的,在本例中使用的是#,所以这里就填这个符号,其它使用者要根据自己标注文件填这个相应的符号;
  5. 这里设置要裁剪的停顿的时长值,写0.6的意思是超过0.6(大于0.6,不包括等于0.6)的停顿位置会被处理、裁剪;
  6. 这里设置你要输出的裁剪完的音频目录,这个目录是脚本自动创建的,请务必注意要和输入目录有所区分,否则数据最后会很乱;
  7. 同第6,是保存裁剪完的TextGrid的目录;
  8. 设置完毕,点击Run运行脚本。
    在这里插入图片描述
    在此之后,你会看到两个对话框。第一个是一个运行信息显示窗口,这个和脚本处理操作没有关系,它只是显示在处理第几个文件,因为本例只有一个文件,所以只会显示一个文件名。如果你有1000个文件在这个目录中,这里将会依次显示这1000个文件名,这只是为了观察程序运行的情况。第二个框框是表示程序运行结束,直接关掉就可以了。
    在这里插入图片描述
    最终我们在这个目录下发现了output_wavs_textgrids目录,打开里面的结果文件。可以看到在中间位置,经过裁剪,我们保留了这个位置只有0.6秒的停顿。
    在这里插入图片描述

第二种 没有标注

如果你这些对应的音频是没有标注数据的,这种情况下,我们是使用了praat的一个对于静音段的自动判断功能,所以这个“自动”是有一定的误差的,尤其对于录音噪音比较大的音频,请使用者注意这一点。这个功能如下图所示。

在这里插入图片描述
脚本在处理静音段的时候,在计算静音段时长是否进行切割的时候是严格按照标注的情况来的。但是处理的策略也是同上面描述的。我们来演示一下如何使用脚本。

首先说一下输入的数据,只需要有要处理的音频,本文在一个input_wavs目录里放置了一个音频文件。我们来演示一下这种情况下,如何执行脚本。
在这里插入图片描述
这个脚本在git目录(具体地址见本文最后)里的第34个脚本34-normalize_silence\Cut_Wav_TextGrid_middle.Praat

Praat运行脚本,Praat->Open Script->Cut_Wav_TextGrid_middle.Praat

  1. 对应图上的1处,这里要填入音频所在的目录,这里采用相对路径的形式,因为脚本和数据在同个目录下,只需输入input_wavs\即可;
  2. 这里保持默认-就可以了;
  3. 这里不需要选择has TextGrid这个选项;
  4. 在这个文本框里要填的是你可以自己定义一个自己想用的静音段的标记,本例使用sp,这个完全是自定义的;
  5. 这里设置要裁剪的停顿的时长值,写0.6的意思是超过0.6(大于0.6,不包括等于0.6)的停顿位置会被处理、裁剪;
  6. 这里设置你要输出的裁剪完的音频目录,这个目录是脚本自动创建的,请务必注意要和输入目录有所区分,否则数据最后会很乱;
  7. 同第6,是保存裁剪完的TextGrid的目录,这里也会保留自动生成的TextGrid,所以这个目录也要设置;
  8. 设置完毕,点击Run运行脚本。

在这里插入图片描述
同样,在此之后,你也会会看到两个对话框。详细的说明,请参考上面第一种方案里,在此不再重复。
在这里插入图片描述
最终我们在这个目录下发现了new_textgrids和new_wavs两个目录,打开里面的结果文件。可以看到在中间位置,经过了裁剪,我们保留了这个位置只有0.6秒的停顿。

但是如果完全依赖自动,也会带来一定的不确定性,比如自动判断的静音段出错,将会裁剪到实际的语音,更为完善的做法是在自动的基础上加一些人工对静音段的检查再做处理。
在这里插入图片描述

补充说明

本站之前发布的大多数脚本都是采用的相对路径,即input_wav/这样,没有将哪个盘,哪个目录都列出来,这是因为这些目录本身就在和脚本同样的目录下,这是完全没有问题的,经常在咨询群里看到有一些同学自己并不熟悉路径,总是弄错路径,其实我提到过多次了,你就不要动我现在设置的路径,将你的数据放在我的目录里运行就可以了。

获取脚本

https://github.com/feelins/Praat_Scripts

本站所有Praat脚本都可以在上述github的项目目录里找到,如果日常对代码、脚本操作比较熟练的可通过下载、安装、配置github for windows在自己的电脑上通过git clone将代码下载到本机,这样的好处是可以跟主站及时更新代码。
不想费如此脑筋,可以通过点击如下图Code位置所示,下载整站的代码,可直接使用。
在这里插入图片描述

版权说明

1、版权归本博客作者所有;

2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;

3、转载或者引用本文内容请注明来源及原作者;

4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地语音工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值