繁体   English   中英

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

[英]Using Python to run a sox command for converting wav files

我想在 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-strings( 格式化字符串文字)的一个很好的解决方案是这样的:

subprocess.call(f"sox {filename} -c 1 -r 16000 {new_filename}", shell=True)

但是,我建议切换到subprocess.run并忽略shell=True标志:

subprocess.run(["sox", filename, "-c 1", "-r 16000", new_filename])

有关更多信息,请参阅文档https://docs.python.org/3/library/subprocess.html

注意:在使用shell=True之前阅读安全注意事项部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM