FFmpeg sample_fmt ändert die Bittiefe nicht wirklich + unterstützte Sample-Formate fehlen

FFmpeg sample_fmt ändert die Bittiefe nicht wirklich + unterstützte Sample-Formate fehlen

Haftungsausschluss: Ich bin ein Anfänger in all dem, diese Frage könnte dumm sein

Ich versuche, die Bittiefe einer MP3-Datei von 32 auf 16 zu ändern und auch die Bitrate zu ändern

Dies ist mein Befehl: ffmpeg -i input.mp3 -sample_fmt s16p -vsync 2 -b:a 256k output2.mp3 Die Bitrate ändert sich erfolgreich, die Bittiefe jedoch nicht.

Dies sind die Ergebnisse.

Eingabedatei: ffprobe -i input.mp3

Duration: 00:04:40.08, start: 0.025056, bitrate: 323 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s

Ausgabedatei: ffprobe -i output.mp3

Duration: 00:04:40.08, start: 0.025056, bitrate: 283 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 256 kb/s

Oder anders ausgedrückt: Das ist es, was mir der Mediencodec von VLC bietet: AktuelleMedienInformationen

Wir können fltp sehen, was meiner Meinung nach nach einer Google-Suche 32 Bit bedeutet

Dies verwendet nuns16paber wenn ich es versucheStaffel 16Ich erhalte folgendes:

[libmp3lame @ 000001645fdcaec0] Specified sample format s16 is not supported by the libmp3lame encoder
[libmp3lame @ 000001645fdcaec0] Supported sample formats:
[libmp3lame @ 000001645fdcaec0]   s32p
[libmp3lame @ 000001645fdcaec0]   fltp
[libmp3lame @ 000001645fdcaec0]   s16p

Interessant, denn wenn ich ffmpeg -sample_fmtsdas hier eingebe, erhalte ich Folgendes:

name   depth
u8        8
s16      16
s32      32
flt      32
dbl      64
u8p       8
s16p     16
s32p     32
fltp     32
dblp     64
s64      64
s64p     64

Das scheint zu bedeuten, dass S16 doch funktionieren sollte, oder? Übersehe ich hier etwas komplett? Was ist hier los?

Antwort1

Die komprimierten Daten in einer MP3-Datei sind codiert, sodass sie kein inhärentes Speicherformat oder keine Bittiefe aufweisen. Dies Supported sample formatsbezieht sich auf die Beispielformate, die der Encoder zur Verarbeitung akzeptiert.

Das für output.mp3 angezeigte Beispielformat ist das, was der Decoder ausgibt. Standardmäßig verwendet ffmpeg den mp3float-Decoder, der Gleitkomma-Samples mit einfacher Genauigkeit ausgibt. Um 16-Bit-Ganzzahlen zu erhalten, erzwingen Sie den mp3-Festkomma-Decoder.

ffmpeg -c:a mp3 -i output.mp3

(ffprobe unterstützt keine benutzerdefinierte Decoderspezifikation)

verwandte Informationen