统计多个wav文件的总音频时长
来源:互联网 发布:经济数据先行指标 编辑:程序博客网 时间:2024/04/27 17:50
最近需要做一件事,统计一个文件夹下多个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=0for /f "tokens=1,3 delims= " %%i in (000.txt) do if "%%i"=="Length" set /a a+=%%jecho 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 offcd %~dp0mkdir statfor %%A in (%1\*.wav) do sox %%A -n stat > "stat/%%~nxA.txt" 2>&1countTime 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
- 统计多个wav文件的总音频时长
- sox 获取wav文件的时长
- 通过PHP读取wav音频时长
- Linux Shell脚本 - 统计多个文件的总大小
- wav文件音频头的研究
- wav文件音频头的研究
- wav文件音频头的研究
- wav文件音频头的研究
- 合并多个wav文件
- 如何得到WAV文件播放的总时间
- 多个Word文档总页数的快速统计技巧
- vc中读取wav文件的时长和文件播放的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- WPF让button响应按键
- NSBundle的使用,注意mainBundle和Custom Bundle的区别
- ALV 中根据条件设置某个cell 是否可编辑
- AVAudioPlayer常用属性
- Leetcode 220 Contains Duplicate III
- 统计多个wav文件的总音频时长
- 基本文件操作:NSFileHandle的用法
- codeforces 544D Destroying Roads (最短路)
- Alex 的 Hadoop 菜鸟教程: 第20课 工作流引擎 Oozie
- Android Bundle类
- leetcode_Rectangle Area _easy
- NSFileManager和NSFileHandle
- iphone使用开源代码Asyncsocket进行socket编程
- 博客