.GIF Graphics Interchange Format
.gif

Graphics Interchange Format

GIF (CompuServe، 1987) تدعم التحريك بحد أقصى 256 لوناً لكل إطار باستخدام ضغط LZW. جدل براءة اختراع LZW عام 1994 أدى لولادة صيغة PNG. حوّل وأنشئ ملفات GIF متحركة في متصفحك مع FileDex — بدون رفع.

بنية الصيغة
GIF89a header
LSD palette · size
Frames LZW blocks
رسوم متحركةشفافيةمع فقدان1987
بواسطة FileDex

ملفاتك لا تغادر جهازك

أسئلة شائعة

كيف أحوّل فيديو MP4 قصير إلى صيغة GIF؟

أسقط ملف MP4 في محوّل FileDex واختر GIF كصيغة الإخراج. تقليل عدد الإطارات إلى 15 والعرض إلى 480 بكسل ضروري لتجنب ملف بحجم عشرات الميغابايت. أدوات التحويل الجيدة تُحسّن جدول الألوان تلقائياً للحصول على أفضل نتيجة بصرية.

لماذا حجم ملف GIF أكبر بكثير من فيديو MP4 بنفس المحتوى؟

GIF يضغط كل إطار كصورة مستقلة بخوارزمية LZW بدون فقدان، بينما MP4 يستغل التشابه بين الإطارات المتتالية. Codec الفيديو يُخزّن الفروقات فقط بدل الصورة الكاملة. هذا يجعل MP4 أصغر 10 إلى 20 مرة لنفس المحتوى المرئي.

هل صيغة GIF تدعم الخلفية الشفافة؟

GIF تدعم شفافية ثنائية: البكسل إما مرئي أو مخفي بالكامل دون مستويات وسيطة. حواف العناصر تظهر خشنة على خلفيات ملونة. للحصول على شفافية متدرجة، استخدم صيغة APNG أو WebP المتحرك.

ما الفرق بين GIF و WebP للصور المتحركة؟

WebP يدعم أكثر من 16 مليون لون مقابل 256 لوناً في GIF، ويُنتج ملفات أصغر حجماً بنسبة 60-80%. WebP يدعم أيضاً الشفافية الجزئية. العائق الوحيد: البريد الإلكتروني وبعض التطبيقات القديمة لا تعرض WebP المتحرك.

كيف أقلّل حجم ملف GIF متحرك؟

ثلاث طرق فعّالة: قلّل عدد الألوان من 256 إلى 64 أو 32، صغّر أبعاد الصورة، واحذف إطارات متناوبة لخفض معدل الإطارات. أداة gifsicle تُنفّذ الثلاثة عبر سطر الأوامر. تقليص الألوان وحده يُوفّر 40-60% من الحجم.

هل تُرسل ملفات GIF في WhatsApp كما هي أم يتم ضغطها؟

WhatsApp يُحوّل ملفات GIF المرسلة كوسائط إلى فيديو MP4 داخلياً ويعرضها كصور متحركة. الملف الأصلي لا يصل للمستقبل. لإرسال ملف GIF الحقيقي دون تحويل، أرسله كمستند.

لماذا تظهر ألوان ملف GIF باهتة مقارنة بالصورة الأصلية؟

جدول ألوان GIF يتسع لـ 256 لوناً فقط من أصل 16 مليون لون ممكن. الخوارزمية تختار أقرب 256 لوناً وتستخدم dithering لمحاكاة الباقي. الصور ذات التدرجات اللونية الواسعة تفقد نعومتها بوضوح بعد التحويل إلى GIF.

ما يميز .GIF

شركة CompuServe 1987
أقدم من شبكة الإنترنت نفسها
نشرت CompuServe صيغة GIF عام 1987 لنقل الصور الملوّنة عبر اتصالات dial-up البطيئة. شبكة الويب العالمية أُطلقت عام 1991 — أي أن GIF سبقت الوسيط الذي جعلها شهيرة بأربع سنوات.
براءة LZW أنجبت PNG
جدل الترخيص غيّر تاريخ الصور الرقمية
شركة Unisys فرضت رسوم ترخيص على خوارزمية LZW المُستخدمة في GIF عام 1994. أشعل ذلك حملة Burn All GIFs وأدّى مباشرة لابتكار صيغة PNG كبديل مجاني. انتهت البراءة عام 2004.
خدعة WhatsApp
ما تراه كـ GIF هو فعلياً فيديو MP4
عند إرسال GIF عبر WhatsApp أو Telegram أو تويتر، يُحوَّل الملف سراً إلى فيديو H.264 بحجم أصغر 90%. مكتبة Tenor التي يستخدمها WhatsApp تُقدّم نسخة MP4 لكل صورة متحركة في مكتبتها.
حد 256 لوناً
قيد من عصر شاشات VGA
كل إطار في GIF يتسع لـ 256 لوناً فقط — تصميم يعود لعام 1987 حين كانت شاشات VGA لا تعرض أكثر من ذلك. الصور الفوتوغرافية تحتاج dithering لمحاكاة الألوان المفقودة، مما يُنتج نقاطاً مرئية ويُضخّم الحجم.

تتكوّن صيغة GIF من سلسلة إطارات ثابتة تُعرض بتتابع زمني محدد لإنتاج وهم الحركة. كل إطار صورة مستقلة بتنسيق 256 لوناً كحد أقصى، مضغوطة بخوارزمية LZW. الصيغة صدرت عام 1987 عن شركة CompuServe ولم تتغير بنيتها الجوهرية منذ النسخة 89a.

اكتشف التفاصيل التقنية

خوارزمية LZW: قاموس يبني نفسه

LZW اختصار Lempel-Ziv-Welch — خوارزمية ضغط بدون فقدان تعمل ببناء قاموس للأنماط المتكررة أثناء القراءة. عند مرور الخوارزمية على سلسلة بكسلات متتالية بنفس اللون، تُسجّل النمط في القاموس وتُشير إليه برقم قصير بدل تكرار القيم.

المساحات ذات اللون الموحد تُضغط بكفاءة عالية — صف بكسلات بلون واحد يُختزل إلى بضع بايتات. التدرجات اللونية والصور الفوتوغرافية تُقاوم الضغط لأن كل بكسل يختلف عن جاره فلا تتكون أنماط طويلة في القاموس.

صورة GIF ثابتة بأبعاد 800x600 بتدرج لوني قد تتجاوز 500 كيلوبايت. نفس الأبعاد بخلفية صلبة ونص: أقل من 15 كيلوبايت. هذا الفارق — 33 ضعفاً — يشرح لماذا شعارات المواقع القديمة كانت تستخدم GIF بنجاح بينما الصور الفوتوغرافية تُنتج ملفات أكبر من JPEG بعشر مرات.

براءة اختراع LZW انتهت عام 2004 بعد جدل استمر عقداً. قبل انتهائها، الخوف من رسوم الترخيص دفع لتطوير صيغة PNG كبديل مجاني — لكن PNG لا تدعم التحريك في نسختها الأساسية.

حد 256 لوناً: قيد من 1987

كل إطار في ملف GIF يحمل جدول ألوان خاصاً يتسع لـ 256 لوناً فقط — 8 بت لكل بكسل. عند تصميم الصيغة، شاشات الحواسيب لم تعرض أكثر من ذلك أصلاً.

الخدعة المستخدمة لمحاكاة ألوان أكثر: dithering — توزيع نقاط من ألوان مختلفة بنمط منتظم أو عشوائي لخداع العين بلون وسيط غير موجود في الجدول. Floyd-Steinberg هو خوارزمية dithering الأشهر وتُنتج نتائج مقبولة على أغلب الصور.

ملف GIF متحرك يمكنه استخدام جدول ألوان مختلف لكل إطار — ما يُعرف بـ local color table. هذا يرفع العدد الفعلي للألوان المُستخدمة في الرسوم المتحركة لكنه يُضخّم حجم الملف لأن كل جدول يستهلك حتى 768 بايت (256 لون x 3 بايت لكل لون).

اختيار الألوان الـ 256 من الصورة الأصلية (التي قد تحتوي 16 مليون لون) يُسمّى color quantization. خوارزمية Median Cut تقسم فضاء الألوان إلى مناطق متساوية الكثافة. NeuQuant تستخدم شبكة عصبية مُبسّطة. الفارق بينهما واضح في صور الطبيعة ذات التدرجات الخضراء والزرقاء.

آلية الرسوم المتحركة الداخلية

كل إطار يحمل 3 خصائص تتحكم بالعرض: مدة التأخير (بوحدة 10 ميلي ثانية — أي أقل تأخير ممكن هو 10 ميلي ثانية)، طريقة التخلص من الإطار السابق (disposal method)، وموقع الإطار على اللوحة (إزاحة أفقية ورأسية).

خاصية الإزاحة تسمح لإطار أصغر من اللوحة بالرسم في موقع محدد — تقنية تُقلّل الحجم بعدم إعادة رسم الأجزاء الثابتة. إطار يُغطي 10% فقط من اللوحة يستهلك 10% من البيانات.

طريقة disposal تحدد ما يحدث قبل رسم الإطار التالي. القيمة 0: لا إجراء — نادراً ما تُستخدم. القيمة 1: الإطار الجديد يُرسم فوق القديم مباشرة — الأكثر شيوعاً. القيمة 2: المساحة تُمسح إلى لون الخلفية أولاً ثم يُرسم الإطار الجديد. القيمة 3: تُستعاد الحالة السابقة قبل رسم الإطار الحالي — تُستخدم في تأثيرات معقدة.

أخطاء disposal هي السبب الأول للوميض والتشوهات في ملفات GIF المُحررة يدوياً. كثير من الأدوات تتجاهل هذه القيمة عند التصدير.

الشفافية: بت واحد فقط

GIF تدعم الشفافية لكن بشكل بدائي — كل بكسل إما معتم 100% أو شفاف 100%. لا توجد شفافية جزئية. هذا يعني أن حواف النص أو الأشكال المنحنية على خلفية شفافة تظهر مسننة لأنه لا يمكن مزج البكسل مع ما خلفه.

الحل القديم: اختيار لون خلفية يطابق الموقع المستهدف. لكن هذا يُفشل الصورة على أي خلفية مختلفة. PNG تحل المشكلة بقناة ألفا كاملة — 256 مستوى شفافية لكل بكسل.

بدائل GIF: APNG و WebP و MP4

APNG يُضيف التحريك فوق صيغة PNG مع دعم كامل للشفافية الجزئية و 16 مليون لون. الدعم في المتصفحات أصبح شاملاً منذ 2023. الحجم أكبر من GIF للألوان القليلة لكن أصغر بكثير للصور الفوتوغرافية.

WebP من Google يجمع بين الشفافية الكاملة والتحريك والضغط مع فقدان — بديل أفضل من GIF في كل المعايير. حجم أصغر 60-80% من GIF المُكافئ.

MP4 بصيغة H.264 يتفوق على الجميع في نسبة الضغط. فيديو 5 ثوانٍ بدقة 480p: أقل من 1.5 ميغابايت مقابل 15 ميغابايت لملف GIF مكافئ. العيب: لا شفافية ولا تشغيل تلقائي في البريد الإلكتروني.

خدعة المنصات: GIF الذي ليس GIF

منصات التواصل الكبرى (تويتر، تيليجرام، Discord) تحوّل ملفات GIF سراً إلى فيديو MP4 عند الرفع — ما تراه كـ"GIF" هو فعلياً فيديو H.264 بحجم أصغر 90%. منصة Tenor التابعة لـ Google تُقدّم نسخة MP4 ونسخة WebM لكل "GIF" في مكتبتها.

السبب اقتصادي بحت. عند تقديم مليارات الملفات يومياً، توفير 90% من النطاق الترددي يعني ملايين الدولارات شهرياً. المستخدم لا يلحظ الفارق لأن واجهة التطبيق تعرض الفيديو بلا عناصر تحكم تماماً كـ GIF.

الاستخدام العربي وثقافة الملصقات

على WhatsApp و Telegram في المنطقة العربية، الملصقات المتحركة بصيغة WebP حلّت محل GIF في المحادثات اليومية لتبادل ردود الفعل والتعبيرات. Telegram يدعم ملصقات متحركة بصيغة TGS (مبنية على Lottie) بحجم أقصى 64 كيلوبايت — أخف 200 مرة من GIF مكافئ.

