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