使用脚本将原始音频数据转换为WAV格式

26

我有大量的.RAW音频文件(无符号8位PCM格式且没有字节序),我想将它们转换成.WAV文件。我可以使用哪个命令行工具(在Windows或Linux下)快速转换它们?

7个回答

38

我的朋友向我推荐了SoX,这个工具非常好用。所使用的语法如下:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>


SoX非常棒。它是一个命令行工具,因此编写脚本非常简单,尽管一开始选项的数量可能有点令人不知所措。 - Dan Bechard
1
似乎“原始”文件必须以.raw结尾。 - Chris Stryczynski
或者你必须明确地说“-t raw”。 - Mormegil

5
我发现sox非常快速和可靠。我用它来制作一个与Asterisk配合的口述解决方案。如果你正在使用sox,请注意你需要知道源编码是什么。我发现this是我开始做这个项目时的问题。
对于我的实现,我使用了这个:
sox -t auto -w -s -r 8000 -c 1 {input_file}  {output_file}

2
如果你有一个名为name.txt的文件,其中包含所有原始音频文件的名称,那么使用Python可以将一批原始文件转换为一批wav文件。
from subprocess import call
file = "name.txt"
with open(file,'rU') as f:
     for name in f:
        name = name[:len(name)-4]
        name1 = './'+name+'raw' #input 
        name2 = './'+name+'wav' #output
        call(["sox","-r","48000", "-t", "sw", "-e", "signed", "-c", "1", "-b", "16", name1, name2])

采样率为48K,单声道,精度为16位。


1
小而致命的错别字,您在'raw'和'wav'之前缺少了一个“.”。另外要注意,有时文件的扩展名为“.RAW”(我特别是指Radio Music SD卡),据我所知,sox的参数区分大小写。 - Stefano

2
MPlayer应该能够转换你的音频;
$ mplayer \
  -quiet \
  -vo null \
  -vc dummy \
  -af volume=0,resample=44100:0:1 \
  -ao pcm:waveheader:file="file.wav" "file.raw"

它在大多数Linux发行版的软件包管理器中都可以找到。

2
你可以使用node-lame。
 var Lame = require("node-lame").Lame;

 const decoder = new Lame({
        output: "./new.wav",
        raw: true,
        bitwidth:16,
        sfreq:48,
        mode: "m"
    }).setFile("./a.pcm");
    decoder.decode().then(() => {
            console.log("decoded successfully.");
        }).catch(error => {
            console.log("Error: "+error);
        });

https://www.npmjs.com/package/node-lame

或者使用命令行工具“sox”。
sox -r 48000 -t sw -e signed -c 1 -b 16 a.pcm new.wav

2
audioconvert 是相当标准的(我认为)。 mencoder 在完全免费的 Linux 发行版中不是标准可用的,但可以转换成任何格式。

2

让我们使用Sox,它几乎在所有地方都可用。

在Mac上:

brew install sox

在Ubuntu上(测试过18.04):
sudo apt update && sudo apt install sox -y

我倾向于使用16k SR、16位精度和编码为16位带符号整数PCM的默认设置。我的文件是.raw格式,也可以是.pcm等。

# assume you're in the directory with the raw wavs - we'll make a new wavs directory to put the converted ones
mkdir -p wavs

# 1-liner
for f in *.raw; do sox -r 16000 -e signed -b 16 -c 1 "$f" wavs/"${f%.*}.wav"; done

要检查wav文件是否有头部,请使用soxi:

rob@tp:~/wavs$ soxi test.wav 

Input File     : 'test.wav'
Channels       : 1
Sample Rate    : 16000
Precision      : 16-bit
Duration       : 00:00:12.62 = 201984 samples ~ 946.8 CDDA sectors
File Size      : 404k
Bit Rate       : 256k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接