Cómo crear un gif a partir de un video descargado de youtube

El en «basicos» por mazorca
palabras clave: , ,

Primero necesitamos un par de herramientas herramientas:

 apt install ffmpeg youtube-dl
 

y ahora descargamos un video para determinar el momento de inicio y fin del gif:

youtube-dl -f webm https://www.youtube.com/watch?v=lGP1YFE5s4M -o video.webm
 

ahora extraemos el segmento del video que queremos convertir a gif, reemplazando XX por el tiempo previo al inicio de fragmento, y YY por la duración del mimsmo.

ffmpeg -ss XX:XX:XX -i video.webm -ss 00:00:00 -t YY:YY:YY -c copy fragmento.webm

luego generamos un patrón para el gif, en el que reemplazamos YYY por el tamaño del lienzo (640)

ffmpeg -y  -i fragmento.webm -vf fps=10,scale=YYY:-1:flags=lanczos,palettegen patron.png 

después convertimos el video a gif

ffmpeg   -i fragmento.webm -i patron.png -filter_complex  "fps=10,scale=640:-1:flags=lanczos[x];[x][1:v]paletteuse" archivo.gif

y finalmente recortamos el gif para extraer la parte del lienzo que queremos, reemplazando XXX por el el ancho, YYY por el alto, ZZZ por el margen izquierdo y AAA por el superior.

convert archivo.gif -coalesce -repage 0x0 -crop XXXxYYY+ZZZ+AAA +repage final.gif

los pasos exactos que seguí para generar este gif fueron

~$ youtube-dl -f webm https://www.youtube.com/watch?v=lGP1YFE5s4M -o video.webm
~$ ffmpeg -ss 00:00:53 -i video.webm -ss 00:00:00 -t 00:00:05 -c copy fragmento.webm
~$ ffmpeg -y  -i fragmento.webm -vf fps=10,scale=640:-1:flags=lanczos,palettegen patron.png
~$ ffmpeg   -i fragmento.webm -i patron.png -filter_complex  "fps=10,scale=640:-1:flags=lanczos[x];[x][1:v]paletteuse" archivo.gif
~$ convert archivo.gif -coalesce -repage 0x0 -crop 320x300+150+000 +repage final.gif