WhatsApp يعرض مكتبة GIF مدمجة مُقدّمة من Tenor. عند اختيار "GIF" من المكتبة، التطبيق يُحمّل نسخة MP4 مضغوطة وليس ملف GIF الأصلي. البحث بالعربية في هذه المكتبة محدود مقارنة بالإنجليزية — معظم النتائج تأتي من كلمات مفتاحية إنجليزية.

مع ذلك، GIF تبقى صيغة الملف الوحيدة للصور المتحركة التي تعمل في كل مكان: البريد الإلكتروني، المتصفحات القديمة، تطبيقات المراسلة، وحتى شاشات العرض الصناعية. هذا التوافق الشامل يضمن بقاءها.

البنية الثنائية لملف GIF

كل ملف GIF يبدأ بتوقيع 6 بايتات: GIF87a أو GIF89a — هذه هي magic bytes التي تُحدد الصيغة والإصدار. يليها واصف الشاشة المنطقية: عرض وارتفاع بوحدة البكسل (2 بايت لكل منهما)، عمق الألوان، ووجود جدول ألوان عام.

بعد الواصف يأتي جدول الألوان العام إن وُجد — 3 بايتات لكل لون (أحمر، أخضر، أزرق). ثم سلسلة من كتل البيانات: كتل صور، كتل تمديد (extension blocks) تحمل معلومات التحريك والشفافية والتعليقات النصية، وأخيراً بايت الإنهاء 0x3B.

كتل التمديد هي ما يُميّز الإصدار 89a عن 87a. بدونها لا توجد شفافية ولا تحريك — فقط صورة ثابتة بـ 256 لوناً.

تحسين الحجم: تقنيات متقدمة

أدوات مثل gifsicle و gifsicle --optimize=3 تُعيد ترتيب جداول الألوان وتُدمج الإطارات المتشابهة وتُزيل البيانات الزائدة. التحسين من المستوى 3 يُخزّن فقط البكسلات المتغيرة بين كل إطارين — وهذا يُقلّص الحجم 30-50% دون أي تأثير مرئي.

تقنية أخرى: تقليل عدد الإطارات. GIF بمعدل 30 إطاراً في الثانية لا يبدو أنعم من 15 إطاراً للعين البشرية في أغلب المحتوى. حذف نصف الإطارات يُنصّف الحجم. تصغير الأبعاد من 640 إلى 320 بكسل يُقلّص الحجم 75% لأن عدد البكسلات ينخفض إلى الربع.

الجمع بين الثلاثة — ألوان أقل، إطارات أقل، أبعاد أصغر — يُحوّل ملف 12 ميغابايت إلى 800 كيلوبايت مع محتوى مقبول للمشاركة عبر البريد الإلكتروني أو رسائل المحادثة.

مقارنة .GIF مع البدائل

مقارنة .GIF مع الصيغ البديلة
المقارنة المعيار الفائز
.GIF vs .WEBP
حجم الملف المتحرك
WebP المتحرك يستخدم ضغط VP8 فيُنتج ملفات أصغر 25-34% من GIF المُكافئ مع دعم 16 مليون لون وشفافية كاملة. GIF محدود بـ 256 لوناً لكل إطار ولا يملك ضغطاً بين الإطارات.
WEBP أفضل
.GIF vs .APNG
جودة التحريك مع الشفافية
APNG يدعم 16 مليون لون مع قناة ألفا كاملة (256 مستوى شفافية) لكل إطار متحرك. GIF محدود بشفافية ثنائية — كل بكسل إما معتم أو شفاف بالكامل، فتظهر حواف مسننة على الخلفيات الشفافة.
APNG أفضل
.GIF vs .MP4
كفاءة الضغط للمحتوى المتحرك
MP4 بترميز H.264 يستغل التشابه بين الإطارات المتتالية فيحقق ملفات أصغر 10-20 ضعفاً. مقطع 5 ثوانٍ بدقة 480p: أقل من 300 كيلوبايت كـ MP4 مقابل 5 ميغابايت كـ GIF. العيب: MP4 لا يدعم الشفافية.
MP4 أفضل
.GIF vs .PNG
جودة الصور الثابتة
PNG تدعم 48 بت لكل بكسل (16.7 مليون لون) مع قناة ألفا كاملة وضغط Deflate بكفاءة أعلى. GIF الثابت محدود بـ 256 لوناً مع شفافية ثنائية فقط. PNG أفضل لكل استخدام ثابت باستثناء الرسوم البسيطة جداً.
PNG أفضل

