Pequenos pedaços de vídeo divididos pelo ffmpeg não estão sendo reproduzidos ou reproduzidos com artefatos

1

Estou tentando cortar um arquivo de vídeo em partes pequenas (0.5-5s) e codificar essas partes para h.264 / aac com ffmpeg. Estou usando este comando:

ffmpeg -i 1.avi -ss 00:05:00 -t 00:00:01,50 -vcodec libx264 -threads 0 -vpre default -acodec libfaac out1.mp4

No VLC, algumas peças estão sendo reproduzidas sem vídeo, apenas com som, outras peças tinham artefatos de vídeo como este:

Talvez eu tenha perdido alguns argumentos necessários para o ffmpeg?

    
por Rnd_d 14.11.2011 / 12:56

1 resposta

3

Eu tentei com o FFmpeg versão 0.8.5, usando um arquivo de entrada AVI como você.

O seguinte comando produziu resultados corretos:

ffmpeg -i 1.avi -ss 00:00:05 -t 00:00:01.50 -vcodec libx264 -vpre default -acodec libfaac out1.mp4

Aqui estão algumas dicas para trabalhar:

Atualize para a versão mais recente do FFmpeg.

Para o Ubuntu, siga os tutoriais aqui . Eu tenho usado eles mesmos.

No OS X, instale o FFmpeg usando o Homebrew , chamando brew install ffmpeg .

No Windows, basta fazer o download das versões pré-compiladas .

Use o formato de tamanho correto.

Observe que o formato de duração usa pontos decimais, e não vírgulas, por exemplo, hh:mm:ss[.xxx] .

Remova a opção -threads 0 .

Ativar -threads 0 , no entanto, me deu o erro "nal buffer is too small". Eu nem sei por que eles permitem um valor de zero aqui, e a menos que você tenha uma razão específica para fazer isso, eu apenas deixaria esse argumento de fora. Idealmente, deve ativar auto-threads em libx264 , mas pode haver um bug que eu não conheço.

Codifique sem imagens B.

Dependendo do tamanho do vídeo de saída, não sei se libx264 é capaz de produzir com segurança a saída usando imagens B que fazem referência a uma ou mais imagens intra-codificadas. Isso pode até levar aos artefatos que você descreve.

Você pode tentar desativar imagens B (ou "quadros B") com -bf 0 .

    
por 14.11.2011 / 15:28