Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part)

Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part) was first published on Farai’s Codelab.

This post will supplement an upcoming post on why you should stop using GIFs in favor of newer image and video formats….


This content originally appeared on DEV Community and was authored by Farai Gandiya

Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part) was first published on Farai's Codelab.

This post will supplement an upcoming post on why you should stop using GIFs in favor of newer image and video formats. Here’s how to generate animated images in various media formats using FFMpeg.

Table of Contents

Preparing The Source Clip For Further Conversion

First thing to do is convert it to an uncompressed y4m video, slicing it up and setting the framerate as necessary:

ffmpeg -ss <start_point> -t <duration_from_start> -i <source_media> -an -vf 'scale=<width>:<height>,setpts=<stretch_factor>*PTS,fps=<framerate>' -pix_fmt yuv420p <raw_input>.y4m

What the option flags mean:

Option Description
-ss Marks the start position of the video stream as a time duration
-t Specifies the duration of the datastream from -ss (or 0) as a time duration. Use both -ss and -t before -i to limit the video input.
-an Removes audio
-vf The video filters
scale Sets the w idth and h eight of the video
setpts Sets the presentation timestamps (PTS) for the video. Used to speed up and slow down video
fps Specifies the framerate for the video.
pix_fmt Sets the color format. Not necessary and the only reason I specified it is because I had issues in an earlier draft

Note, if you are going to set a framerate for a GIF, it has a delay between frames in hundreths of a second (fps=100/delay). So:

Delay Framerate
1 10pfs
2 50fps
3 33fps
4 25fps
5 20fps
6 15fps

Images

GIF

ffmpeg -i <source_input>.y4m -filter_complex "[0:v] split [a][b];[a] palettegen [p];[b][p] paletteuse" -loop 0 <output>.gif

Simply put the -filter_complex flag in this case generates a color palette to use in the GIF. See GIPHY’s Engineering blog on how to make GIFs to explain the flag.

You can leave it out, resulting in a much smaller GIF (at the expense of quality).

WebP

ffmpeg -i <raw_input>.y4m -loop 0 -q:v 100 -compression_level 6 <output>.webp

q:v is the image quality, from 0 to 100. It’ll be much smaller, but WebP can get blocky if you push the quality too hard.

Sequenced AVIF (Chrome For Now)

ffmpeg doesn’t support writing to AVIF containers when I wrote this, so you nee to use avifenc to do this.

avifenc <raw_input>.y4m <output>.avif

Videos

From here on out, I won’t go over the options too much since there’s a lot to consider, most of which I don’t understand so I’ll link to the respective encoding guide if you want more options.

AVC/h.264 MP4 (widest support)

ffmpeg -i <raw_input.y4m -c:v libx264 -preset veryslow .<output>.mp4

The preset flag tries to find the best tradeoff between quality and compression at a given bitrate and file size.

H.264 Encoding Guide

HEVC/h.265 (WebKit)

ffmpeg -i <raw_input>.y4m -c:v libx265 -preset veryslow <output>.mp4

preset is the same as in AVC.

H.265 Encoding Guide

VP8/VP9 (Android)

Switch the vp8 for vp9 depending on which one you choose. vp9 is newer so better, although it doesn’t have the support of vp8 (although it’s reasonable).

ffmpeg -i <raw_input>.y4m -c:v vp8 <output>.webm

VP8 Encoding Guide/VP9 Encoding Guide

AV1 Video (Chrome and Firefox)

Encoding AV1 will use a lot of CPU and it takes a very long time; more so on my shitty laptop encoding at 0.1fps.

ffmpeg -i <raw_input>.y4m -strict -2 -c:v libaom-av1 .<raw_input>.webm

AV1 Encoding Guide.

Thanks for reading! If you liked this post, consider supporting my work by:

You can also subscribe to my newsletter.

Have feedback? Send an email to gandiyafarai+feedback at gmail dot com


This content originally appeared on DEV Community and was authored by Farai Gandiya


Print Share Comment Cite Upload Translate Updates
APA

Farai Gandiya | Sciencx (2021-04-15T17:07:31+00:00) Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part). Retrieved from https://www.scien.cx/2021/04/15/converting-video-into-animated-images-and-other-videos-with-ffmpeg-for-the-most-part/

MLA
" » Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part)." Farai Gandiya | Sciencx - Thursday April 15, 2021, https://www.scien.cx/2021/04/15/converting-video-into-animated-images-and-other-videos-with-ffmpeg-for-the-most-part/
HARVARD
Farai Gandiya | Sciencx Thursday April 15, 2021 » Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part)., viewed ,<https://www.scien.cx/2021/04/15/converting-video-into-animated-images-and-other-videos-with-ffmpeg-for-the-most-part/>
VANCOUVER
Farai Gandiya | Sciencx - » Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part). [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/04/15/converting-video-into-animated-images-and-other-videos-with-ffmpeg-for-the-most-part/
CHICAGO
" » Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part)." Farai Gandiya | Sciencx - Accessed . https://www.scien.cx/2021/04/15/converting-video-into-animated-images-and-other-videos-with-ffmpeg-for-the-most-part/
IEEE
" » Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part)." Farai Gandiya | Sciencx [Online]. Available: https://www.scien.cx/2021/04/15/converting-video-into-animated-images-and-other-videos-with-ffmpeg-for-the-most-part/. [Accessed: ]
rf:citation
» Converting Video into Animated Images (and Other Videos) With FFmpeg (For The Most Part) | Farai Gandiya | Sciencx | https://www.scien.cx/2021/04/15/converting-video-into-animated-images-and-other-videos-with-ffmpeg-for-the-most-part/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.