webentwicklung-frage-antwort-db.com.de

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

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 ffmpeg -i FILE.m4a FILE.mp3 zu machen, 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 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 man sie in etwas viel Niedrigeres als 96k konvertiert. (Momentan werden die Dateien auf ca. 50.000 konvertiert.)

Weiß jemand, wie ich das machen kann? Was ich wirklich tun möchte, ist, dass ffmpeg alle M4A-Dateien in einem Verzeichnis in MP3s konvertiert, wobei die aktuelle Audioqualität so gut wie möglich beibehalten wird. (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.

40
user3728501

VBR

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

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 führt normalerweise zu transparenten Ergebnissen, 4 (Standardeinstellung) sollte der Wahrnehmungstransparenz nahe kommen, und 6 führt normalerweise zu einer "akzeptablen" Qualität. Die Option -qscale:a ist der Option -V im eigenständigen LAME-Befehlszeilenschnittstellentool zugeordnet.

Sie müssen experimentieren, um herauszufinden, welcher Wert für Sie akzeptabel ist. Siehe auch Wasserstoff-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

ffmpeg holen

Es wird empfohlen, wenn möglich einen aktuellen Build von ffmpeg zu verwenden. Auf der Seite FFmpeg-Download finden Sie Links zu Builds für OS X, Linux und Windows. Sie können auch einer Anleitung folgen, um FFmpeg zu kompilieren.

46
llogan

benutze FFmpeg (es gibt auch viele GUI Versionen)

  1. MP3 ist bereits eingestellt (in 2017), veralteter Codec. Das Internet hat bereits auf AAC umgestellt (effizienter und qualitativ hochwertiger Codec):

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

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

Das hat bei mir funktioniert:

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

Auf der Grundlage der vorhandenen Antworten habe ich ein Bash-Skript geschrieben, das genau das tun soll, was in der Frage auf einem Ubuntu-Computer (getestet am 16.04) steht. Sie müssen avprobe installieren, das im libav-tools-Paket enthalten ist. Sie können avprobe mit dem folgenden Befehl installieren

Sudo apt-get install libav-tools

HINWEIS: Es ist ratsam, eine Sicherungskopie aller Ordner zu erstellen, in denen Sie dieses Skript ausführen, und sich nach besten Kräften um das Lesen und Verstehen der Funktionsweise zu bemühen. vor dem Laufen.

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
1
jbowman

Wenn Sie mit 48 kHz und mindestens 24 Bit in der Eingabedatei arbeiten (aus einem Datei-Editor, z. B.), wird -q:a 0 die 20 kHz bei keiner so großen Datei wie flac wiedergeben ... Aber Audio von geringer Qualität, es sei denn, Sie reduzieren die Rauschen von hohen Frequenzen (Rauschen) durch Dithering- oder Nasenreduzierungs-Audio-Editoren, die in Konvertierungen erstellt wurden und reproduziert werden. Anschließend wird die Datendatei als unhörbares, aber teures HF-Rauschen verwendet.

0
Kaiser Lima