GIF armazena um tempo de espera por quadro

A Graphic Control Extension do GIF89a armazena atrasos diferentes de zero em centésimos de segundo: uma unidade é 10 ms. O Moyoutil envia 1000/FPS ms por quadro ao gifenc 1.0.3 incluído no site, que divide por 10 e arredonda. Em 15 FPS, aproximadamente 66.667 ms tornam-se 7 unidades, ou 70 ms. O FPS escolhido controla a amostragem dos quadros; não é um número de FPS armazenado sem alterações no GIF.

Totais de atraso armazenado de 1000, 1000 e 1050 ms para sequências sintéticas de um segundo em 5, 10 e 15 FPS
Diagrama original dos totais de atraso. As barras são proporcionais à soma dos campos codificados. Não é um gráfico de tempo de reprodução medido na tela.

GIF89a §23: Graphic Control Extension

Reproduza o total armazenado para uma seleção de um segundo

Geramos quadros sintéticos de 1×1 px com o mesmo código do worker GIF e codificador, e lemos seus campos de atraso. Um segundo em 5 FPS gerou 5 quadros × 200 ms = 1000 ms; em 10 FPS, 10 × 100 ms = 1000 ms; em 15 FPS, 15 × 70 ms = 1050 ms. São valores armazenados nos GIFs de teste. Não convertemos um vídeo real nem medimos o tempo de reprodução de um player. O cálculo abaixo reproduz os mesmos números.

for (const fps of [5, 10, 15]) {
  const frames = Math.ceil(1 * fps);
  const delayMs = Math.round(1000 / fps / 10) * 10;
  console.log(fps, frames, delayMs, frames * delayMs);
}
// 5 5 200 1000
// 10 10 100 1000
// 15 15 70 1050

O número de quadros é ceil(duração × FPS). Uma seleção de 0.1 segundo em 15 FPS gera 2 quadros com atraso total armazenado de 140 ms. A interface GIF atual oferece 5, 10 e 15 FPS, com limites de 10 segundos e 150 quadros. Se o tempo for importante, confira o arquivo no player que pretende usar. Este cálculo não prevê a reprodução em todos os players nem o tempo gasto na conversão.

gifenc: writeFrame / delayTime

Perguntas frequentes

Escolher 15 FPS sempre faz um segundo ser reproduzido em 1.05 segundo?

Não. Os 1050 ms são a soma dos atrasos armazenados deste exemplo de um segundo e 15 quadros. O tempo real de exibição exige outra verificação; este artigo não mede a reprodução em diferentes players.