从sox输出获取.wav的长度

jos*_*shu 37 audio grep pipe wav sox

我需要获取.wav文件的长度.

使用:

sox output.wav -n stat
Run Code Online (Sandbox Code Playgroud)

得到:

Samples read:            449718
Length (seconds):     28.107375
Scaled by:         2147483647.0
Maximum amplitude:     0.999969
Minimum amplitude:    -0.999969
Midline amplitude:     0.000000
Mean    norm:          0.145530
Mean    amplitude:     0.000291
RMS     amplitude:     0.249847
Maximum delta:         1.316925
Minimum delta:         0.000000
Mean    delta:         0.033336
RMS     delta:         0.064767
Rough   frequency:          660
Volume adjustment:        1.000
Run Code Online (Sandbox Code Playgroud)

如何使用grep或其他方法仅输出第二列中的长度值,即28.107375?

谢谢

And*_*icz 46

有一个更好的方法:

soxi -D out.wav
Run Code Online (Sandbox Code Playgroud)

  • 我认为两者的不同之处在于soxi使用标题信息,而sox也会查看正文.如果标题错误,两者给出不同的outpu. (2认同)

phi*_*hag 35

stat效果将其输出到stderr,使用2>&1重定向到stdout.使用sed提取相关位:

sox out.wav -n stat 2>&1 | sed -n 's#^Length (seconds):[^0-9]*\([0-9.]*\)$#\1#p'
Run Code Online (Sandbox Code Playgroud)

  • 这比“soxi”更可靠:这涉及遍历音频文件以_计算_长度,而“soxi”只是报告标头中的内容 - 无论准确性如何 (2认同)

小智 13

这可以通过使用:

  • soxi -D input.mp3 输出将是持续时间,以秒为单位
  • soxi -d input.mp3 输出将是具有以下格式hh:mm:ss.ss的持续时间


Dra*_*fly 6

这对我有用(在Windows中):

sox --i -D out.wav
Run Code Online (Sandbox Code Playgroud)