使用Python运行sox命令来转换wav文件

问题描述 投票:0回答:1

我想用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)

但是,它没有调用我的命令,无法正常工作。

python wav sox
1个回答
0
投票

写作时

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部分。
© www.soinside.com 2019 - 2024. All rights reserved.