-
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
更多相关内容 -
统计文件夹下音频文件时长.py
2022-05-01 21:13:18能够统计文件夹下所有音频的时长总和 -
Ubuntu下批量统计音频的时长
2021-05-13 23:47:54做语音识别任务时,数据量是我们很关注的一个问题,如何统计一个数据集的音频总时长呢?本文利用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
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)
上述两种方法对比
使用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
因为这种方法与我最终想要的文本格式不太一致,需要“文件名 音频时长”格式导入日志文件,最后没有成功,有大佬知道怎么文本格式化输出也可以告知我一下下哈
其他参考网址
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批量读取某文件夹下所有语音文件的总时长
2021-04-23 20:45:03在进行语音相关方面的研究的时候,我们就需要统计一下我们各个文件夹下所有语音文件的总长度,但是一个一个的进行计算难免有些麻烦,想着有没有可以使用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.运行结果
-
统计文件夹下音频文件时长
2022-05-01 21:10:07统计音频文件时长功能代码主要分析提取文件的音频时长读取文件夹下的所有文件的绝对路径 写这个主要是为了能更好的安排自己的学习时间,学习视频的时长很难直观的看总和时间,导致安排的时间没有很好的规划。几经之... -
js获取音频时长
2020-11-18 15:17:51div> el-upload> // 文件上传成功时的钩子 thumbnailSuccess(res: any, file: any) { if (res) { let audio: any = document.createElement("audio"); //生成一个audio元素 audio.src = res.path; //音乐的路径 ... -
C# WPF 通过FFmpeg 获取URL视频的播放时长
2021-07-16 15:20:10FFmpeg解析视频,合并都可以,本项目只是用来获取视频长度,有点大材小用,但是目前能获取在线视频长度的资源...VLC也是可以获取在线URL视频长度的,但是VLC有的在线视频也获取不到时长,这是补充方案,虽然代价有点大 -
Android获取视频音频的时长的方法
2021-05-26 14:46:52mport 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:30import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.... // 计算时长 long durationInSec = grabberOne.getFormatContext().duration() / 1000000; return durationInSec; } -
Python 音频文件批量切割
2020-09-24 10:22:05Python 音频文件批量切割 操作 安装 pydub 1.pip3 install pydub pydub需要依赖 ffmpeg 安装ffmpeg 1.安装地址ffmpeg下载链接 2.配置环境变量 代码实现 from pydub import AudioSegment from pydub.utils import ... -
批量统计各个文件夹下的各个视频/音频的时间
2020-12-27 22:13:07最近准备考研,可惜,今年的疫情,我又整理了一下视频 用到的工具 playTime下载地址 excel,自己在网上找吧,我就不放地址了 开始吧 首先,将文件夹导入 然后导出cvs文件 然后用word打开 ...... -
python将批量音频信号(wav)转化为语谱图并保存(jpg/png)
2022-02-21 13:51:23python将批量音频信号(wav)转化为语谱图并保存(jpg/png) 1. 导入需要的函数库 import numpy as np import wave import matplotlib.pyplot as plt import os 2. 读取wav格式的信号 COOKED_DIR = 'D:/proj1/Test1/... -
如何快速批量,一键将多个音频合并成一个文件
2020-05-28 14:30:34生活中,难免接触到很多音频,如果想要将几个音频合并在一起怎么合并呢,一首动听音乐的创作往往是很难的,即使是伴奏,可能都会有几十种甚至是上百种的乐器在一起演奏,那么如何能更好的把各种不同乐器的演奏声音... -
Python-批处理修改音频采样率(批量重采样)
2020-12-11 14:17:51ffmpeg 是强大的媒体文件转换工具,常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择 主要参数: -i 设定输入流 -f 设定输出格式 -ss ... -
GoldWave中文版如何将视频批量转换为音频?
2021-06-10 13:48:54前面小编详细介绍了GoldWave 6(系统)怎样从一段视频中提取音频内容,也介绍了软件在打开视频时会因视频内存差异,而存在打开时间的不同。也可根据操作者的需求,而选择打开的优先级别及文件打开后的提示音。 此篇... -
图片批量裁剪器(精华版) v6.0.rar
2019-07-10 04:35:40批量处理时不低于5万个文件。 以管理员身份和兼容xp3模式下运行,可支持win7,win8,win10,64位。 图片批量裁剪器(精华版)功能 1. 支持常见图片类型如bmp,jpg,tif,gif,png,支持部分非常见图片类型,如PSD,PCX,ICO... -
[原创](超简单)利用ffprobe批量提取视频、音频、图像元数据信息并自动写入Excel表格(业余分享)
2021-09-01 22:15:43批量提取MP4、AVI、RMVB、H.264、FLV、MP3、WAV、MPEG、FLAC、3GP、JPG、PNG、PSD等格式视频、音频、图片文件(以下简称目标文件)的基础元数据信息(如编码格式、码率、帧率、帧数、采样率、分辨率、比例等),并将... -
ffmpeg 绝对有用的音频和视频的截取与合并命令
2016-07-22 11:48:38ffmpeg虽然可以将图片转换成视频并且添加背景音乐,但是背景音乐无法实现轮播,这里的命令可以先将音频先合并,再截取对应时间长度的音频,从而可以实现视频对应长度的背景音乐。 -
【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脚本
2019-04-18 15:53:00工作任务: 批量处理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 ... -
不调包绘制音频语谱图并批量生成语谱图
2021-05-06 13:12:33绘制语谱图首先需要对载入的音频进行分帧和加窗处理,然后进行傅里叶变化,然后求出每一帧所对应的时间刻度,然后再将傅里叶变换后的数据取对数求出能量密度谱,将能量与颜色做一个映射,然后画出图像 分帧 语音信 -
不用打开视频、音频文件就能获取视频、音频的时长等属性
2014-12-18 20:21:48主要使用 android.media.MediaMetadataRetriever 类,其官方文档对该类的作用的解释是 MediaMetadataRetriever class provides a unified interface for retrieving frame and meta data from an input media ...