ملاحظة من المؤلف
لم أعد أستخدم هذا المشروع أو أقدم أي دعم له، إذا كنت ترغب في الحفاظ عليه، فاتصل بي هنا: [email protected].
تم إنشاء هذا المشروع منذ 4 سنوات، قد تكون هناك طرق أفضل لتحويل مقطع فيديو إلى صورة GIF الآن، استخدم جوجل!
/ ملاحظة من المؤلف
تحويل أي ملف فيديو إلى صورة GIF متحركة محسنة. إما بطوله الكامل أو بجزء منه فقط.
تم تسجيل تسجيل الشاشة هذا باستخدام lolilicon/FFcast ثم تم تحويله إلى ملف GIF باستخدام:
gifify screencast.mkv -o screencast.gif --resize 800:-1
stdin
و stdout
قبل استخدام gifify، الرجاء تثبيت:
$ brew install node
)$ brew install ffmpeg
)$ brew install imagemagick
)$ brew install giflossy
)يمكنك أيضًا استخدام صورة gifify Docker التي تأتي مع كل شيء مثبت.
npm install -g gifify
> gifify -h
Usage: gifify [options] [file]
Options:
-h, --help output usage information
-V, --version output the version number
--colors < n > Number of colors, up to 255, defaults to 80
--compress < n > Compression (quality) level, from 0 (no compression) to 100, defaults to 40
--from < position > Start position, hh:mm:ss or seconds, defaults to 0
--fps < n > Frames Per Second, defaults to 10
-o, --output < file > Output file, defaults to stdout
--resize < W:H > Resize output, use -1 when specifying only width or height. ` 350:100 ` , ` 400:-1 ` , ` -1:200 `
--reverse Reverses movie
--speed < n > Movie speed, defaults to 1
--subtitles < filepath > Subtitle filepath to burn to the GIF
--text < string > Add some text at the bottom of the movie
--to < position > End position, hh:mm:ss or seconds, defaults to end of movie
--no-loop Will show every frame once without looping
انظر المثال.
var fs = require ( 'fs' ) ;
var gifify = require ( 'gifify' ) ;
var path = require ( 'path' ) ;
var input = path . join ( __dirname , 'movie.mp4' ) ;
var output = path . join ( __dirname , 'movie.gif' ) ;
var gif = fs . createWriteStream ( output ) ;
var options = {
resize : '200:-1' ,
from : 30 ,
to : 35
} ;
gifify ( input , options ) . pipe ( gif ) ;
يمكنك أيضًا تمرير دفق قابل للقراءة إلى gifify(stream, opts)
.
يدعم Gifify التدفقات في سطر الأوامر ( cat movie.mp4 | gifify -o out.gif
) وفي واجهة برمجة التطبيقات البرمجية ( gifify(readableStream, opts).pipe(writableStream)
).
على الرغم من أنه مفيد للغاية في بعض الحالات، إذا كان لديك الملف على القرص بالفعل، فمن الأفضل أن تفعل gifify movie.mp4 -o out.gif
أو gifify(filePath, opts).pipe(writableStream)
.
لماذا؟ لأن توصيل 3.4 جيجابايت عندما تريد القطع من 40:20 إلى 40:22 لا يزال يستغرق الكثير من الوقت ولا يمنحك أي فائدة في الأداء.
يجب أن يقرأ FFmpeg من 0 غيغابايت -> $START_BYTE_40:20 ويتجاهله. لكن كل شيء يتدفق في ذاكرتك.
عند استخدام الإدخال المباشر للملف من سطر الأوامر، نقوم بتمرير خيار -i filename
إلى FFmpeg ومن ثم يتم ذلك بسرعة فائقة!
كن حذرا عند |piping
.
يمكنك نسخ بعض النصوص البسيطة في ملف GIF الخاص بك:
gifify back.mp4 -o back.gif --from 01:48:23.200 --to 01:48:25.300 --text " What?..What?What? "
نتيجة:
يمكنك نسخ الترجمات إلى ملف GIF الخاص بك، الأمر بهذه السهولة:
gifify 22.mkv -o movie.gif --subtitles 22.ass --from 1995 --to 2002 --resize 600:-1
يجب عليك إنشاء ملفات ترجمة جديدة، لن تعمل الرموز الزمنية للفيلم الكامل لمدة خمس ثوانٍ بتنسيق GIF.
قم بإنشاء ترجمات باستخدام aegisub وقم بزيادة حجم الخط للحصول على تأثير رائع!
إليك 22.ass
من الأمر السابق، الذي تم إنشاؤه باستخدام aegisub:
[Script Info]
; Script generated by Aegisub 3.2.1
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None
[Aegisub Project Garbage]
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:02.50,0:00:03.97,Default,,0,0,0,,{fnLiberation Sansfs40}Okay, okay.
Dialogue: 0,0:00:05.00,0:00:06.90,Default,,0,0,0,,{fnLiberation Sansfs40}Okay. Okay.
نتيجة استخراج صورة GIF من 22 Jump Street:
On modern hardware GIF is the slowest and most expensive video codec. Can we please allow it to be obsoleted?
https://pornel.net/efficiency-gifs#sec44
يولو!
Giflossy عبارة عن فرع من gifsicle، ويعمل مؤلف gifsicle حاليًا على دمج الجزء المفقود في gifsicle.
لذلك، في وقت قصير، سنكون قادرين على استخدام حزم gifsicle وgifiscle مباشرة.
كان jclem/gifify مصدرًا رائعًا للإلهام.