FFMPEG: Konvertieren Sie M4A-Dateien in MP3-Dateien ohne nennenswerten Informations- / Qualitätsverlust. Automatisierte Bitrate


44

Ich habe eine Menge Audiodateien (ca. 1000), die ich von m4a in mp3 konvertieren möchte, damit ich sie auf einem CD-Player mit USB-Anschluss abspielen kann.

Ich habe versucht, etwas Einfaches wie: zu tun, ffmpeg -i FILE.m4a FILE.mp3aber dies scheint die Bitrate auf einen sehr niedrigen Wert zu reduzieren, was ich nicht will.

Ebenso möchte ich nicht mit einer konstanten Bitrate wie 320k konvertieren, da einige der Dateien, die ich konvertiere, 320k m4as sind und einige eine niedrige Qualität wie 96k m4as haben.

Es scheint keinen Sinn zu machen, 320k zu erzwingen, da einige Dateien um ein Vielfaches größer werden, als sie sein müssen. Ebenso macht es keinen Sinn, alle meine 320k-Dateien zu zerstören, indem Sie sie in etwas viel Niedrigeres als 96k konvertieren. (Momentan werden die Dateien auf ca. 50.000 konvertiert.)

Weiß jemand, wie ich das machen kann? Was ich wirklich tun möchte, ist, FFMPEG anzuweisen, alle M4A-Dateien in einem Verzeichnis in MP3-Dateien zu konvertieren und dabei die aktuelle Audioqualität so gut wie möglich beizubehalten. (Natürlich kann die Konvertierung von verlustbehafteten in verlustbehaftete Dateiformate zu zusätzlichen Verlusten führen.)

Danke für Ihre Hilfe. Wenn dies nicht möglich ist, gibt es eine Art Skript, das die erforderliche Qualität erkennt, wenn es Dateien einzeln konvertiert?

PS: Ich arbeite an einem Intel Mac, habe aber auch eine Ubuntu-Box.

Antworten:


51

VBR

Sie können die -qscale:aOption in verwenden ffmpeg, um eine MP3-Ausgabe mit variabler Bitrate (VBR) zu erstellen. Aus FFmpeg-Wiki: Kodieren von VBR-MP3-Audio (Variable Bit Rate) :

Steuern Sie die Qualität mit -qscale:a(oder dem Alias -q:a). Die Werte sind encoderspezifisch. Für libmp3lame beträgt der Bereich 0-9, wobei ein niedrigerer Wert eine höhere Qualität bedeutet. 0-3 erzeugt normalerweise transparente Ergebnisse, 4 (Standardeinstellung) sollte der Wahrnehmungstransparenz nahe kommen, und 6 erzeugt normalerweise eine "akzeptable" Qualität. Die Option -qscale:awird der -VOption im eigenständigen Befehlszeilenschnittstellentool zugeordnet.

Sie müssen experimentieren, um herauszufinden, welcher Wert für Sie akzeptabel ist. Siehe auch Hydrogen Audio: Empfohlene LAME-Encoder-Einstellungen .

Kodierung mehrerer Dateien

Sie können eine Bash "for loop" verwenden, um alle Dateien in einem Verzeichnis zu kodieren:

$ mkdir newfiles
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done

Erhalten ffmpeg

Es wird empfohlen, ffmpegwenn möglich eine neuere Version von zu verwenden. Auf der FFmpeg-Download- Seite finden Sie Links zu Builds für OS X, Linux und Windows. Sie können auch einer Anleitung zum Kompilieren von FFmpeg folgen .


1
Okay, danke, die Befehle haben funktioniert, aber ich glaube nicht, dass sie das tun, was ich wollte. Ich habe -q: a 0 gesetzt, was genau das ist, was ich für M4As mit höherer Qualität erwartet hatte (das Erzeugen großer Dateien mit höheren VBR-Raten), aber Dateien mit geringerer Qualität, von denen ich denke, dass sie immer noch in große Dateien konvertiert werden, mit VBRs von etwa 250-260 kb / s. Ich hätte erwartet, dass die Dateien, die etwa 96k im M4A-Format haben, mit dem LAME-Encoder im VBR-Modus in eine ähnliche Bitrate konvertiert werden. Ich gehe davon aus, dass ich nicht ganz verstanden habe, wie der VBR-Codierungsmodus funktioniert.
user3728501

19

benutze FFmpeg (es gibt auch viele GUI Versionen)

  1. MP3 ist bereits eingestellt (im Jahr 2017), veralteter Codec. Das Internet ist bereits auf AAC umgestiegen (effizienterer und hochwertigerer Codec):

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. Wenn Sie dennoch MP3 verwenden möchten (da es noch von mehreren Geräten unterstützt wird):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    

4
Da es sich um eine Frage zur Qualität handelt, ist es möglicherweise von Vorteil, auf 256 KB anstelle von 128
KB umzustellen.

3

Das hat bei mir funktioniert:

ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3

1

Auf der Grundlage der vorhandenen Antworten habe ich ein Bash-Skript geschrieben, das genau das tun sollte, was die Frage auf einem Ubuntu-Computer (getestet am 16.04) stellt. Sie müssen installieren, avprobewas im libav-toolsPaket enthalten ist. Sie können avprobemit dem folgenden Befehl installieren

sudo apt-get install libav-tools

ANMERKUNG: Es ist ratsam, eine Sicherungskopie aller Ordner zu erstellen, in denen Sie dieses Skript ausführen, und sich nach besten Kräften zu bemühen, vor der Ausführung zu lesen und zu verstehen, was es tut .

Ich habe YMMV also nicht sehr rigoros getestet.

#!/bin/bash

mkdir "mp3s"
for f in *.m4a;
do
    bitrate=$(avprobe "${f}" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g')
    bitrate="${bitrate}K"
    new_filename=$(echo "${f}" | sed 's/.m4a$/.mp3/g')
    ffmpeg -y -i "${f}" -acodec libmp3lame -ab "${bitrate}" "mp3s/${new_filename}"
done

0

Wenn Sie mit 48 kHz und mindestens 24 Bit in der Eingabedatei arbeiten (aus einem Datei-Editor, z. B.), -q:a 0werden die 20 kHz in einer nicht so großen Datei wie in Schwarz wiedergegeben Von hohen Frequenzen (Rauschen) durch Dithering oder Nasenreduzierung erzeugte Audio-Editoren, die reproduziert werden, verwenden die Datendateien als unhörbare HF, aber teures Rauschen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.