Ubuntu下批量统计音频的时长

做语音识别任务时,数据量是我们很关注的一个问题,如何统计一个数据集的音频总时长呢?本文利用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

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) 

大功告成!

你可能感兴趣的:(Ubuntu下批量统计音频的时长)