FFmpeg converte vídeo com quadros perdidos, fora de sincronia

3

Eu gravei um vídeo usando o Bandicam com o codificador MJPEG para obter o mínimo de atraso. Agora, eu estou tentando converter esse arquivo enorme para um h264 avi usando ffmpeg. Eu sei que há quadros perdidos no fluxo de vídeo ... mais de 100 nos primeiros dois minutos, o que eu presumo é simplesmente porque o Bandicam derrubou alguns quando não conseguiu acompanhar. Portanto, quando eu converto o arquivo para h264, o vídeo e o áudio estão fora de sincronia e parecem estar cada vez mais fora de sincronia à medida que o vídeo de saída progride. Aqui está o meu comando básico no ffmpeg:

ffmpeg -i "C:\...\input.avi" -vcodec libx264 -q 5 -acodec libmp3lame -ar 44100 -ac 2 -b:a 128k "C:\...\output.avi"

Eu tentei TUDO que posso pensar em incluir:

-itsoffset [-]00:00:01

Tentei isso antes e depois do arquivo de entrada. Isso não funciona porque, conforme o vídeo avança, fica cada vez mais fora de sincronia.

-async 1

Não funciona.

-vsync 1

Não funciona, mas mostra quadros perdidos sendo duplicados.

Duas entradas do mesmo arquivo com mapeamento usando -map 0:0 -map 1:1 . Não funciona.

A fonte toca muito bem. Alguma idéia de como convertê-lo com ffmpeg e manter o áudio e vídeo sincronizados? Obrigado.

    
por preahkumpii 13.06.2012 / 10:49

2 respostas

5

Ele pode ter perdido quadros se eles forem duplicados, se a origem for reproduzida corretamente, o problema provavelmente está relacionado ao fato de que os contêineres AVI não lidam muito bem com os formatos codificados VBR (o h264 em particular não funciona bem com AVI). Eu recomendo começar despejando o vídeo para um AVI não comprimido para teste, pois é o formato mais consistente para codificar de

ffmpeg -i input.avi -acodec copy -vcodec rawvideo output.avi

Então, supondo que isso seja reproduzido em sincronia, você deve tentar fazer uma cópia direta do codec e remontar a fonte para um formato diferente, por exemplo:

ffmpeg -i input.avi -acodec copy -vcodec copy output.mkv

O MKV normalmente lida com praticamente qualquer coisa que você tenha, sem nenhum problema. Eu até escondo alguns arquivos zip criptografados em vários vídeos mkv no meu computador, já que você pode codificar anexos de arquivo em MKVs. Portanto, se qualquer um dos dois funcionar sem problemas de sincronização, tente a mesma coisa, mas recodifique o vídeo ou o áudio, mas apenas um ou outro para iniciar e manter o formato do contêiner para que você saiba onde está o problema. ou seja:

ffmpeg -i input.avi -acodec copy -vcodec libx264 output.mkv

ou

ffmpeg -i input.avi -acodec libmp3lame -vcodec copy output.mkv

Tente tornar cada conversão de teste o mais simples possível, ou seja, não altere a taxa de bits / taxa de amostragem, use os parâmetros de exemplo que listei primeiro. Depois de cada um, você estará um passo mais perto de saber exatamente o que pode e não pode fazer. Se você tem que ter h.264 eu recomendo ir com um contêiner mp4 como é muito mais compatível do que avi, por outro lado, se o requisito é um contêiner avi, então eu recomendo wmv3 ou msvideo1 para vídeo como eles seriam o mais provável de codificar corretamente.

    
por 13.06.2012 / 17:25
0

Quase sempre, quando o áudio e o vídeo estão fora de sincronia e a diferença entre os dois piora progressivamente ao longo do filme, especialmente após uma conversão, o problema é aquele em que os componentes de áudio e vídeo eram de duração diferente. Como foi observado neste exemplo, isso aconteceu porque os quadros de vídeo estavam sendo descartados, mas o áudio permaneceu relativamente intacto durante a conversão.

Em momentos como esse, é melhor primeiro verificar o filme de origem para garantir que o áudio esteja de fato em sincronia. Se for, desmembre o filme e lide com os componentes de vídeo e áudio separadamente.

    
por 13.06.2012 / 12:28