精华内容
下载资源
问答
  • 批量统计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对批量WAV音频进行等分割的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 统计多个wav文件的总音频时长

    千次阅读 2015-06-24 19:38:28
    提取单个文件的音频时长信息 2.累加音频时长 1.提取单个文件的音频时长信息 这里我用到了一个叫做sox的音频处理工具,下载地址: https://sourceforge.net/projects/sox/files/sox/14.4.1/ 其中有

    最近需要做一件事,统计一个文件夹下多个wav文件的总音频文件。

    应该有多种途径,我这里就只说我的做法。

    主要工作分成了两步:1.提取单个文件的音频时长信息   2.累加音频时长

    1.提取单个文件的音频时长信息

    这里我用到了一个叫做sox的音频处理工具,下载地址:

    https://sourceforge.net/projects/sox/files/sox/14.4.1/

    其中有一种用法为:

    sox wavFile -n stat

    这个命令可以得到wavFile这个音频文件的相关信息如下:


    可以看到其中有一行Length (seconds): 3.690000

    这一行就是所需要的该wav文件的时长。

    我这里用的批处理方式如下:

    for %%A in (%1\*.wav) do sox %%A -n stat >  "stat/%%~nxA.txt" 2>&1
    %1表示的是传入的wav文件夹的路径,也就是对wav文件夹下所有的wav文件执行上述的sox操作并将每个文件对应的输出的信息保存在stat这个文件夹下。

    2.累加音频时长

    这一部分在累加之前还要先把单个的音频信息提取出来,因为上一步的做法只是得到了一个信息文件,还需要从中找出所需要的那一个值。

    原本想同样通过批处理的方式处理得到:

    set a=0
    for /f "tokens=1,3 delims= " %%i in (000.txt) do if "%%i"=="Length" set /a a+=%%j
    echo totoal=%a%

    然而这个做法却会得到missing operator的错误提示,原因在于bat不能处理小数...

    于是最后还是写了个C#小程序来完成这一步的信息提取和累加。主要代码如下:

                string statPath = "";
                if (args.Length != 1)
                {
                    System.Console.WriteLine("Please use the path of stat directory as the only parameter.");
                    Environment.Exit(0);
                }
                else
                {
                     statPath = args[0];
                }     
                string dir = Environment.CurrentDirectory.Substring(0, Environment.CurrentDirectory.LastIndexOf("\\"));
                
                string[] statFile = Directory.GetFiles(statPath);
                //StreamReader sr = new StreamReader(dir + "\\000.txt");
                double dirTime = 0.0;
                string line = "";
                
                foreach (string fileName in statFile)
                {
                    StreamReader sr = new StreamReader(fileName);  
                    while(!sr.EndOfStream)
                    {
                        line = sr.ReadLine();
                        string[] token = line.Split(' ');
                        if (token.Length > 2)
                            if (token[0] == "Length")
                                dirTime += Convert.ToDouble(token[token.Length-1]);
                    }
                    sr.Close();
                }
    
                System.Console.WriteLine(dirTime);

    这个程序的调用形式如下:

    countTime.exe statPath
    于是最后的批处理文件形式如下:

    @echo off
    cd %~dp0
    mkdir stat
    for %%A in (%1\*.wav) do sox %%A -n stat >  "stat/%%~nxA.txt" 2>&1
    countTime  stat



    另外再附几个也许有用的链接,但是没有验证过仅供参考:

    1.查看/导出某文件夹内影音文件的时长、大小、帧率、码率等统计信息(批处理)

    http://outofmemory.cn/code-snippet/2951/look-daochu-mou-file-jia-nei-yingyin-file-shichang-%E3%80%81-size-%E3%80%81-zhenglv-%E3%80%81-malv-kind-calculation-informat

    2.C#获取音频文件(MP3等)播放时间长度的几种方式

    http://blog.csdn.net/rabbitsoft_1987/article/details/19039201

    3.windows批处理(cmd/bat)编程详解(这篇博文感觉讲解挺不错)

    http://blog.csdn.net/bingjie1217/article/details/12947327

    4.BAT CMD批处理文件脚本总结

    http://www.cnblogs.com/linglizeng/archive/2010/01/29/Bat-CMD-ChineseVerion.html

    5.dos命令行或批处理中变量一个百分号和两个百分号的区别

    http://blog.csdn.net/aolia2000/article/details/6885907

    6.批处理的命令行参数传递

    http://blog.csdn.net/yunnying/article/details/12010779


    展开全文
  • 在进行语音相关方面的研究的时候,我们就需要统计一下我们各个文件夹下所有语音文件的总长度,但是一个一个的进行计算难免有些麻烦,想着有没有可以使用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.运行结果

    在这里插入图片描述

    展开全文
  • 使用ffmpeg.exe获取文件属性信息,ffmpeg是java开发的用于多媒体文件编辑的命令行工具,有多个版本,功能比较强大,C#中可以在进程外异步调用这个工具 using (System.Diagnostics.Process pro = new System....
  • import librosa import wave import contextlib ... 获取mp3音频文件时长 :param file_path: :return: """ mp3Info = eyed3.load(file_path) return mp3Info.info.time_secs def get_duration_wav(fi.
    import librosa
    import wave
    import contextlib
    import eyed3
    from pydub import AudioSegment
    
    
    def get_duration_mp3(file_path):
        """
        获取mp3音频文件时长
        :param file_path:
        :return:
        """
        mp3Info = eyed3.load(file_path)
        return mp3Info.info.time_secs
    
    
    def get_duration_wav(file_path):
        """
        获取wav音频文件时长
        :param file_path:
        :return:
        """
        with contextlib.closing(wave.open(file_path, 'r')) as f:
            frames = f.getnframes()
            rate = f.getframerate()
            duration = frames / float(rate)
        return duration
    
    
    def get_duration_mp3_and_wav(file_path):
         """
         获取mp3/wav音频文件时长
         :param file_path:
         :return:
         """
         duration = librosa.get_duration(filename=file_path)
         return duration
    
    
    # 获取wav音频时长的又一种方式
    def get_wav_make(file_path):
        sound = AudioSegment.from_wav(file_path)
        duration = sound.duration_seconds  # 音频时长(ms)
        return duration
    
    
    if __name__ == "__main__":
        file_path = './xxx.mp3'
        # file_path = './task_8b1DA380f9E7.wav'
    
        # 仅mp3
        # duration = get_duration_mp3(file_path)
    
        # 仅wav
        # duration = get_duration_wav(file_path)
        
        # mp3 和 wav 均可
        duration = get_duration_mp3_and_wav(file_path)
    
        print(f'duration = {duration}')
    

     

    展开全文
  • bat命令具有良好的扩展性,使用bat命令配合ffmpeg处理音频将会成为利器 ffmpeg命令。将声音扩大为原来的2.5倍 ffmpeg -i orgin.wav -filter: "volume = 2.5" out3.wav bat命令批处理 for %%i in (*) do ( ...
  • # 需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组 wave_data = np.fromstring(str_data, dtype=np.short) wave_data.shape = -1, 2 wave_data = wave_data.T temp_data = wave_data.T ...
  • 前面小编详细介绍了GoldWave 6(系统)怎样从一段视频中提取音频内容,也介绍了软件在打开视频会因视频内存差异,而存在打开时间的不同。也可根据操作者的需求,而选择打开的优先级别及文件打开后的提示音。 此篇...
  • 当你在网上下载大量的听力资料后,开头和结尾的部分有较的空白,连续听会不连贯,耽误时间,我们可以用到Goldwave(http://www.goldwave.cn)软件中的批处理功能来解决,今天就来教大家用Goldwave批量删除音频中...
  • 我们经常需要知道一个媒体文件所包含的媒体流的信息,比如文件格式、播放时长、码率、视音频编码格式,视频分辨率,帧率,音频属性等信息。如何使用FFmpeg API获取这些信息呢?下面我会给出一个完善的类,这个类封装...
  • ffmpeg 是强大的媒体文件转换工具,常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择 主要参数: -i 设定输入流 -f 设定输出格式 -ss ...
  • 生活中,难免接触到很多音频,如果想要将几个音频合并在一起怎么合并呢,一首动听音乐的创作往往是很难的,即使是伴奏,可能都会有几十种甚至是上百种的乐器在一起演奏,那么如何能更好的把各种不同乐器的演奏声音...
  • 最近准备考研,可惜,今年的疫情,我又整理了一下视频 用到的工具 playTime下载地址 excel,自己在网上找吧,我就不放地址了 开始吧 首先,将文件夹导入 然后导出cvs文件 然后用word打开 ......
  • 其实想要从视频中提取音频是不难的,只要借助专业的音频工具甚至可以一键完成,下面就来给大家分享一下视频转音频的具体操作方法,感兴趣的赶紧学起来哦~电脑视频转音频如何操作首先是借助电脑音频软件来完成视频转...
  • 绘制语谱图首先需要对载入的音频进行分帧和加窗处理,然后进行傅里叶变化,然后求出每一帧所对应的时间刻度,然后再将傅里叶变换后的数据取对数求出能量密度谱,将能量与颜色做一个映射,然后画出图像 分帧 语音信
  • 进入到这个页面,我们可以发现讯飞提供了一个体验的功能,就是你可以上传一段录音来体验一下他们家的这个语音识别功能,当然它是有限制的,你最多可以同时上传50条语音,每条语音不超过500M且不超过1分钟时长。...
  • 爬取微博视频页并下载 所需工具: python3. ffmpeg开源程序 (FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。)
  • 音频

    2014-09-03 21:23:00
    又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 音乐 比如游戏中的“背景音乐”,一般播放时间较长 播放音频需要用到2个框架 AVFoundation.framework Audio...
  • 音频编辑|14.5MB更新时间:2020-10-15虽然体积不大,qve音频剪辑却几乎可以满足小伙伴们的各种音频剪辑需求,它支持音频合并、混音,你能用它制作视频常用的背景音乐,给音频降噪,格式转换功能方便大家把作品分享至...
  • 0.前言 好久没在CSDN上写东西了,看了之前开发的下载器由于三个网站代码更新已经不能用了,应要求,重分析了三个网站播放... //文件时长 List<string> audioDuration = CommonMethds.GetHtmlAttr(webSources, "a",...
  • 本次示例我们将一个720P时长50分钟的视频,转码为480P的视频为例,每个转码分片为2分钟,共25个分片。转码后视频编码为libx264,音频编码为aac。 下面介绍构建的SubmitJob API的主要参数:全部参数可以参考API文档...
  • 视频已经成为继文字、图片之后的又一个...双击视频查看,该视频的播放时长为20秒 导入视频 进入媒体梦工厂,在“分割视频”板块中,点“添加视频”功能 弹出对话框,将视频一行一个的导入 选择设置 将...
  • 日常生活中,听歌的朋友们肯定少不了在某系歌曲平台...QVE音频剪辑,全功能音频处理软件,产品功能丰富 ,音频快速剪辑分割,音频提取,音频转换,支持自定义参数,音频格式互相转换,音频合并,批量快速合并 使用工具

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,122
精华内容 2,448
关键字:

如何计算批量音频的时长