使用 ffmpeg 更改音频文件的样本格式和位深度

Cla*_*gge 8 music ffmpeg

我用 Ardor 录制并混音了一张 CD 的自制音乐,然后愚蠢地以 48 kHz 和 24 位导出所有歌曲。现在我需要 44,1 和 16 位的版本,以便让 CDBaby 接收它并将其交给 iTunes、Spotify 等。我原以为他们会想要 mp3,但没有。我想我会做类似的事情:

ffmpeg -i song.wav
Run Code Online (Sandbox Code Playgroud)

并设置新的采样率:

-ar 44100
Run Code Online (Sandbox Code Playgroud)

但如何将比特率降低到 16?我找不到任何提示...大多数 ffmpeg 问题都与视频有关,我在第一个可能的线程和另一个可能的线程之后迷失了方向。

llo*_*gan 12

使用默认值

WAV 输出的默认值是 16 位编码器 ( pcm_s16le),因此您需要做的就是:

ffmpeg -i input.wav -ar 44100 output.wav
Run Code Online (Sandbox Code Playgroud)

或者手动声明一个16位编码器

ffmpeg -i input.wav -c:a pcm_s16le -ar 44100 output.wav
Run Code Online (Sandbox Code Playgroud)
  • 查看编码器列表ffmpeg -encoders
  • 查看编码器支持哪些音频样本格式(位深度)ffmpeg -h encoder=pcm_s16le

或者手动设置音频样本格式

有了这个-sample_fmt选项。

ffmpeg -i input.wav -sample_fmt s16 -ar 44100 output.wav
Run Code Online (Sandbox Code Playgroud)
  • 查看音频样本格式(位深度)列表ffmpeg -sample_fmts

或者使用aformat过滤器

ffmpeg -i input.wav -af "aformat=sample_fmts=s16:sample_rates=44100" output.wav
Run Code Online (Sandbox Code Playgroud)


Lar*_*amo 2

这可能与示例格式有关吗?

要查看选项:ffmpeg -sample_fmts

对你来说,它会是这样的,

ffmpeg -i input -sample_fmt s16 -ar 44000 output

参考: https: //ffmpeg.org/ffmpeg.html#toc-Audio-Options


and*_*.46 2

我怀疑 SoX 可能是完成这项工作的更好工具。我创建了一个采样率为 48.0 kHz、位深度为 24 位的示例文件,我在相关部分中标出了箭头:

andrew@ilium~/tmp$ mediainfo luckynight_48_24.wav 
General
Complete name                            : luckynight_48_24.wav
Format                                   : Wave
File size                                : 16.6 MiB
Duration                                 : 1 min 0 s
Overall bit rate mode                    : Constant
Overall bit rate                         : 2 304 kb/s

Audio
Format                                   : PCM
Format settings                          : Little / Signed
Codec ID                                 : 00000001-0000-0010-8000-00AA00389B71
Duration                                 : 1 min 0 s
Bit rate mode                            : Constant
Bit rate                                 : 2 304 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz  <-----
Bit depth                                : 24 bits   <-----
Stream size                              : 16.6 MiB (100%)
Run Code Online (Sandbox Code Playgroud)

现在我不是 SoX 大师,但以下命令肯定将上述文件转换为 44.1 kHz 的采样率和 16 位的位深度(如您所要求的):

sox luckynight_48_24.wav -r 44100 -b 16 luckynight_44_16.wav
Run Code Online (Sandbox Code Playgroud)

这完成了以下任务,并且我再次在相关部分中标出了箭头:

andrew@ilium~/tmp$ mediainfo luckynight_44_16.wav 
General
Complete name                            : luckynight_44_16.wav
Format                                   : Wave
File size                                : 10.2 MiB
Duration                                 : 1 min 0 s
Overall bit rate mode                    : Constant
Overall bit rate                         : 1 411 kb/s

Audio
Format                                   : PCM
Format settings                          : Little / Signed
Codec ID                                 : 1
Duration                                 : 1 min 0 s
Bit rate mode                            : Constant
Bit rate                                 : 1 411.2 kb/s
Channel(s)                               : 2 channels
Sampling rate                            : 44.1 kHz  <-----
Bit depth                                : 16 bits   <-----
Stream size                              : 10.2 MiB (100%)
Run Code Online (Sandbox Code Playgroud)

这正是您所追求的:)