做语音识别任务时,数据量是我们很关注的一个问题,如何统计一个数据集的音频总时长呢?本文利用Ubuntu下的工具sox和python语言即可快速获得结果。
sox的安装
自行百度~~实验室集群有,没自己装过
sox使用
sox有很多用途,处理音频会经常用到它,可以用于音频的剪切,拼接等,很多博客都有介绍。本文只需要获取音频的时长信息。
sox out.wav -n stat
输出:
Samples read: 89168
Length (seconds): 5.573000
Scaled by: 2147483647.0
Maximum amplitude: 0.200775
Minimum amplitude: -0.262512
Midline amplitude: -0.030869
Mean norm: 0.015213
Mean amplitude: -0.000010
RMS amplitude: 0.022959
Maximum delta: 0.182007
Minimum delta: 0.000000
Mean delta: 0.009004
RMS delta: 0.014202
Rough frequency: 1575
Volume adjustment: 3.809
我们只要获取Length (seconds)
信息就可以了。想法就是把每个音频的信息都输出到文件中,然后使用python把这些数字读取出来进行累加。首先尝试将结果重定向到文件中,然而发现无法进行重定向,哎。
然后找了很多博客也没找到原因。
但是看到了nohup,一想,它可以把程序放在后台运行,结果放在nohup.out中,这样不就把结果存到文件中了吗。嗯!然后开始新的尝试。
首先编写批处理脚本x.sh
for data in train test dev;do
for file in `ls the/path/of/dataset/$data`;do
sox /CDShare/magicspeech/MagicSpeech/audio/$data/$file -n stat;
done;
done
然后使用nohup将脚本放在后台运行
nohup ./x.sh &
打开nohup.out
成功了一大半!
然后获得Length的值写入一个文件中即可
cat nohup.out |grep 'Length' |cut -d':' -f 2 >time.txt
最后使用python读取time.txt
文件中的每一行,进行累加即可!
with open('time.txt',encoding='utf-8') as f:
sum=0.0
for x in f.readlines():
sum+=float(x.strip('\n'))
# print(x.strip('\n'))
#换算成小时
print(sum/3600)
大功告成!
网友评论