Mengapa ffmpeg mengekstraksi lebih banyak frame dari yang sebenarnya?

1

Saya menggunakan ffmpeg untuk mengekstrak bingkai dari file gif. Ketika saya menggunakan python PIL itu menunjukkan bahwa file tersebut memiliki 135 frame. Bahkan jendela properti di mac sepatu jumlah frame yang sama. Namun, ffmpeg, untuk beberapa alasan mengekstrak> 50.000 bingkai. Banyak dari mereka adalah duplikat.

File gif - https://78.media.tumblr.com/dd7f01acad444ca85bea050afd15afaf/tumblr_nof6lmxQLC1utshuoo1_250.gif

Saya menggunakan perintah berikut ffmpeg -i input_gif.gif output /% d.jpg Log - https://pastebin.com/HBt58yKq

Namun, saya menemukan bahwa ketika saya menjalankan perintah berikut ini berfungsi dengan baik ffmpeg -i input_gif.gif -vsync 0 output /% d.jpg Log - https://pastebin.com/Ykb7WkKA

simar
sumber

Jawaban:

3

GIF terdeteksi memiliki frame rate 6,67 tetapi penundaan frame individu ditetapkan sebagai 65535 dalam unit 1/100 detik sehingga 655,35 detik per frame. Itu memberikan total durasi lebih dari 24 jam untuk 135 frame input.

Muxer urutan gambar diatur ke mode laju bingkai konstan. Jadi ffmpeg akan menyelidiki frame rate input (6,67 fps) dan menjatuhkan atau menggandakan frame agar sesuai dengan rate itu jika input memasok jumlah frame yang berbeda (per-detik). Jadi, dalam menciptakan urutan output 24 jam pada 6,67 fps, ffmpeg akan berusaha untuk menghasilkan lebih dari 500 ribu frame. Hampir semuanya akan menjadi duplikat.

-vsync vfratau -vsync 0menonaktifkan perilaku frame drop / dup.

Gyan
sumber
1. Mengapa penundaan frame individu tidak valid? 2. Mengapa ffmpeg mengaturnya ke nilai aneh ini yang menghasilkan banyak frame duplikat? Bukankah seharusnya itu melakukan sesuatu yang lebih pintar? 3. Apakah ini berarti bahwa gif sebagai masalah saat membuatnya? Jadi saya bisa menggunakan -vsync 0 dengan aman untuk semua file saya (baik valid dan tidak valid)?
simar
Saya mengubah jawaban saya. 1 & 2. Penundaan maksimal yang mengindikasikan pembuatan GIF yang rusak. 3. Ya, -vsync 0aman untuk mengekstraksi gambar.
Gyan