NOTA DEL AUTOR
Ya no utilizaré este proyecto ni le brindaré ningún apoyo. Si desea mantenerlo, envíeme un mensaje de correo electrónico aquí: [email protected].
Este proyecto se creó hace 4 años, puede que ahora haya mejores formas de convertir un vídeo en un GIF, ¡usa Google!
/NOTA DEL AUTOR
Convierte cualquier archivo de vídeo en un GIF animado optimizado. Ya sea en toda su longitud o sólo en una parte.
Este screencast fue grabado con lolilolicon/FFcast y luego convertido a GIF con:
gifify screencast.mkv -o screencast.gif --resize 800:-1
stdin
y stdout
Antes de usar gifify, instale:
$ brew install node
)$ brew install ffmpeg
)$ brew install imagemagick
)$ brew install giflossy
)También puedes usar la imagen gifify de Docker que viene con todo lo instalado.
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
Vea el ejemplo.
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 ) ;
También puede pasar una secuencia legible a gifify(stream, opts)
.
Gifify admite transmisiones tanto en la línea de comando ( cat movie.mp4 | gifify -o out.gif
) como en la API programática ( gifify(readableStream, opts).pipe(writableStream)
).
Si bien es muy útil en algunos casos, si ya tienes el archivo en el disco, será mejor que hagas gifify movie.mp4 -o out.gif
o gifify(filePath, opts).pipe(writableStream)
.
¿Por qué? Porque canalizar 3,4 GB cuando deseas cortar de 40:20 a 40:22 todavía lleva muchísimo tiempo y no te brinda ningún beneficio de rendimiento.
FFmpeg tiene que leer desde 0GB -> $START_BYTE_40:20 y lo descarta. Pero todo fluye en tu memoria.
Cuando usamos la entrada directa de archivos desde la línea de comando, pasamos la opción -i filename
a FFmpeg y luego ¡es súper rápido!
Tenga cuidado al realizar |piping
.
Puedes grabar un texto simple en tu GIF:
gifify back.mp4 -o back.gif --from 01:48:23.200 --to 01:48:25.300 --text " What?..What?What? "
Resultado:
Puedes grabar subtítulos en tu GIF, es así de fácil:
gifify 22.mkv -o movie.gif --subtitles 22.ass --from 1995 --to 2002 --resize 600:-1
Debes crear nuevos archivos de subtítulos, los códigos de tiempo de la película completa no funcionarán durante un GIF de cinco segundos.
¡Crea subtítulos usando aegisub y aumenta el tamaño de fuente para lograr un gran efecto!
Aquí está el 22.ass
del comando anterior, creado con 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.
Resultado extrayendo un GIF de 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/eficiente-gifs#sec44
¡YOLO!
Giflossy es una bifurcación de gifsicle, el autor de gifsicle está trabajando actualmente en la integración de la parte con pérdida en gifsicle.
Así que en poco tiempo podremos utilizar directamente los paquetes gifsicle y gifiscle.
jclem/gifify fue una gran fuente de inspiración.