Eine Reihe von MP3s in Mono konvertieren?

6065
Wil

Ich habe ein paar Stereo-MP3s, die ich gerne in Mono umwandeln möchte. Was ist der beste Weg, dies zu tun? Ich würde etwas bevorzugen, das sie stapelweise verarbeiten lassen würde. Ich möchte die Qualität so nah wie möglich am Original halten. Meine Dateien haben auch unterschiedliche Bitraten, daher möchte ich nicht alle Dateien auf 320kpbs setzen, wenn einige nur 128 sind.

Gibt es auch einen schnellen Weg, um zu sehen, welche Dateien aus meiner gesamten Bibliothek in Stereo sind?

3

4 Antworten auf die Frage

3
aibk01

Nun, es gibt mehrere Möglichkeiten, aber lassen Sie mich Sie zu denen führen, die tatsächlich funktionieren. Sie können dazu Audacity verwenden, eine kostenlose verfügbare Software.

In diesem eHow-Artikel erfahren Sie, wie Sie MP3 in Mono konvertieren können.

Kann ich aber einen ganzen Ordner mit MP3s automatisch verarbeiten? Wil vor 13 Jahren 0
Ja, ich empfehle auch die einfache und schnelle Benutzeroberfläche von Cowoon Jet Audio. aibk01 vor 13 Jahren 1
Für Audacity lesen Sie dies: http://manual.audacityteam.org/man/Batch_Processing aibk01 vor 13 Jahren 1
[Es wäre schön] (http://meta.stackexchange.com/q/8259), die wesentlichen Teile der Antwort hier aufzunehmen und den Link nur für die spätere Bezugnahme zur Verfügung zu stellen. Könnten Sie die Schritte beschreiben, die zum Konvertieren von MP3 in Mono auszuführen sind? slhck vor 13 Jahren 3
Ja, ich denke, Audacity ist das, was ich als Erstes überprüfen würde. Daniel R Hicks vor 11 Jahren 0
2
evilsoup

Converting from stereo to mono will mean re-encoding, so keeping the same bit rate would be meaningless. In fact, converting a 128 kbit/s MP3 -> a new 128 kbit/s MP3 will net you godawfully terrible quality, even if the second one is mono (and therefore requires a lower bit rate for the same subjective quality).

Generally, I would use a Variable Bit Rate (VBR) setting for MP3, which targets a specific quality and lets the encoder set whatever bit rate is required (completely silent audio needs a lower bit rate than whalesong, which needs a lower bit rate than dubstep). From the command-line, ffmpeg can convert audio to mono with the option -ac 1, like so:

ffmpeg -i input.mp3 -c:a libmp3lame -q:a 2 -ac 1 output.mp3 

See this page for a guide to using -q:a. Note that the table on that page is aimed at stereo audio; the actual bit rates you'll see will be somewhat lower. Normally, I recommend 3-4, but since you're encoding from MP3s rather than an original CD, you should aim a bit higher.

This can, of course, be automated very easily. On Linux/OSX/other UNIX-like, to convert a directory of MP3s:

for f in *.mp3; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 -ac 1 mono-"$f"; done 

To do so recursively:

find . -type f -name "*.mp3" -exec ffmpeg -i '{}' -c:a libmp3lame -q:a 2 -ac 1 mono-'{}' \; 

If you have GNU Parallel and a multi-core machine, you may find this useful:

find . -type f -name "*.mp3" | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 -ac 1 mono-{} 
Ich erhalte eine Reihe von Fehlern "Keine solche Datei oder Verzeichnis". Iulian Onofrei vor 7 Jahren 0
1
Ярослав Рахматуллин

Lame kann mit dem Schalter -m in Dateien in Mono konvertiert werden, wobei der Vorteil darin besteht, Metatags zu erhalten (ich bin nicht sicher, ob ffmpeg das auch kann).

Hier ist ein etwas kompliziertes Beispiel, das die Bitrate einer MP3-Datei vor dem Transcodieren mit einer der variablen Bitratenqualitätsoptionen bestimmt.

Katze s2mono.sh #! / bin / bash  mp3file = $ @  mp3size () { du -sk "$ 1" | awk '' } mp3length () { id3info "$ 1" | \ awk '/ === TLEN / } END ' } mp3rate () { echo $ ((`mp3size" $ 1 "` / `mp3length" $ 1 "`)) }  bitrate = `mp3rate" $ mp3file "` if [$ bitrate -gt 155]; dann ist VBR = '- V4'; fi wenn [$ bitrate -gt 190]; dann VBR = '- V2'; fi if [$ bitrate -gt 249]; dann ist VBR = '- V0'; fi  Echo-Downsampling von $ mp3-Datei lahm --silent $ VBR -mm --mp3input "$ mp3file" \ "$ (Basisname" $ ​​mp3-Datei ".mp3) -mono.mp3" 

Ich lief dies in einem Ordner, in dem die Gesamtgröße aller MP3-Dateien 80 MB im Stereo-Format betrug. Die resultierenden Mono-MP3-Dateien benötigten nur 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' 80112 

Was den letzten Teil Ihrer Frage betrifft, filewerden Sie Folgendes tun:

 find /R/audio/muzica/_ripped/wav -exec file {} \+ |grep Monaural 
In der Tat bewahrt FFmpeg Metadaten auf und verwendet die LAME-Bibliothek für den Umgang mit MP3-Dateien (allerdings mit einer eigenen Syntax anstelle der LAME-Syntax). evilsoup vor 11 Jahren 0
0
Ian

Aufbauend auf dieser Antwort können Sie eine tragbarere Lösung erhalten (keine zusätzlichen Abhängigkeiten, keine Probleme mit ID3v1-Tags im Vergleich zu ID3v2-Tags), wenn Sie nur fileund verwenden sed. Ich habe auch ein bisschen mehr von den Bitrateneinstellungen eingegeben.

In diesem Skript müssen Sie die Eingabe- und Ausgabedateien in der Befehlszeile angeben.

#!/bin/bash # # Usage: (this script) stereo-input.mp3 mono-output.mp3 # # concept via https://superuser.com/a/566023/253931 #  # gnu/linux bitrate=`file "$1" | sed 's/.*, \(.*\)kbps.*/\1/'`  # osx # bitrate=`afinfo "$1" | grep "bits per second" | sed 's/.*: \(.*\)000 bits per second.*/\1/'`  BR='-V9' if [ $bitrate -gt 75 ]; then BR='-V8'; fi if [ $bitrate -gt 90 ]; then BR='-V7'; fi if [ $bitrate -gt 105 ]; then BR='-V6'; fi if [ $bitrate -gt 120 ]; then BR='-V5'; fi if [ $bitrate -gt 145 ]; then BR='-V4'; fi if [ $bitrate -gt 170 ]; then BR='-V3'; fi if [ $bitrate -gt 180 ]; then BR='-V2'; fi if [ $bitrate -gt 215 ]; then BR='-V1'; fi if [ $bitrate -gt 230 ]; then BR='-V0'; fi if [ $bitrate -gt 280 ]; then BR='-b320'; fi  echo "mono-izing file with detected bitrate '$bitrate': $1" lame --silent $BR -m m --mp3input "$1" "$2"