Como posso obter um atraso exato entre áudio e vídeo com o ffmpeg?

Como posso obter um atraso exato entre áudio e vídeo com o ffmpeg?

Eu sei como definir um atraso com -itsoffseto sinalizador do ffmpeg, mas quero saber como obter e definir o tempo de atraso exato.

Responder1

Se houver um atraso intrínseco entre o fluxo de vídeo e áudio, não há uma maneira fácil de descobrir. Suponha que você esteja criando um arquivo audiovisual onde o fluxo de áudio foi deslocado propositalmente usando itsoffset. Isso resultará na alteração dos carimbos de data/hora da apresentação de áudio em relação ao vídeo.

Digamos que este seja o original, assumindo três quadros de áudio por quadro de vídeo (o que é muito pouco na prática):

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

Os frames de áudio terão os timestamps A1 = 0, A2 = 1, A3 = 2, etc.

Agora você atrasa o fluxo de áudio:

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

Aqui, as três primeiras amostras vazias terão os carimbos de data e hora 0, 1 e 2, e A1 terá 3. Para o jogador, isso significa que V2 e A1 pertencem um ao outro, e não há nada de errado com isso.

Se quiser estimar um deslocamento inicial, você terá que inspecionar o fluxo de áudio manualmente ou usarsilencedetectpara detectar o período entre o início do fluxo e a primeira amostra de áudio que contém informações, mas isso só funciona se o fluxo de áudio começar diretamente com um sinal. Se for algum tipo de fade-in ou começar em -∞ dBFS, você está sem sorte.

informação relacionada