المرجع التقني

نوع MIME
image/gif
Magic Bytes
47 49 46 38 GIF8 signature, followed by 7a (GIF87a) or 9a (GIF89a) version.
المطوّر
CompuServe
سنة التقديم
1987
معيار مفتوح
نعم
0000000047494638 GIF8

GIF8 signature, followed by 7a (GIF87a) or 9a (GIF89a) version.

البنية الثنائية

تبدأ ملفات GIF بترويسة من 6 بايتات تحتوي على توقيع ASCII وهو 'GIF' يليه سلسلة الإصدار '87a' أو '89a'. يُعلن واصف الشاشة المنطقية (7 بايتات) عن أبعاد اللوحة وعلامة جدول الألوان العام ودقة الألوان وفهرس لون الخلفية. إذا كان مُعلَّماً، يتبعه جدول الألوان العام بمدخلات RGB من 3 بايتات (حتى 768 بايت لـ 256 لوناً). تحتوي كتل بيانات الصورة على واصف الصورة المحلية (10 بايتات) وجدول ألوان محلي اختياري وبايت الحد الأدنى لحجم رمز LZW وكتل فرعية متغيرة الطول من بيانات البكسل المضغوطة بـ LZW. يضيف GIF89a كتل الامتداد: امتداد التحكم في الرسوميات (تأخير الحركة وطريقة التخلص وفهرس الشفافية) وامتداد التعليقات وامتداد النص العادي وامتداد التطبيق (تكرار Netscape). ينتهي الملف ببايت خاتمة واحد 0x3B.

OffsetLengthFieldExampleDescription
0x00 3 bytes التوقيع 47 49 46 ASCII 'GIF' — يُعرّف الملف كصيغة GIF.
0x03 3 bytes الإصدار 38 39 61 ASCII '89a' (GIF89a) أو '87a' (GIF87a). يضيف 89a الحركة والشفافية وامتدادات التعليقات.
0x06 2 bytes عرض اللوحة E8 03 عرض الشاشة المنطقية بالبكسل (uint16 بترتيب little-endian). مثال: 1000 بكسل.
0x08 2 bytes ارتفاع اللوحة C8 00 ارتفاع الشاشة المنطقية بالبكسل (uint16 بترتيب little-endian). مثال: 200 بكسل.
0x0A 1 byte البايت المُعبّأ F7 البتات 0-2: حجم جدول الألوان العام (2^(N+1) مدخل). البت 3: علامة الترتيب. البتات 4-6: دقة الألوان. البت 7: وجود جدول الألوان العام.
0x0B 1 byte فهرس لون الخلفية 00 الفهرس في جدول الألوان العام للون الخلفية.
0x0C 1 byte نسبة عرض البكسل 00 0 = بكسلات مربعة. غير صفري: النسبة = (القيمة + 15) / 64.
1987تنشر CompuServe مواصفة GIF87a مع ضغط LZW ودعم الصور المتعددة1989يضيف GIF89a امتداد التحكم في الرسوميات (توقيت الحركة، الشفافية، طرق التخلص) وامتداد التعليقات1994تبدأ Unisys بفرض ترخيص براءة اختراع LZW على مُرمّزات GIF، مما أطلق حملة 'Burn All GIFs'1995إنشاء صيغة PNG كبديل خالٍ من براءات الاختراع لـ GIF للصور الثابتة2003انتهاء صلاحية براءة اختراع LZW الأمريكية (Unisys)، مما أزال عوائق الترخيص لتطبيقات مُرمّز GIF2004انتهاء صلاحية براءات اختراع LZW عالمياً، مما جعل GIF حراً بالكامل للتطبيق
استخراج أول إطار من صورة GIF متحركة كملف PNG ffmpeg
ffmpeg -i input.gif -frames:v 1 output.png

يستخرج -frames:v 1 إطار الفيديو الأول فقط. يُستنتج صيغة الإخراج من امتداد .png. استخراج بدون فقدان مع دقة ألوان كاملة.

تحويل صورة GIF متحركة إلى MP4 بترميز متوافق مع المتصفحات ffmpeg
ffmpeg -i input.gif -movflags +faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4

