统计多个wav文件的总音频时长
2015-06-24 19:38
2931 查看
最近需要做一件事,统计一个文件夹下多个wav文件的总音频文件。
应该有多种途径,我这里就只说我的做法。
主要工作分成了两步:1.提取单个文件的音频时长信息 2.累加音频时长
1.提取单个文件的音频时长信息
这里我用到了一个叫做sox的音频处理工具,下载地址:
https://sourceforge.net/projects/sox/files/sox/14.4.1/
其中有一种用法为:
这个命令可以得到wavFile这个音频文件的相关信息如下:
可以看到其中有一行Length (seconds): 3.690000
这一行就是所需要的该wav文件的时长。
我这里用的批处理方式如下:
2.累加音频时长
这一部分在累加之前还要先把单个的音频信息提取出来,因为上一步的做法只是得到了一个信息文件,还需要从中找出所需要的那一个值。
原本想同样通过批处理的方式处理得到:
然而这个做法却会得到missing operator的错误提示,原因在于bat不能处理小数...
于是最后还是写了个C#小程序来完成这一步的信息提取和累加。主要代码如下:
这个程序的调用形式如下:
另外再附几个也许有用的链接,但是没有验证过仅供参考:
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
应该有多种途径,我这里就只说我的做法。
主要工作分成了两步: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
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#.NET获取拨号连接的宽带连接方法
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#托管堆对象实例包含内容分析
- C#实现按照指定长度在数字前补0方法小结
- C#虚方法的声明和使用实例教程
- C#获取文件夹及文件的大小与占用空间的方法
- C#定义简单的反射工厂实例分析
- C#数字图象处理之肤色检测的方法
- C#实现用于操作wav声音文件的类实例