FFMPEG: Konvertieren Sie m4a in MP3 ohne erheblichen Verlust

Ich habe eine Menge Audiodateien (ungefähr 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: ffmpeg -i FILE.m4a FILE.mp3 aber 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 und andere von so geringer Qualität wie 96k sind m4as.

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 in etwas viel Niedrigeres als 96k konvertiert werden. (Im Moment werden die Dateien in etwa 50k 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 ' s zu konvertieren, während die aktuelle Audioqualität so gut wie möglich erhalten bleibt. (Von natürlich gibt es wahrscheinlich einige zusätzliche Verluste durch die Konvertierung von verlustbehafteten in verlustbehaftete Dateiformate.)

Danke für deine Hilfe. Wenn dies nicht möglich ist, gibt es eine Art Skript, das die erforderliche Qualität beim individuellen Konvertieren von Dateien erkennt?

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

Author: T.Todua, 2014-01-20

5 answers

Variable Bitrate (VBR) verwenden

Sie können die Option -q:a in ffmpeg verwenden, um eine MP3-Ausgabe mit variabler Bitrate (VBR) zu erstellen:

ffmpeg -i input.m4a -c:v copy -c:a libmp3lame -q:a 4 output.mp3

Welche -q:a Werte verwenden

Von FFmpeg Wiki: MP3 - :

Qualität mit -q:a (oder dem Alias -qscale:a) kontrollieren. Werte sind encoder-spezifisch, also für libmp3lame ist der Bereich 0-9 wo ein niedrigerer Wert ist eine höhere Qualität.

  • 0-3 erzeugt normalerweise transparent Ergebnisse
  • 4 (Standard) sollte sein in der Nähe der Wahrnehmungstransparenz
  • 6 erzeugt normalerweise eine "akzeptable" Qualität.

Die Option -q:a wird der Option -V im eigenständigen Befehlszeilenschnittstellentool lame zugeordnet.

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

Kodierung mehrerer Dateien

In Linux und macOS können Sie eine Bash "for loop" verwenden, um alle Dateien in einer directory:

$ mkdir newfiles
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done
 73
Author: llogan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-01-03 20:31:25

Verwenden FFmpeg befehlszeilenversion.

MP3 ist offiziell eingestellt (von 2017) und veralteter Codec (ich nenne es jetzt tot). World hat bereits auf AAC (effizienterer und qualitativ hochwertigerer Codec) umgestellt, und jeder sollte dies anstelle von MP3 verwenden:

ffmpeg -i filenameee.m4a -acodec copy output.aac

Update: Obwohl ich das nicht empfehle, produzieren leider einige minderwertige und veraltete Hardware-Entwickler immer noch Appliances, die mp3 und einige verwenden die Leute verlangen immer noch nach diesem Format... Nun, hier ist es:

ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
 34
Author: T.Todua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-01-03 17:00:02

Das hat bei mir funktioniert:

ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3
 4
Author: user205987,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-04-25 08:07:19

Auf der Grundlage vorhandener Antworten habe ich ein Bash-Skript geschrieben, das genau das tun sollte, was die Frage auf einem Ubuntu-Computer stellt (getestet am 16.04). Sie müssen avprobe installieren, das sich im Paket libav-tools befindet. Sie können avprobe mit dem folgenden Befehl

sudo apt-get install libav-tools

HINWEIS: Es wäre ratsam, eine Sicherungskopie eines Ordners zu erstellen, in dem Sie dieses Skript ausführen, und sich nach besten Kräften darum zu bemühen, zu lesen und zu verstehen, was es tut bevor ausgeführt wird.

I haben nicht sehr streng so YMMV 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
 1
Author: jbowman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-05-23 07:04:48

Wenn Sie mit 48 kHz und mindestens 24 Bit in der Eingabedatei arbeiten (aus einem Dateieditor z.B.) -q:a 0 reproduziert die 20 kHz bei keiner so großen Datei wie flac... Aber niedrige Audioqualität es sei denn, Sie reduzieren das Rauschen von hohen Frequenzen (Zischen) durch Dithering oder Nose Reduction Audio-Editoren, in Konvertierungen erstellt, die reproduziert werden, dann wird Datendatei als unhörbar HF verwenden, aber teuer Lärm.

 0
Author: Kaiser Lima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-05-02 22:27:58