Moviepy

Commande

_images/python11p01.png
_images/python11p02.png
IMAGEMAGICK_BINARY = 'C:\Program Files\ImageMagick_VERSION\convert.exe'

Commande

Vous pouvez également définir la IMAGEMAGICK_BINARY environnement variable voir moviepy/config_defaults.py pour plus de détails. PyGame est nécessaire pour les prévisualisations audio et vidéo (inutile si vous avez l’intention de travailler avec MoviePy sur un serveur mais vraiment indispensable pour le montage vidéo avancé ).

Installation de scipy sur windows:

Pour un traitement d’une image avancé vous aurez besoin une ou plusieurs de ces paquets. Par exemple à l’aide de la méthode clip.resize exige qu’au moins un des Scipy, PIL, Pillow ou OpenCV sont installés.

Le Python Imaging Library (PIL) ou Pillow. Scipy (pour le suivi, segmentation, etc.) et peut être utilisé pour redimensionner des clips vidéo si PIL et OpenCV ne sont pas installés sur votre ordinateur. Scikit_Image peuvent être nécessaires pour une manipulation d’image avancée. OpenCV 2.4.6_ ou plus récent (fournit le package cv2) ou plus récentes peuvent être nécessaires pour une manipulation d’image avancée.

Liens de téléchargements

Numpy+MKL : http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy-cluster est lié à l’Intel® Math Kernel Library et inclut les dll requises dans le répertoire numpy.core.

Numpy : https://www.scipy.org/install.html

Decorator : https://pypi.python.org/pypi/decorator

tqdm : https://pypi.python.org/pypi/tqdm

ffmpeg : https://www.ffmpeg.org/download.html

imageMagick : https://www.imagemagick.org/script/index.php

Pygame : https://www.pygame.org/download.shtml

imageio : https://imageio.github.io/

Pillow : https://pillow.readthedocs.org/en/latest/

Scipy : https://www.scipy.org/

Scikit Image : http://scikit-image.org/download.html

Github: https://github.com/Zulko/moviepy

PyPI : https://pypi.python.org/pypi/moviepy

OpenCV 2.4.6 : https://sourceforge.net/projects/opencvlibrary/files/

Note

Si vous êtes sous linux, ces logiciels seront sûrement dans votre système.

Propriétés de MoviePy

Utilisation du module Moviepy

Note

Vous pouvez éditer des vidéos en Python : Vous pouvez traiter beaucoup de vidéos et les modifier de façon compliquée. Vous pouvez automatiser la création de vidéos ou de GIFs sur un serveur web (Django, Flask, etc..). Vous pouvez automatiser, l’insertions de titres de sous-titres, etc… Vous pouvez coder vos propres effets vidéo de façon originale. Vous voulez créer des animations à partir des images python générées par une autre bibliothèque(Matplotlib, Mayavi, Gizeh, scikit-images…)

Note

Analyse image par image.

L’analyse vidéo image par image (avec détection de visage ou autres trucs de fantaisie). Cela peut se faire avec MoviePy en liaison avec d’autres bibliothèques, imageio, OpenCV_ ou SimpleCV. Vous voulez convertir un fichier vidéo, ou transformateur une série de fichiers image dans un film. Dans ce cas, il est préférable appeler directement ffmpeg (ou avconv ou mencoder).

Avantages et limites

Un simple intuitif : Opérations de base peuvent être faites en une seule ligne. Le code est facile à apprendre et facile à comprendre versez les nouveaux arrivants. Flexible : Vous avez un contrôle total sur les trames de la vidéo et audio, et créer vos propres effets est facile. Portable : Le code utilise un logiciel très commun (Numpy et FFMPEG) et peut fonctionner sur (presque) n’importe quelle machine avec (presque) n’importe quelle version de Python.

Commande

Effet

from moviepy.editor import *

Importation pour éditer des clips vidéo.

clip = VideoFileClip("video.mp4")

Chargeur de la video.mp4.

clip = VideoFileClip("video.mp4").subclip(50,60)

Puis de la vidéo de 50 minutes à 60 minutes.

clip = clip.volumex(0.5)

Réduire le volume sonore (volume multiplié par 0,5).

txt_clip = TextClip ("Ma vidéo") )

Générer un élément de texte.

fontsize = 8, color = "red" , font="verdana-Bold"

Personaliser le texte. fontsize : taille de la police.

txt_clip = txt_clip.set_pos('center').set_duration(15)

Apparition du texte pendant 15 secondes au centre de l’écran.

video = CompositeVideoClip([clip, txt_clip])

Intégrer l’élément de texte sur le premier clip vidéo.

video.write_videofile("Mavideo.mpeg)

Sauvegarder dans un fichier.

Fonctionnement de MoviePy

_images/python11p03.png

Fabrique un fichier gif

Méthode Effet
import numpy as np from moviepy.editor import * from moviepy.video.tools.segmenting import findObjects # Création du texte et position centrée. screensize = (600,460) txtClip = TextClip("Education\ndu\nNumérique",color='red', font="verdana-Bold", kerning = 5, fontsize=80) cvc = CompositeVideoClip( [txtClip.set_pos('center')], size=screensize) # Fonctions pour déplacer les lettres # Fonction d'aide rotMatrix = lambda a: np.array( [[np.cos(a),np.sin(a)], [-np.sin(a),np.cos(a)]] ) def reunir(screenpos,i,nletters): d = lambda t : 1.0/(0.3+t**8) #déplacement assoupli a = i*np.pi/ nletters # angle du mouvement v = rotMatrix(a).dot([-1,0]) if i%2 : v[1] = -v[1] return lambda t: screenpos+400*d(t)*rotMatrix(0.5*d(t)*a).dot(v) # utilisation du plugin findObjects pour localiser #et séparer les lettres letters = findObjects(cvc) # une liste ImageClips # Animation des lettres def moveLetters(letters, funcpos): return [ letter.set_pos(funcpos(letter.screenpos,i,len(letters))) for i,letter in enumerate(letters)] clips = [ CompositeVideoClip( moveLetters(letters,funcpos), size = screensize).subclip(0,5) for funcpos in [reunir] ] #concaténation et sauvegarde de la vidéo final_clip = concatenate_videoclips(clips) final_clip.write_videofile('enl.mp4',fps=25,codec='mpeg4')
_images/python1001.PNG
_images/enl.gif

Lettres en mouvement

Méthode Effet
#4604_concatenation_lettres.py import numpy as np from moviepy.editor import * from moviepy.video.tools.segmenting import findObjects # Création du texte et position centrée. screensize = (800,500) le_texte = TextClip("Affichage\nde lettres",color='gold', font="verdana-Bold", kerning = 5,transparent=True, fontsize=80) cvc = CompositeVideoClip( [le_texte.set_pos('center')], size=screensize) # Fonctions pour déplacer les lettres rotMatrix = lambda a: np.array( [[np.cos(a),np.sin(a)], [-np.sin(a),np.cos(a)]] ) def reunion(screenpos,i,nletters): d = lambda t : 1.0/(0.3+t**8) a = i*np.pi/ nletters v = rotMatrix(a).dot([-1,0]) if i%2 : v[1] = -v[1] return lambda t: screenpos+400*d(t)*rotMatrix(0.5*d(t)*a).dot(v) def cascade(screenpos,i,nletters): v = np.array([0,-1]) d = lambda t : 1 if t<0 else abs(np.sinc(t)/(1+t**4)) return lambda t: screenpos+v*400*d(t-0.15*i) def translation(screenpos,i,nletters): v = np.array([-1,0]) d = lambda t : max(0, 3-3*t) return lambda t: screenpos-400*v*d(t-0.2*i) def dispersion(screenpos,i,nletters): d = lambda t : max(0,t) a = i*np.pi/ nletters v = rotMatrix(a).dot([-1,0]) if i%2 : v[1] = -v[1] return lambda t: screenpos+400*d(t-0.1*i)*rotMatrix(-0.2*d(t)*a).dot(v) lettres = findObjects(cvc) # une liste def moveLetters(lettres, funcpos):# Animation des lettres return [ letter.set_pos(funcpos(letter.screenpos,i,len(lettres))) for i,letter in enumerate(lettres)] liste_video = [ CompositeVideoClip( moveLetters(lettres,funcpos), size = screensize).subclip(0,4).on_color(screensize,(1,1,1),col_opacity=1) for funcpos in [dispersion,translation,cascade,reunion] ] #concaténation et sauvegarde de la vidéo film=concatenate_videoclips(liste_video) film.write_videofile('concatenation.mp4',fps=15,codec='mpeg4')
  • Dispersion : la phrase ou le mot se disperse sur l’écran.
  • Réunion : la phrase ou le mot se reconstitue sur l’écran, avec les lettres qui proviennent de tous les côtés.
  • Cascade : la phrase ou le mot se reconstitue sur l’écran en tombant du haut de l’écran.
  • Translation : la phrase ou le mot se reconstitue sur l’écran en venat d’un côté ( c’est une translation en mathématiques ).
Méthode Effet

La dispersion

AFFICHAGE DE LETTRES se disperse.

eh5v.files/dispersion.gif

La dispersion

La réunion

AFFICHAGE DE LETTRES se réuni.

html5 video by EasyHtml5Video.com v3.9.1

La cascade

AFFICHAGE DE LETTRES tombe du haut.

html5 video by EasyHtml5Video.com v3.9.1

La translation

AFFICHAGE DE LETTRES se réuni en partant d’un côté.

html5 video by EasyHtml5Video.com v3.9.1
educationdunumerique.fr. Tous  droits réservés. D Pérarnaud Limoges.