Questão O que causa o primeiro quadro congelado de um arquivo WMV criado no FFMPEG?


Ao cortar um arquivo WMV usando a seguinte sintaxe:

ffmpeg -i 'INPUTFILE.wmv' -acodec copy -vcodec copy -ss 00:00:45 -t 00:00:15 'OUTPUTFILE.wmv'

Um quadro do arquivo OUTPUTFILE.wmv é exibido por aproximadamente o primeiro ou segundo segundo (durante o qual o som é reproduzido normalmente) e, em seguida, a reprodução é retomada. O "quadro congelado" que é exibido é aquele em que o movimento realmente começa (não o 1-2 segundos que o precede) - ou seja, não há "salto", pois vai do quadro congelado para o vídeo de trabalho. Em vez disso, é como se eu estivesse fazendo uma pausa no vídeo.

Mesmo se eu aumentar o comprimento do clipe de saída em até um minuto, ele ainda o exibe por cerca de um segundo (portanto, não é uma proporção do comprimento total do vídeo).

O que está causando isso e como posso corrigi-lo?


0


origem




Respostas:


O problema é que você está apenas copiando de um arquivo para outro. A menos que você comece exatamente em um dos quadros-chave, haverá um atraso até que ele alcance um quadro-chave.

Um quadro-chave é um quadro que contém dados suficientes para renderizar o quadro inteiro. Os quadros entre esses quadros-chave são progressivos e contêm apenas (com efeito) as alterações do quadro antes.¹

Se você quiser evitar essa pausa, precisará decodificar e recodificar cada quadro individualmente para que o primeiro quadro do arquivo de saída seja um quadro-chave.

Os quadros de som não sofrem com esse tipo de problema, e é por isso que o som toca, mas o vídeo não.

¹ É realmente muito mais complexo do que isso, mas isso está próximo o suficiente por enquanto.


1



Eu entendi o que você está dizendo - essa é uma explicação muito útil, obrigado. Por favor, você pode explicar um pouco mais o que você quer dizer com a "necessidade de decodificar e recodificar cada quadro individualmente?" - Doofus Magoo
Ao invés de -vcodec copy você precisaria especificar algo como -vcodec wmv ou similar. Não tenho certeza o que o codec real precisaria ser. Você também pode precisar especificar coisas como taxas de bits e outras para a codificação. - Majenko
Ok, obrigada! Acho que você me pegou no caminho certo ("frame-chave" ou "GOP" foi o termo mágico que abriu vários resultados relevantes do Google). Minha sintaxe agora se parece com "ffmpeg -i 'INPUTFILE.wmv' -b 1636k -acodec wmav2 -vcodec wmv2 -ss 00:00:45 -t 00:00:15 'OUTPUTFILE.wmv" - Doofus Magoo