美文网首页
Ubuntu下批量统计音频的时长

Ubuntu下批量统计音频的时长

作者: 习惯了千姿百态 | 来源:发表于2020-01-26 23:45 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/fassthtx.html