Konvertieren Sie .flac mit ffmpeg in .mp3, wobei alle Metadaten erhalten bleiben

85

Wie kann ich .flac mit ffmpeg in .mp3 konvertieren und dabei alle Metadaten beibehalten (dh Vorbis-Kommentare in .flac-Dateien in ID3v2-Metadaten von .mp3 konvertieren)?

Vito Gentile
quelle
4
Bitte beachten Sie, dass Sie beim nächsten Mal Fragen zur ffmpegVerwendung von Cli bei Super User stellen sollten . Der Stapelüberlauf ist nur für Fragen zur Programmierung vorgesehen. Außerdem unterstützt FLAC offiziell nur Vorbis-Kommentare , daher gehe ich davon aus, dass Sie in ID3v2 konvertieren möchten, anstatt "behalten".
Llogan
Ok, ich habe meine Frage behoben. Ich habe hier gefragt, weil ich solche Fragen auf StackOverflow gesehen habe (z. B. dies oder das ) und angenommen habe, dass es interessant sein könnte, mein Wissen zu teilen. Außerdem sehe ich, dass es ein ffmpeg-Tag gibt. Warum also nicht meine Lösung hier teilen? ffmpeg wird in vielen Anwendungen von vielen Entwicklern verwendet.
Vito Gentile
2
Das ffmpeg- Tag lautet: "Fragen zur interaktiven Verwendung des FFmpeg-Befehlszeilentools sollten bei Super User gestellt werden." Es ist keine große Sache, aber ich wollte nur darauf hinweisen, da es meiner Meinung nach hier zu viele Fragen außerhalb des Themas gibt.
Llogan

Antworten:

146

Der folgende Befehl bietet eine hohe Qualität für MP3 (320 kbit / s), und Metadaten aus FLAC-Dateien werden in das ID3v2-Format konvertiert, das in MP3-Dateien enthalten sein kann:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
Vito Gentile
quelle
1
Es ist erwähnenswert, dass "ffmpeg" möglicherweise durch "avconv" ersetzt werden muss.
Schockbrenner
5
FWIW ffmpeg3.2 kopiert Metadaten automatisch aus FLAC in ID3v2, ohne dass dies angegeben werden muss -map_metadata 0 -id3v2_version 3, obwohl es nicht in ID3v1-Tags kopiert wird. Ich benutze dafür ein separates Tool.
Dai
1
Die Texte werden immer noch nicht kopiert
user151496
1
Teilt es Flac, wenn es mehrere Teile gibt?
Artyom
1
@Artyom Sie sollten wahrscheinlich die Cue- Datei zusammen mit Ihrem Flac haben, wo die Split-Punkte markiert sind. Wenn ja, können Sie shnsplit (Konsole) oder flacon (GUI) verwenden, um Ihre Datei zu teilen und die Teile in MP3 zu konvertieren. Wenn Sie nur einen einzigen Flac haben , können Sie entweder einen Cui dafür schreiben oder die Optionen -ss und -t von ffmpeg verwenden , um jeden Song auszuschneiden.
Herman Yanush
55

Perfekte Antwort oben. Ich benutze es zusammen mit find, um mit diesem Befehl alle FLAC-Dateien in einem Teilbaum zu iTunes hinzuzufügen

find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;

Um die resultierenden Dateien automatisch zu iTunes hinzuzufügen, rufen Sie das iTunes-Importverzeichnis mit auf

find ~/Music/ -name "Automatically Add*"

Ergebnis zB

/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized

Dann laufen zB

find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;

So fügen Sie automatisch alle konvertierten Titel zu iTunes hinzu

user2707001
quelle
3
" / Users / sir ", lmao.
Harry Svensson
Anekdote: Alle Benutzer in unserem Unternehmen haben Namen von Sternen, abgekürzt mit 3-5 Zeichen. Meins ist "sirius", kurz sir;)
user2707001
Nicht erkannte Option 'Name'.
MonsterMMORPG
13

Wenn Sie etwas Platz sparen möchten, probieren Sie die Empfehlung von hydraud.io :

Sehr hohe Qualität: HiFi, zu Hause oder die leise Hören, mit dem besten Dateigröße -V0 (~245 kbps), -V1 (~225 kbps), -V2 (~190 kbps)oder -V3 (~175 kbps)empfohlen. Diese VBR-Einstellungen führen normalerweise zu transparenten Ergebnissen. Hörbare Unterschiede zwischen diesen Voreinstellungen können bestehen, sind jedoch selten.

Quelle: http://wiki.hydrogenaud.io/index.php?title=LAME

Wenn Sie diese Option in ffmpeg verwenden möchten, sollten Sie den -q:a 0Alias ​​verwenden.

