It’s time for the holidays and what better way to share love and memories with your family than to create an old-school, vintage movie? You don’t need a time-machine to go back to the 50s or 60s to rmake your homevideo look like a vintage movie. All you need is FFmpeg, some imagination, and perhaps the rest of this guide 🙂
Let’s take a look at how you can use FFmpeg to make your videos look like old-school/vintage/retro-styled movies, shall we?
What Do I Mean By A Vintage Movie?
Well, good question!
My definition of an old-school movie is a movie with a low frame-rate (like 15 fps), lots of scratches and film-grain to give an aged look, and a sepia tint to it!
Let’s see how we can achieve all of this using FFmpeg.
For this tutorial, I shall be using the “Touchdown Pass” sequence from Xiph to illustrate the steps. It’s a 20 second video, but for the sake of this tutorial, I’ll be cutting it to 10 seconds using FFmpeg (here’s how to do that).
Let’s get started!
Step 1: Changing the Frame Rate using FFmpeg
The first step is to “speed” up the video. Let’s take the video back to pre-30fps or pre-60fps days and take it all the way down to 10 fps. This gives the video an old-school look right off the bat!
ffmpeg.exe -i td-10sec.mp4 \ -filter:v fps=fps=10 \ td-fast.mp4
Here is the sped-up video.
Step 2: Give The Video a Vintage Look using FFmpeg’s filters
Next, let’s change the rich, wonderful colors and bring a sepia-link tint to the entire video. This can be done using FFmpeg’s in-built
curves filter. You can use the
curves filter to change the amount of R, G, B in a frame and specify the “curves” that govern the change or shift in colors.
Luckily for us, FFmpeg has a pre-defined
vintage filter that works pretty well, I must say! Here is the commandline to convert our sped-up video into a “vintage” looking video. Simple, right?
ffmpeg.exe -i td-fast.mp4 \ -vf curves=vintage \ td-vintage-fast.mp4
Here’s the result of the
curves=vintage filter on our footall video.
Step 3: Getting a Film Grain Overlay and Resizing It
As the final step, let’s add a lot of film-grain and “scratches” to make our video look like something that was shot on film, stored in a dusty old cupboard, and discovered 40 years later!
I found a fantastic “old school” film overlay on YouTube (source link) with a download link.
The video’s size is
1440x1080 pixels and so I had to resize it to
1920x1080 to match the size of my input video.
Here is the command to resize a video using FFmpeg using the the
scale filter. I’ve stored the output video as
ffmpeg -i old-film-grain.wmv \ -vf scale=1920:1080,setsar=1:1 \ oldFilm1080.mp4
Step 4: Add the Overlay To Your Video
Now we have two videos with us –
- our old-school film-grain-scratchy video
- our vintage-looking, sped-up football video.
Now all that’s left to do is to overlay them on each other and enjoy the fruits of
our FFmpeg’s labor!
Here’s the commandline to achieve that.
ffmpeg.exe \ -i oldFilm1080.mp4 \ -i td-vintage-fast.mp4 \ -filter_complex "format=rgba,colorchannelmixer=aa=0.25[fg];\ [fg]overlay[out]" \ -map [out] \ -pix_fmt yuv420p -c:v libx264 -crf 18 \ touchdown-vintage.mp4
So, what’s going on here?
- we provide two input videos to FFmpeg
filter_complex, we use
colorchannelmixerto overlay by modifying the alpha channel of the film-grain video that is referred to as
and and let’s call the output
[fg]. It’s black and white, so modifying only the alpha is good enough for our use case. The syntax is as follows
- we are modifying only the alpha, and so, we modify only the
aa(output’s alpha) to
- then, we use the vintage-looking football video (referred to as
) and overlay them both using the
overlayfilter to create an interim output stored in a variable called
[out]. This is shown in the commands –>
- then, we encode the interim output to give us the final video using H.264 with
crf=18which should give us a good quality video.
Here is what the final output looks like! Cool, isn’t it?
And, here’s how it looks side-by-side the original video.
Now you can change the opacity of the alpha channels, use a different film grain video, or use a different
curves function, but, the process won’t change much.
Hope you all have a lot of fun making “vintage” videos this holiday season and please let me know in the comments how it went! Please create some fun videos, share them with your loved ones, and have a few laughs 🙂
If you enjoyed this post, do check out the rest of OTTVerse’s FFmpeg tutorials to learn more about how to use FFmpeg to improve your video editing, compression, and processing skills!
Krishna Rao Vijayanagar
I’m Dr. Krishna Rao Vijayanagar, founder of OTTVerse. I have a Ph.D. in Video Compression from the Illinois Institute of Technology, and I have worked on Video Compression (AVC, HEVC, MultiView Plus Depth), ABR streaming, and Video Analytics (QoE, Content & Audience, and Ad) for several years.
I hope to use my experience and love for video streaming to bring you information and insights into the OTT universe.