精华内容
下载资源
问答
  • 2021-05-13 23:47:58

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    自己用的。

    #!/bin/bash

    # file name : media_total_time.sh

    function given_input ()

    {

    sum_time=`mplayer -vo null -ao null -frames 0 -identify "$@" 2>/dev/null | grep -i length | awk -F "=" *{sum += $2} END {print sum}*`

    sum_time=${sum_time%.*}

    echo "total $# files."

    echo "total time : "

    echo "$((sum_time/3600)) h $((sum_time/60 - sum_time/3600*60)) m $((sum_time - sum_time/60*60 )) s"

    }

    function all_in_dir ()

    {

    sum_time=`mplayer -vo null -ao null -frames 0 -identify $(find . -type f) 2>/dev/null | grep -i length | awk -F "=" *{sum += $2} END {print sum}*`

    sum_time=${sum_time%.*}

    echo "total $(find . -type f| wc -l | gawk *{print $1}*) files."

    echo "total time : "

    echo "$((sum_time/3600)) h $((sum_time/60 - sum_time/3600*60)) m $((sum_time/1 - sum_time/60*60 )) s"

    }

    # start

    if [[ $# = 0 ]]; then

    echo "Usage: media_total_time.sh [ ...]"

    echo "Or : media_total_time.sh all "

    exit 1

    elif [[ -z "$1" ]]; then

    echo "Usage: media_total_time.sh [ ...]"

    echo "Or : media_total_time.sh all "

    exit 1

    elif [[ "$1" == "all" ]]; then

    echo "calculating total length of all media files in this directory."

    all_in_dir

    else

    echo "calculating total length of given files."

    given_input "$@"

    fi

    exit

    更多相关内容
  • 能够统计文件夹下所有音频时长总和
  • 做语音识别任务时,数据量是我们很关注的一个问题,如何统计一个数据集的音频时长呢?本文利用Ubuntu下的工具sox和python语言即可快速获得结果。sox的安装自行百度~~实验室集群有,没自己装过sox使用sox有很多用途...

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

    0fa3a8d4b979

    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)

    大功告成!

    展开全文
  • 批量统计wav音频时长的三种方法

    千次阅读 2020-06-02 17:24:28
    使用Python的第三方模块包 sox,pip安装即可,使用这种方法,耗时比较。 pip install sox import os import sox path = './audio_dir' ii = 0 total_second = 0 for wav in os.listdir(path): wav_path = os....

    一、使用Python-sox模块包

    使用Python的第三方模块包 sox,pip安装即可,使用这种方法,耗时比较长。

    pip install sox
    
    import os
    import sox
    
    path = './audio_dir'
    ii = 0
    total_second = 0
    for wav in os.listdir(path):
    	wav_path = os.path.join(path, wav)
    	if wav_path.endswith('.wav'):
    		ii += 1
    		try:
    			wav_info = sox.file_info.info(wav_path)
    			wav_duration = wav_info['duration']
    			total_second += wav_duration
    		except Exception as e:
    			print(e, wav_path)
    print("wav nums: ", ii)
    print("second: ", total_second)
    print("Effective hours: ", total_second/3600)
    

    二、使用wave+contextlib

    使用Python自带的wave和contextlib模块,速度会比使用第三方模块包sox快很多

    import wave
    import contextlib
    import os
    import time
    
    t = time.time()
    wav_dir = "./audio_dir"
    total_time = 0
    ii = 0
    with open('contextlib_duration.txt', 'w', encoding='utf-8')as log:
    	for file in os.listdir(wav_dir):
    		ii += 1
    		file_path = os.path.join(wav_dir, file)
    		with contextlib.closing(wave.open(file_path, 'r')) as f:
    			frames = f.getnframes()         # 帧数
    			rate = f.getframerate()         # 帧率(每秒的帧数)
    			duration = frames / float(rate) # 单位:秒
    			total_time = total_time + duration
    			content = file + " " + str(duration) + "\n"
    			log.write(content)
    print("wave num", ii)			
    print("total_time = ",total_time)
    print("Effective hours: ", total_second/3600)
    print(time.time() - t)
    

    参考网址
    https://blog.csdn.net/dongzichen2015/article/details/100172384?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

    上述两种方法对比

    使用Python sox 获取音频时长耗时很长,获取36W条音频数据的总时长,用时12H;
    使用wave+contextlib.closing 获取音频时长耗时短,获取36W条音频数据的总时长,用时1H42分钟
    以上两种方法都没有使用多进程,单进程执行,可以看出使用Python内置包wave的速度。

    但是两种方法最终获取到的总时长有一点点差别,差距在0.011毫秒之内,用Python sox方法获取音频时长比wave(帧数/速率)方法多0.01毫秒。是有一些音频时长稍微有点不同 。主要原因可能是因为小数点位数保留不同四舍五入造成的值差异,Python sox 是6位小数 wave是7位小数,可能是使用wave更精确一些。

    三、使用sox包

    在Linux环境下使用sox包,看自己是在那种Linux环境下选择合适的安装方法

    yum install sox
    brew install sox
    
    ls ./audio_dir/ | xargs -I {} sox ./audio_dir/{} -n stat > duration.log 2>&1
    

    不在后面加上2>&1,可能sox执行结果不会打印到duration.log,只会在终端上显示,也可以使用nohup将输出打印到指定日志中。

    # 将命令写入到文件
    vim test.sh
    ls ./audio_dir/ | xargs -I {} sox ./audio_dir/{} -n stat
    nohup sh test.sh > duration.log
    cat duration.log |grep 'Length' |cut -d':' -f 2 >time.txt
    

    参考网址
    https://www.jianshu.com/p/0fa3a8d4b979

    因为这种方法与我最终想要的文本格式不太一致,需要“文件名 音频时长”格式导入日志文件,最后没有成功,有大佬知道怎么文本格式化输出也可以告知我一下下哈

    其他参考网址
    http://www.mamicode.com/info-detail-2098172.html
    https://blog.csdn.net/yogurt0928/article/details/46625731
    https://www.jianshu.com/p/f43a6f22297b

    四、求教根据音频文件大小求音频时长

    听大佬说过可以根据音频文件大小(不知道能不能根据音频文件夹大小)计算音频时长,百度查了查有一种方法可以计算,但是算出来的总时长跟估计的总时长相差很多,有大佬知道怎么计算的话,可以麻烦下在评论中告知一下下的哈

    五、win环境使用playtime软件

    自行百度搜索用法,就是音频文件比较多的时候会比较慢且卡,计算的时长比较准确

    展开全文
  • 在进行语音相关方面的研究的时候,我们就需要统计一下我们各个文件夹下所有语音文件的总长度,但是一个一个的进行计算难免有些麻烦,想着有没有可以使用python批量计算每个文件夹下的所有语音时长,于是便有了下边...

    1.需求

    在进行语音相关方面的研究的时候,我们就需要统计一下我们各个文件夹下所有语音文件的总长度,但是一个一个的进行计算难免有些麻烦,想着有没有可以使用python批量化计算每个文件夹下的所有语音时长,于是便有了下边的这个代码。

    2.Python批量获取指定文件夹下所有语音总时长

    此处将代码公式,希望可以帮助到其他人。

    import os
    import wave
    
    def file_name(file_dir):
        '''
        输入文件夹名称,并返回该文件夹下所有语音文件的完整路径(list类型)
        :param file_dir: 
        :return: 
        '''
        L = []
        for root, dirs, files in os.walk(file_dir):
            for file in files:
                if file.split('.')[-1] == 'wav':
                    L.append(os.path.join(root, file))
            return L
    
    
    def cal_total_time(file_dir):
        '''
        计算输入文件夹内所有语音文件的时间长度
        :param file_dir:
        :return:
        '''
        time_count=0
        wav_list=file_name(file_dir)
        for wav_path in wav_list:
            with wave.open(wav_path, 'rb') as f:
                f = wave.open(wav_path)
                time_count += f.getparams().nframes / f.getparams().framerate
    
        return time_count/60/60
    
    def main():
        file_dirs=[r'I:/王延凯新建LibriVox数据集/english',
                   'I:/王延凯新建LibriVox数据集/French',
                   'I:/王延凯新建LibriVox数据集/German',
                   'I:/王延凯新建LibriVox数据集/Italian',
                   'I:/王延凯新建LibriVox数据集/Spanish']
    
        for file_dir in file_dirs:
            print('当前语种时长为:%.2f 小时'%(cal_total_time(file_dir)))
    
    if __name__ == '__main__':
        main()
    
    

    3.运行结果

    在这里插入图片描述

    展开全文
  • 统计音频文件时长功能代码主要分析提取文件的音频时长读取文件夹下的所有文件的绝对路径 写这个主要是为了能更好的安排自己的学习时间,学习视频的时长很难直观的看总和时间,导致安排的时间没有很好的规划。几经之...
  • js获取音频时长

    2020-11-18 15:17:51
    div> el-upload> // 文件上传成功的钩子 thumbnailSuccess(res: any, file: any) { if (res) { let audio: any = document.createElement("audio"); //生成一个audio元素 audio.src = res.path; //音乐的路径 ...
  • FFmpeg解析视频,合并都可以,本项目只是用来获取视频长度,有点大材小用,但是目前能获取在线视频长度的资源...VLC也是可以获取在线URL视频长度的,但是VLC有的在线视频也获取不到时长,这是补充方案,虽然代价有点大
  • mport android.content.ContentUris;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.suppor...
  • 利用 python 获取一段音频时长信息

    千次阅读 2022-03-12 17:31:51
    为了统计大量音频时长信息,比如总时长、平均时长、最大最小时长等,采用人工进行逐个的统计是不现实的,这就需要利用python进行批量处理。 那如何利用python获取一段音频时长信息呢。具体如下: wav_path = ...
  • javacv之获取视频或者音频时长

    千次阅读 2021-12-05 18:17:30
    import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.... // 计算时长 long durationInSec = grabberOne.getFormatContext().duration() / 1000000; return durationInSec; }
  • Python 音频文件批量切割

    千次阅读 2020-09-24 10:22:05
    Python 音频文件批量切割 操作 安装 pydub 1.pip3 install pydub pydub需要依赖 ffmpeg 安装ffmpeg 1.安装地址ffmpeg下载链接 2.配置环境变量 代码实现 from pydub import AudioSegment from pydub.utils import ...
  • 最近准备考研,可惜,今年的疫情,我又整理了一下视频 用到的工具 playTime下载地址 excel,自己在网上找吧,我就不放地址了 开始吧 首先,将文件夹导入 然后导出cvs文件 然后用word打开 ......
  • python将批量音频信号(wav)转化为语谱图并保存(jpg/png) 1. 导入需要的函数库 import numpy as np import wave import matplotlib.pyplot as plt import os 2. 读取wav格式的信号 COOKED_DIR = 'D:/proj1/Test1/...
  • 生活中,难免接触到很多音频,如果想要将几个音频合并在一起怎么合并呢,一首动听音乐的创作往往是很难的,即使是伴奏,可能都会有几十种甚至是上百种的乐器在一起演奏,那么如何能更好的把各种不同乐器的演奏声音...
  • ffmpeg 是强大的媒体文件转换工具,常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择 主要参数: -i 设定输入流 -f 设定输出格式 -ss ...
  • 前面小编详细介绍了GoldWave 6(系统)怎样从一段视频中提取音频内容,也介绍了软件在打开视频会因视频内存差异,而存在打开时间的不同。也可根据操作者的需求,而选择打开的优先级别及文件打开后的提示音。 此篇...
  • 批量处理不低于5万个文件。 以管理员身份和兼容xp3模式下运行,可支持win7,win8,win10,64位。 图片批量裁剪器(精华版)功能 1. 支持常见图片类型如bmp,jpg,tif,gif,png,支持部分非常见图片类型,如PSD,PCX,ICO...
  • 批量提取MP4、AVI、RMVB、H.264、FLV、MP3、WAV、MPEG、FLAC、3GP、JPG、PNG、PSD等格式视频、音频、图片文件(以下简称目标文件)的基础元数据信息(如编码格式、码率、帧率、帧数、采样率、分辨率、比例等),并将...
  • ffmpeg虽然可以将图片转换成视频并且添加背景音乐,但是背景音乐无法实现轮播,这里的命令可以先将音频先合并,再截取对应时间长度的音频,从而可以实现视频对应长度的背景音乐。
  • 【sox】常用的音频处理脚本合集一

    千次阅读 2021-11-22 16:39:39
    批量计算wav文件时长 #!/bin/bash if [ $# != 1 ];then echo "specify the dir to do the calculation." exit fi output_tmp="$1.tmp" output="$1.file_duration" for file in $1/*.wav do dur=`soxi -d ${...
  • 工作任务: 批量处理wav音频文件--shell脚本 #!/bin/bash # 处理音频 deal_with_wav() { for i in $(seq 10 10 180) do for j in $(seq -f "%04g" 0002 2 0040) do ...
  • 绘制语谱图首先需要对载入的音频进行分帧和加窗处理,然后进行傅里叶变化,然后求出每一帧所对应的时间刻度,然后再将傅里叶变换后的数据取对数求出能量密度谱,将能量与颜色做一个映射,然后画出图像 分帧 语音信
  • 主要使用 android.media.MediaMetadataRetriever 类,其官方文档对该类的作用的解释是 MediaMetadataRetriever class provides a unified interface for retrieving frame and meta data from an input media ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,145
精华内容 2,858
关键字:

如何计算批量音频的时长