ينقل -movflags +faststart ذرة moov لتمكين البث عبر الويب. يضمن -pix_fmt yuv420p التوافق مع جميع وحدات فك الترميز العتادية. يقرّب مرشح scale الأبعاد إلى أرقام زوجية، وهو ما يتطلبه H.264.

إنشاء GIF عالي الجودة من MP4 باستخدام توليد لوحة ألوان بمرحلتين ffmpeg
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,palettegen" palette.png && ffmpeg -i input.mp4 -i palette.png -lavfi "fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

نهج المرحلتين: المرحلة الأولى تولّد لوحة ألوان مثالية من 256 لوناً من الفيديو المصدر باستخدام إعادة تشكيل Lanczos. المرحلة الثانية تُرمّز ملف GIF باستخدام تلك اللوحة لتحقيق أقصى دقة في الألوان. يحافظ fps=15 وscale=480 على حجم ملف معقول.

فحص ملف GIF لمعرفة عدد الإطارات والأبعاد ffprobe
ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=width,height,nb_read_frames -of csv=p=0 input.gif

يفرض -count_frames عدّ الإطارات (بطيء لكن دقيق). الإخراج بصيغة CSV: العرض، الارتفاع، عدد الإطارات. مفيد لتحديد مدة الحركة قبل التحويل.

GIF JPG transcode lossy ينتج JPEG ملفات أصغر للمحتوى الفوتوغرافي ويُقبل في كل عارض صور ونموذج رفع. تفقد صور GIF المتحركة حركتها لأن JPEG أحادي الإطار — يُستخدم هذا عندما يهم الإطار الأول أو إطار رئيسي فقط.
GIF PNG transcode lossless يدعم PNG ألواناً كاملة بعمق 24 بت وشفافية ألفا بعمق 8 بت، مما يزيل قيد لوحة الألوان المحدودة بـ 256 لوناً في GIF. مثالي لاستخراج إطارات فردية من صور GIF المتحركة مع الحفاظ على بيانات البكسل بدقة.
GIF WEBP transcode lossy تنتج صور WebP المتحركة ملفات أصغر بنسبة 25-34% من رسوم GIF المتحركة المكافئة مع عمق لوني أفضل (24 بت مقابل 8 بت مفهرسة). جميع المتصفحات الحديثة تدعم WebP المتحركة.
GIF MP4 transcode lossy يوفر H.264 في MP4 أحجام ملفات أصغر بشكل كبير من رسوم GIF المتحركة — غالباً بتقليص 10-20 ضعفاً — مع دعم كامل للألوان. منصات التواصل الاجتماعي وتطبيقات المراسلة تحوّل تحميلات GIF داخلياً إلى MP4/WebM لهذا السبب.
منخفض

نقاط الضعف

  • قنابل فك الضغط — ملفات GIF بأبعاد لوحة كبيرة جداً لكن بحجم ملف صغير يمكن أن تستنفد الذاكرة عند فك الترميز
  • تدفقات LZW مُصاغة بشكل خبيث — جداول رموز LZW المشوهة يمكن أن تُسبب تجاوز المخزن المؤقت في وحدات فك الترميز المعرضة للخطر
  • حقن امتداد التعليقات — النص العشوائي في كتل تعليقات GIF يمكن أن يحمل حمولات هندسة اجتماعية

الحماية: يفك FileDex ترميز GIF بالكامل في صندوق حماية المتصفح باستخدام Canvas API. لا توجد معالجة على الخادم، ولا رفع ملفات، ولا تنفيذ لمحتوى مضمن. حدود الذاكرة يفرضها وقت تشغيل المتصفح.

gifsicle أداة
أداة سطر أوامر لتحسين وتغيير حجم وتحرير صور GIF المتحركة إطاراً بإطار
FFmpeg أداة
يفك ويُرمّز GIF مع توليد لوحة الألوان؛ يتعامل مع تحويل GIF إلى فيديو
ImageMagick أداة
قراءة وكتابة وتغيير حجم ودمج صور GIF بما في ذلك التعامل مع إطارات الحركة
Pillow مكتبة
مكتبة معالجة صور بايثون مع دعم قراءة/كتابة GIF واستخراج الإطارات وتجميع الحركة
sharp مكتبة
مكتبة معالجة صور عالية الأداء لـ Node.js مع دعم GIF عبر libvips