O problema vem do significado diferente de -ss
dependendo de onde está a linha de comando. É uma transição dos dias em que avconv
ainda fazia parte do projeto ffmpeg
, e acredito que está sendo corrigido nas versões mais recentes.
Antigamente, se você dissesse algo como
ffmpeg -ss 5 -i input
O que você quis dizer foi "pular para a marca de 5 segundos no arquivo e começar a ler lá".
Mas se você disse
ffmpeg -i input -ss 5
Você quis dizer "abrir o arquivo de entrada e pular todos os dados até a marca de cinco segundos".
Como você pode entender, a primeira abordagem irá falhar com muita frequência, porque você está pulando no arquivo sem lê-lo. Ele funciona bem apenas nos arquivos que possuem timestamps, permitindo que você leia o quadro e saiba se já foi longe demais ou não.
Basicamente, a maneira como funcionava no ffmpeg era "Adivinhe a taxa de bits no primeiro segundo e depois presume que todos os outros segundos são os mesmos". Mas, é claro, nem todos os segundos são os mesmos, e se estamos falando de 52 horas de "drift", o erro pode ser bem grande.
Portanto, se você estiver usando a versão pós-divisão inicial do avconv, deverá sempre colocar -ss
após o arquivo que está sendo lido. Mas nas versões mais recentes (pelo que eu sei) esse bug foi corrigido.