我想在手机上收听某些播客,但遇到了两个常见问题:
- 音频的格式很奇怪(有些无法在我的手机上播放)。
- 響鳴很慢。
我想使用类似sox
或的工具avconv
来批量转换文件。由于这只是语音,并且是在手机上使用,因此小型低质量文件对我来说是最好的。我使用以下方法取得了一些成功avconv
:
avconv -i weird.wma normal.ogg
不幸的是,这个命令会创建一个非常大的 ogg 文件,我无法让它播放得更快。理想情况下,这个特定文件的播放速度应为原始速度的 170%。
答案1
使用 FFmpeg 转换
FFmpeg 有一个内置音频过滤器,可以改变节奏而不改变音调。我们需要将文件编码为手机播放的某种格式。这当然取决于手机。许多现代智能手机都喜欢 AAC 音频:
ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libfaac -q:a 100 final.m4a
在这里,您可以使用选项更改质量-q:a
,其中值以百分比表示,值越高越好。
或者,MP3 音频的 (平均) 质量为 4,其中越低表示越好 (0 导致大约 245 kBit/s):
ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libmp3lame -q:a 4 final.mp3
如果您的手机不支持其中任何一种,我们将不得不进一步挖掘。哦,我ffmpeg
在这里使用了同义词avconv
。它们并不完全相同,但对于上述情况,您可以使用任一工具。如果您的 FFmpeg 或 avconv 版本不捆绑 FAAC 或 LAME,请从获取静态 Linux 版本FFmpeg 下载页面。
如果您不喜欢 FFmpeg 过滤器,这里还有另一种方法:
提取原始音频
首先,您需要以未压缩的格式提取原始音频流,例如 WAV 容器中的 PCM 立体声 16 位音频。
ffmpeg -i weird.wma temp.wav
现在我们可以使用该文件temp.wav
来缩短音频。我们有几个选择:
选项 1:SoX
索克斯提供了几种不同的过滤器,可让您更改速度、音调或节奏。单纯改变速度会增加音调以补偿长度,因此听起来可能不自然。
该tempo
过滤器使用高级算法来缩短文件但保持音调,方法是将文件划分为更小的时间窗口然后“合并”它们,从而加快节奏。例如:
sox temp.wav output.wav -tempo 1.7
这听起来可能有点奇怪。如果是这样,请采取选项 2。
选项 2:Paul 的极限声音拉伸
该程序承诺提供比 SoX 更好的质量,并且有一个用 Python 编写的命令行版本可从 GitHub 获取。命令可能看起来像这样 - 请记住,它默认会拉伸文件,因此为了缩短它,我们计算 1.7 的倒数,即 0.59:
python paulstretch_stereo.py -s 0.59 temp.wav output.wav
将原始音频转换为压缩文件
现在我们有了一个缩短的 WAV 文件,但它仍未压缩,因此我们需要再次压缩它。请参阅本文顶部的选项以了解各种格式。
ffmpeg -i output.wav -c:a …
上面概述的非 ffmpeg 方法将丢失您的元数据;您可以在将 output.wav 转换为压缩格式时再次添加它,如下所示:
ffmpeg -i output.wav -i weird.wma -map 0 -map_metadata 1 -c:a ...