我想用Python处理.wav
文件。特别是,我想执行以下操作
sox input.wav -c 1 -r 16000 output.wav
在我文件夹中的每个.wav
文件中。我的代码如下:
#!/usr/bin/python
# encoding=utf8
# -*- encoding: utf -*-
import glob
import subprocess
segments= []
for filename in glob.glob('*.wav'):
new_filename = "converted_" + filename
subprocess.call("sox" + filename + "-c 1 -r 16000" + new_filename, shell=True)
但是,它没有调用我的命令,无法正常工作。
写作时
subprocess.call("sox" + filename + "-c 1 -r 16000" + new_filename, shell=True)
示例性TEST.WAV
文件实际要执行的操作如下:
soxTEST.WAV-c 1 -r 16000converted_TEST.WAV
因此您缺少两者之间的空格。使用Python的f字符串(Formatted string literals)的一个不错的解决方案是这样的:
subprocess.call(f"sox {filename} -c 1 -r 16000 {new_filename}", shell=True)
但是,我建议切换到subprocess.run
并忽略subprocess.run
标志:
shell=True
文档subprocess.run(["sox", filename, "-c 1", "-r 16000", new_filename])
上也有更多信息,>
注意:
使用https://docs.python.org/3/library/subprocess.html之前,请阅读Security Considerations部分。