Open main menu

Changes

no edit summary
convert myfile.pdf p_%03d.jpg
</texcode>
will convert the 300 pages of `myfile.pdf` to 300 images named `p_000.jpg`, `p_001.jpg`, ..., `p_299.jpg`. The next step is to assemble the images into a movie, which is done with the free ``''ffmpeg`` '' (https://ffmpeg.org) tool. The command
<pre>
ffmpeg -y -r 30 -i JPGdir/p_%03d.jpg -c:v libx264
</pre>
will assemble the JPG files at a framerate of 30 images per second (option \type{`-r 30}`) into a QuickTime MP4 movie named \type{''myMovie.mp4}''.
[[File:Project1-A.mp4]]
For an overview, here's the complete script for a Unix-like system. After producing the PDF with Context (line 1), we create a temporary folder named \type{`JPGdir} ` (line 2), convert the PDF to a series of JPG images in the created folder (line 3), create a QuickTime MP4 movie from the JPG images (lines 4-5), clean up (line 6), and finally, open the movie (line 7) :
<pre>
</pre>
A note about the definition of the picture: although the conversion from PDF to JPG could be made at any resolution with ImageMagick, the default density is 72 dpi. This means that if the size of the PDF page is 15 inches by 15 inches (equivalent to 1080 pixels by 1080 pixels, or 38.1 cm by 38.1 cm at a definition of 72 dpi), the resulting image will also be 1080 pixels by 1080 pixels. Therefore, if the intention is to create a UHD video, add the following line at the end of the code (line 18before the `\stopMPpage`):
<pre>
</pre>
The number of frames needed for a movie can be large. For example, consider a five-minute movie at 30 frames per second: we would need 5 x 60 x 30 = 9,000 frames. If there are a lot of calculations for each frame, this could pose an issue. Therefore, during development, it could be useful to speed up the the processes : sometimes, it's possible to speed up or adjust the timing. For instance, assume the loop instruction `currentframe := #1;` in the preceding code at line 12 is changed to:
<texcode>
currentframe := (#1-1)*100 ;
</texcode>
The first page of the file will correspond to frame 1, the second to frame 100, the third to frame 200, and the last one, the fourth, to frame 300. This allows us to obtain a rough idea of the movie without generating every single page. However, as will become clear later, this approach is not always feasible.
== More animated objects ==
Let's make things more interesting by adding more moving elements, says a lot of particles moving along several circles in a random fashion. If the positions of the animated objects are deterministic, such as a function of time (`{f(time)`) as shown in our first example, there is no difficulty in calculating the positions and drawing the object at these positions, something like:
<texcode>
On each circle ''c'' (`c=1,...,nbcircles`), we will define some objects ''o'' (`o=1,...,nbObjects[c]`) (called sometimes particles here), so the total number of objects is `O = nbObjects[1] + nbObjects[2]+...+nbObjects[nbcircles]`. Each object ''o'' on circle ''c'' will have at time ''t'' the position `Position[c][o][t]`. This position, express as a number in [0,1] is a coordinate along the path `ThePath[c]`. The position at time 1 is chosen randomly along the path ''c'' (line 13), and then will be calculated for each time ''t'' from the position at time ''t-1'' (line 18). Each object will have its own `deplacement`, which depends on the length of the circle modified by random factor (line 14). Lastly, to distinguish easily particles in the following figures, we will assign a random color to each one (line 16): `TheColor[c][o]`
<texcode>
and == Showcase of the finished project == We can make things more interesting by adding a lot of particles, having a moving frame, add some music,..., and increase the definition : to 2160x2160 (you can go full-screen!) :  
<!-- [[File:Project1-C2-1080.mp4]] -->
[[File:Project1-C2-2160.mp4|500px]]
== Showcase of some movies made with MetaFun ==<!--
We can also play with the timing of the animation (code not shown) : [[File:Project1-B-Slow.mp4|500px]]
 Here are some littles hand drawn houses (code not shown) (p2B):[[File:Project2-B.mp4|300px]] Here are some littles hand drawn houses (code not shown)(p2B2):
[[File:Project2-B2.mp4|500px]]
<!-- [[File:Project2-A.mp4]] -->
And a tortured 'a' (code not shown):
[[File:Project3-C.mp4|500px]]
--> <!-- == Temporary ==[[File:Project2-B.mp4|300px]] Project1-C2-2160 : [[File:Project1-C2-2160.mp4|200px]]Project3-C : [[File:Project3-C.mp4|200px]]Project3-B : [[File:Project3-B.mp4|200px]]Project2-B2: [[File:Project2-B2.mp4|200px]]Project2-A : [[File:Project2-A.mp4|200px]]Project1-C2-1080 : [[File:Project1-C2-1080.mp4|200px]]Project1-B: [[File:Project1-B.mp4|200px]]Project1-B-Slow: [[File:Project1-B-Slow.mp4|200px]]Project1-A : [[File:Project1-A.mp4|200px]] -->
36

edits