將一堆 MP3 轉換為單聲道?

將一堆 MP3 轉換為單聲道?

我有一堆立體聲 MP3,我想將其轉換為單聲道。做這個的最好方式是什麼?我更喜歡可以批量處理它們的東西。我想保持盡可能接近原版的品質。我的檔案也有不同的位元率,所以我不想讓所有檔案都為 320kpbs,而有些檔案只有 128。

另外,有什麼快速方法可以查看整個庫中哪些文件是立體聲的?

答案1

從立體聲轉換為單聲道意味著重新編碼,因此保持相同的位元率是沒有意義的。事實上,轉換128 kbit/s MP3 -> 一個新的128 kbit/s MP3 會給你帶來極其糟糕的質量,即使第二個是單聲道的(因此需要較低的比特率才能獲得相同的主觀品質)。

一般來說,我會為MP3 使用可變比特率(VBR) 設置,它以特定質量為目標,並讓編碼器設置所需的任何比特率(完全靜音的音頻需要比鯨歌更低的比特率,鯨歌需要比鯨歌更低的比特率)迴響貝斯)。在命令列中,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

mp3文件=$@

mp3大小(){
    杜-sk“$1”| awk '{印 $1 * 8 }'
}
mp3長度(){
    id3info“$1”| \
        awk '/=== TLEN/ { if ($NF > 0) { len=int( $NF/1000) }} END {print len}'
}
mp3率(){
    迴聲 $(( `mp3size "$1"` / `mp3length "$1"` ))
}

位元速率=`mp3rate "$mp3file"`
如果 [ $bitrate -gt 155 ];則VBR='-V4';菲
如果 [ $位元速率 -gt 190 ];那麼VBR='-V2';菲
如果 [ $bitrate -gt 249 ];那麼VBR='-V0';菲

echo 下採樣 $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";完成

相關內容