统计多个wav文件的总音频时长
最近需要做一件事,统计一个文件夹下多个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
统计多个wav文件的总音频时长相关推荐
- linux下微信/qq的aud、silk音频文件格式与mp3格式互转,获取音频时长的方法,附问题分析和java代码。
安装ffmpeg ffmpeg -codecs -可以看出ffmpeg默认的MP3格式无法编码为其它格式[D.A.L mp3]D=解码 E=编码 A=AudioCodec L=有损压缩 需要安装lam ...
- Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长(File文件方式)
ffmpeg系列 Java使用FFmpeg(自定义cmd) Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长 Java使用FFmpeg(自定义cmd)系列之官方API获取视频/音频信息 ...
- java在linux转化mp3,linux下微信/qq的aud、silk音频文件格式与mp3格式互转,获取音频时长的方法,附问题分析和java代码。...
安装ffmpeg ffmpeg -codecs -可以看出ffmpeg默认的MP3格式无法编码为其它格式[D.A.L mp3]D=解码 E=编码 A=AudioCodec L=有损压缩 需要安装lam ...
- android获取小程序音频时长,最新微信小程序获取音频时长与实时获取播放进度...
#微信小程序获取音频时长与实时获取播放进度 在小程序官方文档中 audio 注意:1.6.0 版本开始,该组件不再维护.建议使用能力更强的 wx.createInnerAudioContext 接口 ...
- 最新微信小程序获取音频时长与实时获取播放进度
#微信小程序获取音频时长与实时获取播放进度 在小程序官方文档中 audio 注意:1.6.0 版本开始,该组件不再维护.建议使用能力更强的 wx.createInnerAudioContext 接口 ...
- 获取MP3音频时长 | Java工具类
获取mp3格式音频时长. Maven依赖 <dependency><groupId>org</groupId><artifactId>jaudiotag ...
- 前端读取wma文件头获取音频时长
背景:wma是微软推出的一种音频存储格式,由于版权问题,目前浏览器的audio/vedio标签都不支持播放wma文件,由于项目需求需要前端读取本地音频时长等相关信息传到后端,所以只能另辟蹊径. 思路: ...
- html javascript 音频、视频、 mp3 、mp4 的播放、暂停、重新播放、获取音频时长、视频自动全屏播放
html javascript 音频.视频. mp3 .mp4 的播放.暂停.重新播放.获取音频时长 视频 https://www.bilibili.com/video/BV1WE411o7Ft?fr ...
- js 获取视频,者音频时长
js 获取视频,者音频时长 let fileUrl = URL.createObjectURL(file) let audioElement = new Audio(fileUrl) let time ...
最新文章
- C#保存文件为无BOM的utf8格式
- 一个Ext2+SWFUpload做的图片上传对话框
- 存储过程能用if not exist_C++核心准则T.48:如果不能用概念,用enable_if
- C#中 Convert与Parse的区别
- java this关键字表示当前对象,可以访问属性、方法、构造方法
- java名人_识别名人 · Find the Celebrity
- c语言位运算负数的实例_JavaScript基础教程(四)二进制位运算
- 41. 流感传染(宽搜)
- 在html页面中加入矢量图,在html中引用矢量图
- Via板载声卡底噪严重、播放卡顿及耳机与扬声器音源切换问题【解决方法】
- 姿态估计4-06:voxelpose(多视角3D人体姿态估算)-源码无死角解析(1)-训练代码总览
- 安装Ubuntu Linux系统时硬盘分区
- 射频识别(RFID)
- 裸眼 3D 技术是什么原理?
- LeetCode——自除数
- 2022/03/03js作业第一个不同宽度变色第二个是输入几年几月几日判断是今年的第几天(不算闰年2月为28日)
- PCB中贴片元件封装焊盘尺寸的规范
- 116 Ajax简单应用
- 某校2019专硕编程题-简易计算器
- oracle程序窗口,oracle窗口函数的使用