我有一堆立体声 MP3,我想将它们转换为单声道。最好的方法是什么?我更喜欢可以批量处理它们的东西。我想让质量尽可能接近原始质量。我的文件也采用不同的比特率,所以我不想让所有文件都变成 320kpbs,而有些文件只有 128kpbs。
另外,有没有什么快速的方法可以查看我的整个库中哪些文件是立体声的?
答案1
从立体声转换为单声道意味着重新编码,因此保持相同的比特率毫无意义。事实上,将 128 kbit/s MP3 转换为新的 128 kbit/s MP3 将产生极其糟糕的质量,即使第二个是单声道(因此需要较低的比特率才能获得相同的主观质量)。
通常,我会对 MP3 使用可变比特率 (VBR) 设置,该设置针对特定质量并允许编码器设置所需的任何比特率(完全静音的音频需要的比特率低于 whalesong,而 whalesong 需要的比特率低于 dubstep)。从命令行,ffmpeg 可以使用选项将音频转换为单声道-ac 1
,如下所示:
ffmpeg -i input.mp3 -c:a libmp3lame -q:a 2 -ac 1 output.mp3
看这一页了解使用指南-q:a
。请注意,该页上的表格针对的是立体声音频;您看到的实际比特率会略低一些。通常,我建议使用 3-4,但由于您是从 MP3 而不是原始 CD 进行编码,因此您应该将目标设得更高一些。
当然,这可以很容易地实现自动化。在 Linux/OSX/其他类 UNIX 上,要转换 MP3 目录:
for f in *.mp3; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 -ac 1 mono-"$f"; done
以递归方式执行此操作:
find . -type f -name "*.mp3" -exec ffmpeg -i '{}' -c:a libmp3lame -q:a 2 -ac 1 mono-'{}' \;
如果您有 GNU Parallel 和多核机器,您可能会发现这很有用:
find . -type f -name "*.mp3" | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 -ac 1 mono-{}
答案2
答案3
Lame 可以使用 -m 开关将文件转换为单声道,这样做的优点是可以保留元标记(我不确定 ffmpeg 是否也可以做到这一点)。
这是一个有点复杂的例子,它在使用可变比特率质量选项之一对 mp3 进行转码之前确定其比特率。
猫s2mono.sh /bin/bash #!/bin/bash mp3文件=$@ mp3大小(){ du -sk "$1" | awk'{打印$1*8}' } mp3长度(){ id3info“$1”| \ awk'/=== TLEN/{如果($NF> 0){len=int($NF/1000)}} END{打印len}' } mp3速率(){ 回显 $(( `mp3size "$1"` / `mp3length "$1"` )) } 比特率=`mp3rate“$mp3file”` 如果 [ $bitrate -gt 155 ]; 则 VBR='-V4'; fi 如果 [ $bitrate -gt 190 ]; 则 VBR='-V2'; fi 如果 [ $bitrate -gt 249 ]; 则 VBR='-V0'; fi 回显下采样 $mp3file lame --silent $VBR -mm --mp3input "$mp3file" \ “$(basename“$mp3file”.mp3)-mono.mp3”
我在一个文件夹中运行了这个程序,其中所有 mp3 的总大小为 80 MB(立体声格式)。生成的单声道 mp3 仅占用 32 MB。
find . -iname \*mp3 -print0 |xargs -0 -L1 sh s2mono.sh
(...)
du -skc *-mono.mp3| tail -n1
32376 total
find . -iname \*mp3 |grep -ve '-mono' |\
while read f; do du -sk "$f" ;done |\
awk '{ tot+=$1} END{print tot}'
80112
至于你的问题的最后一部分,file
将会这样做:
find /R/audio/muzica/_ripped/wav -exec file {} \+ |grep Monaural
答案4
这是我发现的最简单的方法
对于我在.mp3;执行 ffmpeg -i "$i" -ac 1 "${i%.}-mono.mp3”;完成
同样的办法也可以用来将其他音频格式转换为 mp3 以及转换为单声道
对于我在.m4b;执行 ffmpeg -i“$i”-ac 1“${i%.}-mono.mp3”;完成