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.
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 1050O 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.
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.