使用FFmpeg for VBR将mp3转换为wav


27

我应该使用什么命令将mp3文件转换为wav比特率可变的文件。或者更好的是我怎么知道源音频是fixed比特率还是比特率variable


3
我不认为WAV文件格式支持可变比特率。由于所有MP3解码器都必须支持该文件以使其符合标准,因此您应能够将任何MP3文件转换为固定比特率的WAV,尽管结果会根据源MP3的质量和为WAV选择的固定比特率而有所不同。创建。大多数MP3播放软件都提供了一种查看正在播放的文件属性的方法,因此您可以使用它来查看要处理的源文件类型。
martineau 2013年

那命令呢?你有什么建议吗?
Soham Dasgupta

请再次阅读martineau的答案。我纠正了一些错误。值得注意的是,您无法为PCM编码的WAV文件设置比特率。
slhck

Answers:


36

您可以使用以下ffprobe song.mp3命令获取有关输入文件的比特率的一些信息。但是,这只能告诉您第一帧的比特率。MP3文件中的VBR通常是通过更改每个帧的比特率来简单实现的,因此仅通过读取第一帧的标头就无法确定其是否正在使用。我通常使用其他音频文件播放器软件来确定是否正在使用VBR,因为会显示很多(例如Foobar2000会显示)。

当您使用有损输出编解码器(例如MPEG-1 Layer III或AAC)时,ffmpeg选择输出流的默认比特率或可变比特率。这取决于编码器本身。

对于无损编解码器,您无法设置可变的比特率,因为每个样本都占用预定义的位数。ffmpeg -i song.mp3 song.wav因此,您将获得一个PCM编码的 WAV文件,其采样率为44,100 Hz,每个采样为16位。整个容器的结果约为1411 kBit / s,可能比MP3输入文件大得多。

如果要为PCM编码的WAV文件设置较小的文件大小,请设置位深度较小的采样格式(请参阅-encoders选项以获取完整列表)和/或选择较低的采样率(-ar 22050例如,使用22.05 kHz)。

这是同时做这两个例子:

ffmpeg -i song.mp3 -acodec pcm_u8 -ar 22050 song.wav

5
如果在WAV容器中编码PCM音频,则无法设置比特率。那没有意义。PCM是未压缩的格式-您不能告诉它每秒使用更多或更少的位。调整大小的唯一方法是使用不同的样本大小(请参阅-sample_fmts选项)。-ar 128k表示采样率将为128,000 Hz,而不是通常的44,1或48 kHz。
slhck

12
您最好这样做ffmpeg -i song.mp3 song.wav,因为那样会选择适当的比特率(可能是44.1khz)。如果你正在转换为WAV,你可能不想失去更多的信息..
naught101

@ naught101是正确的,实际上最好ffpmeg根据song.mp3输入数据选择正确的采样比特率。这样,输出位图wav文件将具有最佳比特率。顺便说一句,文件大小会很大,但是会过度拟合数据:`流#0:0:音频:mp3、44100 Hz,立体声,s16p,128 kb / s`
loretoparisi

1
可以肯定地说,发问者的目的是将生成的WAV文件刻录到音频CD。唯一合适的频率是44100 Hz,因此-ar 44100即使ffmpeg将自动使用合适的16位编解码器也是必须的。
Mikhail T.

3

根据@ naught101的评论,我将按照以下过程来检测最佳结果acodec

$ ffmpeg -formats | grep PCM 

 DE f32be           PCM 32-bit floating-point big-endian
 DE f32le           PCM 32-bit floating-point little-endian
 DE f64be           PCM 64-bit floating-point big-endian
 DE f64le           PCM 64-bit floating-point little-endian
 DE s16be           PCM signed 16-bit big-endian
 DE s16le           PCM signed 16-bit little-endian
 DE s24be           PCM signed 24-bit big-endian
 DE s24le           PCM signed 24-bit little-endian
 DE s32be           PCM signed 32-bit big-endian
 DE s32le           PCM signed 32-bit little-endian
 DE u16be           PCM unsigned 16-bit big-endian
 DE u16le           PCM unsigned 16-bit little-endian
 DE u24be           PCM unsigned 24-bit big-endian
 DE u24le           PCM unsigned 24-bit little-endian
 DE u32be           PCM unsigned 32-bit big-endian
 DE u32le           PCM unsigned 32-bit little-endian

此时,请考虑您的平台在big-endianlittle-endian选择比特率之间进行选择:

$ ffmpeg -i sample.mp3 
[mp3 @ 0x7fb33180da00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s

我们可以看到,该音频文件是一个mp3(尽管输入文件有扩展名,这并不明显,只检查字节),比特率为128 kb/s,编解码器为s16p,采样为44100 Hz,因此我们相应地选择:

$ ffmpeg -i sample.mp3 -acodec pcm_s16le -ar 44100 sample.wav


Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
File 'sample.wav' already exists. Overwrite ? [y/N] y
Output #0, wav, to 'sample.wav':
  Metadata:
    INAM            : Saturday
    IART            : Winterwood
    IPRD            : Love In The Heart
    IPRT            : 2/15
    TPA             : 1/1
    ITCH            : iTunes 11.0.1
    IGNR            : Country & Folk
    ICRD            : 1997
    ISFT            : Lavf56.4.101
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Metadata:
      encoder         : Lavc56.1.100 pcm_s16le
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size=   46125kB time=00:04:27.75 bitrate=1411.2kbits/s    
video:0kB audio:46125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000457%

如果您使用的是Mac,则可以检查音频white noise的开头/结尾是否没有(当mp3原始音频在某毫秒/秒内没有音频):

$ afplay sample.wav

当然,您可以仔细检查位图:

$ ffmpeg -i sample.wav
Input #0, wav, from 'sample.wav':
  Metadata:
    artist          : Winterwood
    date            : 1997
    genre           : Country & Folk
    title           : Saturday
    album           : Love In The Heart
    track           : 2/15
    encoder         : Lavf56.4.101
    encoded_by      : iTunes 11.0.1
  Duration: 00:04:27.76, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

0

使用ffmpeg转换媒体,首先使用ffprobe检查文件规范。使用此命令 ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

哪里 -pcm_s16le is codec 16 bit conversion -ar is sampling rate (16000samples/sec) -ac no of audio channel

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.