批量加速/转换音频文件的工具

Use*_*er1 7 audio linux podcasts ffmpeg

我想在手机上收听某些播客,但我有两个常见问题:

  1. 音频采用某种奇怪的格式(有些不能在我的手机上播放)。
  2. 音频很慢。

我想使用类似的东西soxavconv批量转换文件。由于这只是语音和手机,所以小的低质量文件对我来说是最好的。我使用avconv以下方法取得了一些成功:

avconv -i weird.wma normal.ogg

不幸的是,这个命令创建了一个巨大的 ogg 文件,我无法让它更快地播放。理想情况下,此特定文件将以原始速度的 170% 播放。

slh*_*hck 12

用 FFmpeg 转换

FFmpeg 有一个内置的音频过滤器,可以在不改变音高的情况下改变速度。我们需要将文件编码为手机播放的某种格式。这当然取决于手机。许多现代智能手机如 AAC 音频:

ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libfaac -q:a 100 final.m4a
Run Code Online (Sandbox Code Playgroud)

在这里,您可以使用-q:a选项更改质量,其中值以百分比表示,越高表示越好。

或者,(平均)质量为 4 的 MP3 音频,越少越好(0 导致大约 245 kBit/s):

ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libmp3lame -q:a 4 final.mp3
Run Code Online (Sandbox Code Playgroud)

如果您的手机不支持其中任何一项,我们将不得不进一步挖掘。哦,我在这里使用ffmpeg同义词avconv。它们并不完全相同,但对于上述情况,您可以使用任一工具。如果您的 FFmpeg 或 avconv 版本未捆绑 FAAC 或 LAME,请从FFmpeg 下载页面获取静态 Linux 版本。


如果您不喜欢 FFmpeg 过滤器,这是另一种方法:

提取原始音频

首先,您需要以未压缩格式提取原始音频流,例如 WAV 容器中的 PCM 立体声 16 位音频。

ffmpeg -i weird.wma temp.wav
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用该文件temp.wav来缩短音频。我们有几个选择:

选项 1:袜子

SoX提供了几种不同的过滤器,可让您更改速度、音高或节奏。简单地改变速度会增加音高以补偿长度,所以这听起来可能不自然。

tempo过滤器采用先进的算法来缩短文件,但保持间距,通过将其划分成更小的时间窗口,然后选择“合并”起来,从而加快速度。例如:

sox temp.wav output.wav -tempo 1.7
Run Code Online (Sandbox Code Playgroud)

这听起来可能有点奇怪。如果是,请使用选项 2。

选项 2:Paul 的极致声音拉伸

该程序承诺提供比 SoX 更好的质量,并且可以从 GitHub 获得用 Python 编写的命令行版本。命令可能看起来像这样 - 请记住,默认情况下它会拉伸文件,因此为了缩短它,我们计算了 1.7 的倒数,即 0.59:

python paulstretch_stereo.py -s 0.59 temp.wav output.wav
Run Code Online (Sandbox Code Playgroud)

将原始音频转换为压缩文件

现在我们有一个缩短的 WAV 文件,但它仍未压缩,因此我们需要再次压缩它。有关各种格式,请参阅本文顶部的选项。

ffmpeg -i output.wav -c:a …
Run Code Online (Sandbox Code Playgroud)

上面概述的非 ffmpeg 方法将丢失您的元数据;您可以在将 output.wav 转换为压缩格式时再次添加它,如下所示:

ffmpeg -i output.wav -i weird.wma -map 0 -map_metadata 1 -c:a ...
Run Code Online (Sandbox Code Playgroud)