Percebi que o ffmpeg às vezes grava carimbos de data/hora PTS inválidos ao usar -t
uma entrada M2TS. Este é um erro meu ou é um bug no ffmpeg?
Passos para reproduzir:
Baixe este arquivo M2TS e salve-o como 1.m2ts
. Este arquivo contém um stream de vídeo com 25 fps
(ou seja, um quadro de vídeo ocupa exatamente 0.04 s
( 40 ms
)) e um stream de áudio que não é interessante para o propósito deste post.
Abra o terminal, navegue até o diretório que contém o arquivo e execute o seguinte comando:
ffmpeg.exe -i 1.m2ts -codec copy -map 0 -t 2 2.m2ts
Agora examine o arquivo de saída, 2.m2ts
e observe que o PTS do quadro de vídeo mais recente é 3.560
, e que o PTS do quadro de vídeo anterior é 3.480
.
Isto obviamente está errado. Após o quadro em 3.480
, o próximo quadro deve ser apresentado em 3.520
, não 3.560
. O ffmpeg descartou o quadro de vídeo que deveria aparecer 3.520
ou gravou um PTS errado no último quadro de vídeo ( 3.560
em vez de 3.520
).
Claro, quando falo de “último” ou “antes”, estou me referindo à ordem dos frames no tempo (mais precisamente, ordenei os frames do vídeo por PTS), não à ordem dos frames no arquivo.
Pergunta:
Isso é um bug no ffmpeg ou há um erro no meu comando acima?
versão do ffmpeg:
ffmpeg version 2024-01-14-git-34a47b97de-full_build-www.gyan.dev
no Windows 10 x64 Empresarial
Observações adicionais:
Percebi o problema com vários dos meus arquivos M2TS; Não tenho tempo para testar outros formatos. Infelizmente, não posso fornecer meus arquivos para download. Essa é a razão pela qual vinculei a outro arquivo.
Em outras palavras: O problema não é específico do arquivo que vinculei. Em vez disso, encontrei-o com várias taxas de quadros de vídeo e trilhas de áudio em vários arquivos M2TS de diferentes fontes.
Ainda não investiguei as faixas de áudio em relação a lacunas semelhantes.