【发布时间】:2014-05-06 11:44:10
【问题描述】:
我有一个包含数百个wav 文件的文件夹。我想分别获得最短 wav 文件的最小长度(以毫秒为单位)和最大长度。我也想得到所有文件的总长度。
我知道我可以使用 sox 和 sed 来获取单个 wav 文件的长度,就像这样
sox some_file.wav -n stat 2>&1 | sed -n 's#^Length (seconds):[^0-9]*\([0-9.]*\)$#\1#p'
我能想到的最简单的方法是使用循环遍历我所有文件的Python 脚本,因为它们都有通用的连续文件名 ({001-800}.wav),然后调用上面的代码。但是,我不知道该怎么做。我知道subprocess 应该是要使用的模块,但我不知道如何管道。
目前我遇到了一些问题:
import subprocess
import shlex
min = 1000
max = 0
total = 0
for i in range(1,801):
cmd = "sox %03d.wav -n stat 2>&1 | sed -n 's#^Length (seconds):[^0-9]*\([0-9.]*\)$#\1#p" % i
subprocess.call(shlex.split(cmd))
# here is where I would catch the output and do the calculations with min, max, and total
【问题讨论】:
-
如果你在linux下(如果你使用sox命令,我认为是这样),你可以简单地使用一个shell脚本。
标签: python subprocess pipe wav sox