Now you have a shiny new 3D printer. You start printing parts at considerable rate and haunting thingiverse for things to make. What about making a magical video of the thing that grows into reality (almost) instantly ?
This tutorial will describe this process in detail.
A timelapse is a movie built from periodic pictures all looking at the same scene or slightly similar scene. The movie is not played at the same rate as the picture period (or it'll be too slow) but at usual frame rate (25fps or more). If the picture acquisition period is large, the movie will dramatically accelerate the scene that was pictured.
This usually results in a very pleasant clip to watch that's not as boring as the original (very slow) scene. However, for the illusion to work, the scene must not move or change dramatically between shots.
For a 3D printing process, this means that the pictures that'll be captured must not contains moving parts (like a hotend or the extruder), or, if they do, they must be captured when they are at the exact same position, with respect to the camera's field of view.
So, hardware first, you'll need:
My camera choice was to use a USB webcam in UVC format (USB Video Class). You must make sure the camera is able to encode its frame in JPEG format (more on that later on). It should also support high definition format. 720p is a minimum video resolution but 1080p or more is better. Most USB webcam sold as of 2021 are UVC compatible and support MJPG format. I've listed few that I know are working in the affiliated links below.
For the software, you'll need to :
In the usual Octoprint tutorial, they ask you to install mjpg-streamer software. I'm not fond of this software since it has some limitations that prevent doing both print monitoring and capturing timelapses. mjpg-streamer connects to your camera source and streams the JPEG frames received from the camera to a HTTP client (in your case, you are the final client, even if you watch the video via the Octoprint web interface). While it supports many sources (like, being able to encode a source to JPEG, using Raspberry Camera, etc...), it's not able to capture multiple picture resolution for a source.
So, if you want to monitor your 3D print process and capture a timelapse, you will then run your camera at full resolution most of the time and monitoring the printer will consume a huge bandwidth (in reality, it'll be slow and crappy)
Instead, I've written a software here that allows both resolution to be used at the same time, the low resolution is used for most of the monitoring process and the full resolution is used for the timelapse process. No more slutter while checking the print is going well and still capture the best possible video source material for your video needs!
In order to install it, you'll need to open a terminal on your computer or Raspberry Pi (it must run linux) and run the following commands:
$ git clone https://github.com/X-Ryl669/MJPGServer.git
$ cd MJPGServer/build/linux
Then test it's working:
$ ./mjpgsrv -p 8080 -c /dev/video0
Thank you for using MJPGServer
Detected maximum picture size as 1280 x 720
Video set up for width:640, height:480, format:MJPG - LittleEndian
Buffer 0 (len: 614400 bytes) mapped at 0x7f0c06717000
Buffer 1 (len: 614400 bytes) mapped at 0x7f0c06681000
Buffer 2 (len: 614400 bytes) mapped at 0x7f0c065eb000
Server started on: http://your.computer.ip.here:8080
You'll need to browse to
http://your.computer.ip.here:8080 and if you see the stream of your webcam, it's working as expected. You can click the button and you'd get a full resolution picture from your webcam.
Finally, you'll need to instruct Octoprint to use this server for monitoring/timelapsing, so you'll need to set up the stream URL in Octoprint's setting page.
The usual stream URL are
http://your.computer.ip.here:8080/mjpg for the monitoring stream and
http://your.computer.ip.here:8080/full_res for the full resolution picture.
It's also displayed in your browser page, you can copy and paste from there.
Notice: The command above will start the server and it'll run until the computer is stopped or the terminal is closed. If you need to start it automatically, you'll need to write a service or configure Octoprint to run it for you.
When running Octolapse, you'll need to tell it when to capture picture. You want to move the extruder head out of the way when the picture is captured, or at least, move it at a fixed position between each layer.
...TO BE CONTINUED...
In order to pay for infrastructure cost for this blog, I'm listing some affiliated links about the hardware listed above.