Wie kann ich mit ffmpeg eine exakte Verzögerung zwischen Audio und Video erreichen?

Wie kann ich mit ffmpeg eine exakte Verzögerung zwischen Audio und Video erreichen?

Ich weiß, wie man mit dem Flag von ffmpeg eine Verzögerung einstellt -itsoffset, aber ich möchte wissen, wie man die genaue Verzögerungszeit erhält und einstellt.

Antwort1

Wenn zwischen dem Video- und Audiostream eine inhärente Verzögerung besteht, lässt sich das nicht so einfach herausfinden. Angenommen, Sie erstellen eine audiovisuelle Datei, bei der der Audiostream absichtlich mit verschoben wurde itsoffset. Dies führt dazu, dass die Zeitstempel der Audiopräsentation im Verhältnis zum Video geändert werden.

Nehmen wir an, dies ist das Original, wobei von drei Audiobildern pro Videobild ausgegangen wird (was in der Praxis zu wenig ist):

V1       V2          V3    ...
A1 A2 A3 A4 A5 A6 A7 A8 A9 ...

Die Audioframes haben die Zeitstempel A1 = 0, A2 = 1, A3 = 2 usw.

Nun verzögern Sie den Audiostream:

V1       V2          V3    ...
xx xx xx A1 A2 A3 A4 A5 A6 ...

Hier haben die ersten drei leeren Samples die Zeitstempel 0, 1 und 2 und A1 hat 3. Für den Player bedeutet dies, dass V2 und A1 zusammengehören und daran ist nichts auszusetzen.

Wenn Sie einen anfänglichen Offset schätzen möchten, müssen Sie den Audiostream manuell überprüfen oder verwendensilencedetectum den Zeitraum zwischen dem Start des Streams und dem ersten Audio-Sample zu erkennen, das Informationen enthält. Dies funktioniert jedoch nur, wenn der Audio-Stream direkt mit einem Signal beginnt. Wenn es sich um eine Einblendung irgendeiner Art handelt oder es bei -∞ dBFS beginnt, haben Sie Pech gehabt.

verwandte Informationen