我喜欢 VLC 减慢音频播放速度的选项。
现在我想将我的 mp3 文件转移到便携式播放器上并在那里播放。不幸的是,玩家没有减速选项。
如何转换 mp3,使其听起来像是使用 VLC 缓慢播放的?
我更喜欢命令行工具,但也会接受其他适用于 GNU/Linux 的免费软件工具。
答案1
我建议使用索克斯像这样:
sox <input> <output> tempo 0.5
这会将速度减慢<input>
2 倍并将结果记录到<output>
.
您可以添加选项--show-progress
来显示相关信息和进度百分比。
请注意,如果<input>
isnormal.wav
和<output>
is half-tempo.ogg
,SoX 将自行检测不同的音频编码(有关该部分的更多控制,请阅读man sox
)。
该tempo
算法应该给出与 VLCscaletempo
模块类似的结果。但是您可以尝试替代stretch
算法:
sox <input> <output> stretch 2
预计结果会更加综合(再次阅读man sox
以了解详细信息),并且请注意该参数是给定参数的倒数tempo
(2
而不是0.5
在本示例中)。
SoX 通过 和 选项提供了更多时间操纵的可能性speed
,pitch
并且bend
可以轻松探索。
要安装 SoX,请使用apt-get
:
sudo apt-get install sox
要启用额外的编解码器(包括 MP3),请添加此库:
sudo apt-get install libsox-fmt-all
最后一点,我会回到 VLC,因为您可以通过以下方式从命令行放慢速度播放文件:
cvlc --rate 0.5 <input>
因此,可能有一种方法可以要求 VLC 将结果保存到某个文件,或者将音频输出到 JACK,然后使用 JACK 兼容的录音机。
答案2
以下脚本使用 ffmpeg 执行此操作。
#!/bin/sh
# Usage:
# slow_down.sh infile.mp3 outfile.mp3 0.75
# Can't slow down more than by a factor of 0.5 (limitation of ffmpeg).
if [ $# -lt 3 ]; then
echo 1>&2 "$0: not enough arguments"
exit 2
fi
rm -f $2 temp.mp4
ffmpeg -i $1 -filter_complex "[0:a]atempo=$3[a]" -map "[a]" -c:a aac temp.mp4
ffmpeg -i temp.mp4 -ar 48000 $2
rm -f temp.mp4
这可能可以简化,但我无法弄清楚如何将两个 ffmpeg 命令合并为一个。
我发现这个方法的输出听起来比 sox 提供的两种算法的结果好得多。对我来说,这听起来与在 YouTube 界面中减慢音频速度的效果一样好。
答案3
ffmpeg -i "audio.mp3" -filter:a "atempo=0.5" "output_audio.mp3"
for %f in (*.mp3) do ffmpeg -i "%f" -filter:a "atempo=0.5" "output\slow_%f"