Mit ffmpeg in 22050 Hz konvertierte Audiodatei uint8_t mono PCM ist zu groß

613
user768151

Ich versuche, eine Stereo-PCM-Audiodatei mit 44,1 kHz auf 22050 Hz und Mono herunterzuspielen. Die resultierende Datei ist jedoch zu groß.

Sitzungsbeispiel (ffmpeg-Build und Versionsinformationen zur besseren Lesbarkeit entfernt).

> ffprobe input.wav -count_frames Input #0, wav, from 'input.wav': Metadata: encoder : Lavf57.56.101 Duration: 00:03:23.18, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s 

Die Bildzählung ist also: 03: 23.18 * 44100 = 8960238

> ffmpeg -i input.wav -ar 22050 -ac 1 -f u8 -acodec pcm_u8 output.u8 Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, wav, from 'input.wav': Metadata: encoder : Lavf57.56.101 Duration: 00:03:23.18, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s File 'output.u8' already exists. Overwrite ? [y/N] y Output #0, u8, to 'output.u8': Metadata: encoder : Lavf57.56.101 Stream #0:0: Audio: pcm_u8, 22050 Hz, mono, u8, 176 kb/s Metadata: encoder : Lavc57.64.101 pcm_u8 Stream mapping: Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_u8 (native)) Press [q] to stop, [?] for help size= 4375kB time=00:03:23.18 bitrate= 176.4kbits/s speed= 276x  video:0kB audio:4375kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000% 

Jetzt sollte die Bildzählung die Hälfte der vorherigen sein, da wir die Abtastrate halbiert haben, dh 8960238/2 = 4480119. Und da das Format u8 ist, sollte es genau dieselbe Menge an Bytes sein.

> wc -c output.u8 4480160 output.u8 

… Aber es ist 41 Byte größer als es sein sollte.

0
`ffmpeg -i input.wav -ar 22050 -ac 1 -f u8 -acodec pcm_u8 output.raw` scheint zu funktionieren; Ich bin übrigens OP. Marius Macijauskas vor 6 Jahren 1
Sie sollten sich mit Stack Exchange in Verbindung setzen, um Ihre beiden Konten zusammenzuführen: https://superuser.com/contact. Dann können Sie auch Ihre eigene Frage beantworten. slhck vor 6 Jahren 1
Eigentlich hat es nicht funktioniert. Ich habe gerade gemessen und die Ausgabe ist 41 Byte größer als es sein sollte. Ich denke, ich muss meine eigene Lösung mit libsndfile erstellen. Marius Macijauskas vor 6 Jahren 0
Wenn Sie eine Konsolenausgabe bereitstellen, können wir möglicherweise eine Problembehandlung durchführen. Gyan vor 6 Jahren 0
Warum sind diese 41 zusätzlichen Bytes wichtig? Was willst du genau erreichen? In den üblichen Anwendungsfällen machen 41 Bytes keinen Unterschied, so dass Ihre Frage wie ein [XY-Problem] (https://meta.stackexchange.com/q/66377/267029) aussieht. gronostaj vor 6 Jahren 0
Ich mache einen Sound in meinem Programm. Diese 41 Bytes verursachen ein Rauschen in der Schleifenverbindung. Wenn ich sie manuell abschalte, verschwindet das Geräusch. Außerdem macht der Befehl nicht das, was er tun soll. Marius Macijauskas vor 6 Jahren 0

0 Antworten auf die Frage