2017-02-23 9 views
2

Ich habe ein Problem mit der Codierung in Übereinstimmung mit FFmpeg. Ich habe au mp4-Datei mit AAC-Audio. Ich habe versucht, den Ton mit ffmpeg zu kopieren. In der mp4-Quelldatei erscheint das erste Audiogeräusch bei 0,30 Sekunden. Nach der Konvertierung mit ffmpeg -i inputfile.mp4 -c:a copy outputfile.aac ist die resultierende Datei falsch, das erste Audiogeräusch erscheint nach 0,32 Sekunden. Die Dauer der Datei ist nicht die gleiche.ffmpeg falsche Audiodatei nach Konvertierung in AAC

Wenn ich den Encoder zu Libfaac erzwinge, funktioniert es, aber die Datei ist zu groß.

Warum funktioniert es nicht, wenn der Standard-Encoder verwendet wird (aac, libfdk_aac)? Beachten Sie, dass das gleiche erscheint, wenn ich von Audacity konvertiere.

Dank viel

Antwort

3

Es gibt einen padding Rahmen in dem Audiostrom, der durch den Dekodierer benötigt wird, um das erste Bild zu dekodieren. Dies ist technische Voraussetzung für MDCT-Audio-Codecs wie AAC. In einem zeitgesteuerten Beispielcontainer wie MP4/MKV hat dieser erste Frame einen negativen Präsentationszeitstempel. In einem rohen AAC-Bitstrom wird dieser erste Rahmen naiv dekodiert. Jeder Frame hat 1024 Samples und hat somit eine Dauer von 21-23 ms. Ihr Unterschied im Timing ist auf diesen Offset zurückzuführen. In einen Behälter wie M4A umwickeln, um dies zu vermeiden.

für den Hintergrund, von Apple:

AAC erfordert Daten über die Source-PCM Audiosamples, um korrekt codieren und Audioabtastwerte der Art des Codieralgorithmus durch dekodieren. Die AAC-Codierung verwendet eine Transformation über aufeinanderfolgende Sätze von 2048 Audio-Samples, die alle 1024 Audio-Samples (überlappend) angewendet werden. Damit das korrekte Audio decodiert werden kann, sind beide Transformationen für alle 1024 Audio-Samples erforderlich. Aus diesem Grund fügen Encoder mindestens 1024 Stilleproben vor dem ersten "echten" Audio-Sample hinzu und fügen oft weitere hinzu. Dies wird unterschiedlich "Priming", "Priming Samples" oder "Encoder Delay" genannt.

und

Das Fehlen explizite Darstellung für Geberverzögerung und Rest Proben ist kein Problem, die einmalig für AAC-Codierung. Bei MPEG-4 und ADTS/MPEG-2-Bitstreams und Dateicontainern gibt es immer noch keine zufriedenstellende, explizite Darstellung für entweder die Encoderverzögerung oder Restproben. MP3 hat auch diese Datenabhängigkeiten und Verzögerungen in seinen Bitstream, wie proprietäre Codecs wie AC-3 und andere.

Verwandte Themen