GIF menyimpan waktu tunggu untuk setiap frame

Graphic Control Extension GIF89a menyimpan jeda bukan nol dalam seperseratus detik: satu satuan adalah 10 ms. Moyoutil mengirim 1000/FPS ms per frame ke encoder gifenc 1.0.3 yang disertakan, lalu encoder membagi dengan 10 dan membulatkan. Pada 15 FPS, sekitar 66.667 ms menjadi 7 satuan atau 70 ms. FPS pilihan mengatur pengambilan frame; nilainya tidak disimpan tanpa perubahan sebagai angka FPS dalam GIF.

Total jeda tersimpan 1000, 1000 dan 1050 ms untuk urutan sintetis satu detik pada 5, 10 dan 15 FPS
Diagram asli total jeda tersimpan. Panjang batang sebanding dengan jumlah field hasil encoding. Ini bukan grafik waktu pemutaran layar yang diukur.

GIF89a §23: Graphic Control Extension

Reproduksi total tersimpan untuk pilihan satu detik

Kami membuat frame sintetis 1×1 px dengan kode worker GIF dan encoder yang sama, lalu membaca field jedanya. Satu detik pada 5 FPS menghasilkan 5 frame × 200 ms = 1000 ms; 10 FPS menghasilkan 10 × 100 ms = 1000 ms; 15 FPS menghasilkan 15 × 70 ms = 1050 ms. Ini nilai tersimpan dalam GIF uji yang dibuat. Percobaan ini tidak mengonversi video sebenarnya atau mengukur waktu pemutaran player. Perhitungan di bawah menghasilkan angka yang sama.

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

Jumlah frame adalah ceil(durasi × FPS). Pilihan 0.1 detik pada 15 FPS menghasilkan 2 frame dengan total jeda tersimpan 140 ms. Antarmuka GIF saat ini menawarkan 5, 10 dan 15 FPS, dengan batas 10 detik dan 150 frame. Untuk pekerjaan yang peka terhadap waktu, periksa file hasil di player yang akan digunakan. Perhitungan ini tidak dapat memprediksi waktu pemutaran semua player atau durasi proses konversi.

gifenc: writeFrame / delayTime

Pertanyaan yang Sering Diajukan

Apakah memilih 15 FPS selalu membuat satu detik diputar selama 1.05 detik?

Tidak. Total 1050 ms adalah jumlah jeda tersimpan untuk contoh satu detik dengan 15 frame ini. Waktu tampilan sebenarnya memerlukan pemeriksaan terpisah; artikel ini tidak mengukur waktu pemutaran berbagai player.