将一堆 MP3 转换为单声道?

将一堆 MP3 转换为单声道?

我有一堆立体声 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

嗯,有几种方法,但让我来告诉你一些真正有效的方法。你可以使用大胆,一款免费可用的软件。

请看这个eHow 的文章关于如何将 MP3 转换为单声道。

答案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”;完成

相关内容