7. Generate an animation from a matplotlib figure¶
[1]:
from fractions import Fraction
import cutcutcodec
import matplotlib.pyplot as plt
7.1. Define a parametric figure¶
The animation consists on a simple parametric curve on t, evolving between 0 to 1 second
[2]:
# very simple matplotlib figure
duration = 1.0 # video duration in second
def parametric_fig(timestamp: Fraction) -> plt.Figure:
"""Return a filled matplotlib figure, parametrize by the time."""
fig = plt.figure(layout="constrained", figsize=(7, 4)) # w, h
fig.supxlabel("abscissa")
fig.supylabel("ordinate")
axe = fig.subplots(squeeze=True)
axe.set_xlim([0, 1])
axe.set_ylim([0, 1])
axe.plot([0, 1], [timestamp, timestamp]) # horizontal line
return fig
7.2. Create the video¶
[3]:
# write outputfile with low compression (high quality)
(stream,) = cutcutcodec.generation.GeneratorVideoMatplotlib(parametric_fig).out_streams
clipped_stream = stream.apply_video_subclip(0, duration)
streams_settings = [
{"encodec": "libx264", "rate": 30, "shape": (480, 720), "options": {"crf": "23", "preset": "ultrafast"}},
]
cutcutcodec.write([clipped_stream], "/tmp/matplotlib.mp4", streams_settings=streams_settings)
Encoding matplotlib.mp4: 100%|█████████████████████████████████████████████████████████████| 1.00s/1.00s [00:18<00:00]