Kontrollieren Sie die Qualität mit -qscale:a(oder dem Alias -q:a). Die Werte sind encoderspezifisch, daher liegt der Bereich für libmp3lame zwischen 0 und 9, wobei ein niedrigerer Wert eine höhere Qualität darstellt. 0-3 führt normalerweise zu transparenten Ergebnissen, 4 (Standard) sollte nahe an der Wahrnehmungstransparenz liegen und 6 erzeugt eine "akzeptable" Qualität. Die Option -qscale:awird der -VOption im eigenständigen lahmen Befehlszeilenschnittstellentool zugeordnet.

Quelle: https://trac.ffmpeg.org/wiki/Encode/MP3

Wenn Sie auch ID3v1-Metatags möchten, sollten Sie den -write_id3v1 1Parameter hinzufügen .

Mein letzter Befehl lautet also:

ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3
wiktor
quelle
8

Ich habe den folgenden Befehl getestet, um eine infile.flacDatei zu konvertieren outfile.mp3:

ffmpeg  -i infile.flac  -q:a 0  outfile.mp3

Ab Ubuntu 16.04 scheint der obige Befehl (die meisten? Alle?) Die Metadaten zu kopieren.

-q:a 0sagt ffmpeg, die höchste Qualität VBR zu verwenden.

Allerdings ffmpegwurde mein Albumcover von jpegbis transkodiert png, was die Größe des Cover-Designs erhöhte.

Stream mapping:
  Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

(Ich denke , die obige Umwandlung Art macht Sinn , wie gegeben ffmpegWerke .)

Nach einigem Graben fand ich die -c:v copyOption, die angibt, dass der Videostream kopiert und nicht transkodiert werden soll. Der vollständige Befehl lautet:

ffmpeg  -i infile.flac  -c:v copy  -q:a 0  outfile.mp3

Der obige Befehl führt zu:

Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
mpb
quelle
3

Um alle flac-Dateien in verschachtelten Ordnern rekursiv in MP3 zu konvertieren, habe ich diesen Befehl verwendet:

find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;

Es wird ein Ordner mit dem Namen "mp3" in dem Ordner mit flac-Dateien erstellt und im mp3-Ordner werden relative mp3-Dateien mit einer Bitrate von 320 kbps gespeichert, ohne dass die alte Dateierweiterung im Namen bleibt.

Riccardo Volpe
quelle
3

Einzeiler zum Konvertieren aller .flacDateien .mp3in ein einziges Verzeichnis unter Beibehaltung der meisten Metadaten:

for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done

(Hinweis: ${file:r}Entfernt die Erweiterung des angegebenen Dateipfads.)

ffmpeg: flac zu mp3

Woudsma
quelle
Zitieren Sie einfach die Variable $filewie "$file".
Chazy Chaz
:rscheint ein zshModifikator zu sein, der nicht funktioniert bash. In Bash könnten Sie ersetzen "${file:r}.mp3"mit "${file%.flac}.mp3".
Mivk
um nur den Dateinamen aus der Datei ${file%.*}
anzuzeigen
2

Ich weiß, dass dies nicht gefragt wurde, aber wenn man bedenkt, dass einer der Gründe dafür (zumindest wollte ich das tun) darin besteht, dass die Musik in Apple iTunes importiert werden kann, das FLAC nicht unterstützt. In diesem Fall ist es sinnvoller, FLAC in das verlustfreie Format m4a von Apple zu konvertieren. Ich habe diesen Befehl verwendet, um alle Dateien im aktuellen Ordner zu konvertieren und dabei ähnliche Dateigrößen beizubehalten.

find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;

Dhiraj Gupta
quelle
Nicht erkannte Option 'Name'. Fehler beim Teilen der Argumentliste: Option nicht gefunden
MonsterMMORPG
@MonsterMMORPG Sie haben wahrscheinlich die Eingabe der verpasst. nach dem Befehl find. Das . weist find an, im aktuellen Ordner zu suchen, und -name weist an, nach passenden Dateinamen zu suchen.
Dhiraj Gupta
0

Dieses Skript flac2mp3.shffmpeg konvertiert einen Ordnerbaum von FLAC-Dateien in einen anderen Ordnerbaum von MP3-Dateien. Cover Art ist enthalten, falls vorhanden. Sie können eine CORESVariable festlegen , um Hintergrundjobs zu erstellen und mehrere Dateien gleichzeitig zu konvertieren.

Rick O'Sullivan
quelle
gibt Fehler sed: -e Ausdruck # 1, char 26: nicht abgeschlossener `s'-Befehl
MonsterMMORPG