Convert jpg to video

Video Production Asked on November 27, 2020

I have a camera which when motion is detected uploads JPG files at roughly one a second — so I want to take them and convert them back to video.

For the uploaded files

  • It sometimes skips a few uploads (up to about 3 second gaps)
  • They continue for around 20 seconds after motion has ceased
  • The files are 640×480 color 24-bit Depth and each is around 40K
  • The pictures vary in lighting between stills
  • There are no files once the motion detection has stopped — so a gap in files can be used to determine the end of video

So I want to use a script to make these into a video – I’d like to

  • Extend each JPG to the correct length of time
  • “watermark” the timestamp onto the video
  • Compress the video

For compression, I feel that the common background and large sections of unchanging video should be highly compressible

I’ll be able to write the scripts which would include
– the selection of the right set of files to include in each video
– production of an intermediate parameter file
– calculation of time span of each still image
– determination of end of movie — including still currently recording

I’m running on a Window’s laptop — but would consider a Raspberry Pi or Ubuntu system.

I’ve looked at FFmpeg but got a little lost of where to start — I did find possible-to-stream-append-images-into-an-existing-mp4. Which is close and I can start with this. However, one answer seemed to be saying that this may cause loss of fidelity with a comment saying no it won’t. Also, I am unsure about how to make the JPGs extend to different lengths and how to watermark a time stamp onto each image

So my questions are
What tool and encoding format is a good match with what I want ?

Should I make the script wait until the files are fully produced or is it possible to append one JPG file to the movie stream at a time with parameters without excessive loss of fidelity?

Is timestamping best done with a watermark on the video – or with some metadata tagging and require the renderer to display timestamps?

I have included one image from the camera

One Still Image

One Answer

I would use shell scripting thus:

  • find the creation date of the first jpeg and the creation date of the subsequent jpeg.
  • if the time difference is <= 1 second then we have the start of a sequence. If the files are named sequentially then maybe move them to a subfolder. If not then move (or copy) the files to create a sequence.
  • while the time difference is <= 1 second keep updating the last frame of the sequence
  • once we have a non-sequential file create a video using ffmpeg
  • set the new first frame to the non-sequential file
  • repeat for all the jpegs.
  • concatenate all the videos

ffmpeg can create a video from an image sequence where the files are named frame_000.jpg, frame_001.jpeg, frame_002.jpg… thus:

ffmpeg -i frame_%03d.jpg -r 1 output.mp4

the -r 1 option sets the frame rate to 1 per second. If the sequence doesn't start with 000 then you can use -start_number 123 to specify the first frame. more details here

Answered by stib on November 27, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP