Vidéo dans un notebook¶
Links: notebook
, html, PDF
, python
, slides, GitHub
Ce notebook montre comment visualiser une vidéo dans un notebook.
from jyquickhelper import add_notebook_menu
add_notebook_menu()
Un texte qui défile sur une image¶
from code_beatrix.art.video import video_image, video_position
img = 'data/GastonLagaffe_1121.jpg'
vidimg = video_image(img, duration=5, opacity=200)
vidimg = video_position(vidimg, lambda t: (0, 0), relative=True)
from code_beatrix.art.video import video_text, video_compose
text = video_text('Gaston', size=2., color=(255, 0, 0, 128), background=(0, 255, 0, 100))
text = video_position(text, lambda t: (t * 0.1, t * 0.2), relative=True)
comb = video_compose([vidimg, text], t1=[0, 1])
comb.set_duration(5).ipython_display(fps=20)
99%|███████████████████████████████████████████████████████████████████████████████▏| 100/101 [00:01<00:00, 91.92it/s]
from code_beatrix.art.video import video_save
video_save(comb.set_duration(5), 'video.gif', fps=20, verbose=True)
[MoviePy] Building file video.gif with imageio
99%|███████████████████████████████████████████████████████████████████████████████▏| 100/101 [00:04<00:00, 23.42it/s]
from IPython.display import Image
Image("video.gif")
<IPython.core.display.Image object>
# comb.set_duration(5).ipython_display('video.avi', fps=20, codec='png') # format avi
comb.set_duration(5).ipython_display('video.mp4', fps=20) # format mp4
99%|███████████████████████████████████████████████████████████████████████████████▏| 100/101 [00:01<00:00, 83.85it/s]
Un petit bonhomme qui marche¶
On s’inspire des dessins animés en dessinant image avec le module gizeh. L’article Vector Animations With Python montre d’autres exemples assez amusant. Le bonhomme patine plus qu’il ne marche. A améliorer.
import gizeh
from math import pi, sin, cos
from code_beatrix.art.video import video_frame
def bonhomme(t):
surface = gizeh.Surface(228,128)
radius = 10
t = t*2
# jambe 1
angle = sin(t)*pi/4 + pi/2
lx = 25
dx = lx/2 * cos(angle)
dy = lx/2 * sin(angle)
ddy = 25-2*dy # pour donner l'impression que la tête monte et descend
px = t*10 + 25-2*dx - 50 # position du bonhomme dans l'image
bar = gizeh.rectangle(lx=lx, ly=4, xy=(64+dx+px,60+dy+ddy), angle=angle, fill=(1,0,0))
bar.draw(surface)
# jambe 2
angle = -sin(t)*pi/4 + pi/2
dx = lx/2 * cos(angle)
dy = lx/2 * sin(angle)
bar = gizeh.rectangle(lx=lx, ly=4, xy=(64+dx+px,60+dy+ddy), angle=angle, fill=(1,0.3,0))
bar.draw(surface)
# tronc et tête
circle = gizeh.circle(radius, xy = (64+px,30++ddy), fill=(1,0,0))
circle.draw(surface)
bar = gizeh.rectangle(lx=6, ly=20, xy=(64+px,50+ddy), fill=(1,0,0))
bar.draw(surface)
# fin
return surface.get_npimage()
comb = video_frame(bonhomme)
comb.set_duration(10).ipython_display('bonhomme.mp4', fps=20)
100%|██████████████████████████████████████████████████████████████████████████████▌| 200/201 [00:00<00:00, 569.10it/s]