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]