Create time lapse video from images: Difference between revisions

From WickyWiki
mNo edit summary
mNo edit summary
Line 26: Line 26:
</syntaxhighlight>
</syntaxhighlight>


= Playback speed, Cropping and Music =
= Playback speed and Music =


The original video-length is the length when we create the video without 'setpts=~'. The images will be read as a stream of 25 pictures per second (input framerate=25). For example:
The original video-length is the length when we create the video without 'setpts=~'. The images will be read as a stream of 25 pictures per second (input framerate=25). For example:
Line 44: Line 44:
   setpts=(PTS-STARTPTS)*(1*60+30)/(1*60+40)
   setpts=(PTS-STARTPTS)*(1*60+30)/(1*60+40)


Note: my source is a set of pictures of size 1280x1024, by cropping this to 1280:800 I will have a 16:10 aspect ratio:
= Cropping =


Here is a complete example:
My source is a set of pictures of size 1280 x 1024, by cropping this to 1280:800 I will have a 16:10 aspect ratio (which is a better fit for my screen).
 
  1280 * 10/160 = 800
 
I want to keep the bottom part of the picture so I need to move down by:
 
1024 - 800 = 224
 
This results in the video filter option:
 
  crop=1280:800:0:224
 
= The complete example =


<syntaxhighlight lang=bash>
<syntaxhighlight lang=bash>
Line 57: Line 69:


   -f concat -safe 0 -i "files.txt"
   -f concat -safe 0 -i "files.txt"
Add music from mp3 file:
  -i "music.mp3"


These options allow for this index-file format:
These options allow for this index-file format:
Line 67: Line 75:
       file '/full/path/to/file2.jpg'
       file '/full/path/to/file2.jpg'
       ...
       ...
Add music from mp3 file:
  -i "music.mp3"


Video filter. Speedup video x2:
Video filter. Speedup video x2:
Line 78: Line 90:
Output framerate:
Output framerate:


   -r 30
   -r 25


Output codec:
Output codec:

Revision as of 20:51, 21 March 2019


Create timelapse

Install ffmpeg:

sudo apt install ffmpeg

Create timelapse indexfile:

sourcedir=$HOME/Pictures/timelapse

find "${sourcedir}" -iname "*.jpg" -type f | sort | sed "s/\(.*\)/file '\1'/g"  > "${sourcedir}/../files.txt"

Create the video:

ffmpeg -f concat -safe 0 -i "${sourcedir}/../files.txt" -r 25 -vcodec libx264 -crf 22 "${sourcedir}/../out.mp4"

Playback speed and Music

The original video-length is the length when we create the video without 'setpts=~'. The images will be read as a stream of 25 pictures per second (input framerate=25). For example:

 2500 pictures -> 2500/25 = 100 seconds of video = 1:40 minutes

Lets say you have some music and want to speed-up the video to match the music length:

 Music length 1:30 minutes

Then use the following video filter to shorten the video by increasing the playback speed:

 setpts=(PTS-STARTPTS) * <music-length> / <video-length>

You can add this option as a simple formula:

 setpts=(PTS-STARTPTS)*(1*60+30)/(1*60+40)

Cropping

My source is a set of pictures of size 1280 x 1024, by cropping this to 1280:800 I will have a 16:10 aspect ratio (which is a better fit for my screen).

 1280 * 10/160 = 800

I want to keep the bottom part of the picture so I need to move down by:

1024 - 800 = 224

This results in the video filter option:

 crop=1280:800:0:224

The complete example

ffmpeg -f concat -safe 0 -i "${sourcedir}/../files.txt" -i "${sourcedir}/../music.mp3" -filter:v "setpts=(PTS-STARTPTS)*(1*60+30)/(1*60+40), crop=1280:800:0:224" -r 35 -vcodec libx264 -crf 22 "${sourcedir}/../out.mp4"

Overview of the used options

Input index-file 'files.txt':

 -f concat -safe 0 -i "files.txt"

These options allow for this index-file format:

     file '/full/path/to/file1.jpg'
     file '/full/path/to/file2.jpg'
     ...

Add music from mp3 file:

 -i "music.mp3"

Video filter. Speedup video x2:

 -filter:v "setpts=(PTS-STARTPTS) / 2"

Video filter. crop=<width>:<height>:<left>:<top>:

 -filter:v "crop=1280:800:0:224"

Output framerate:

 -r 25 

Output codec:

 -vcodec libx264 

'Constant Rate Factor' quality setting. For x264, this means setting a value somewhere between 18 and 26 for this CRF. The default is 23, and higher values will give you worse quality.

 -crf 22

Sources: