automatic translation maschinelle Übersetzung

Add to Technorati Favorites
urzhiata | index



      créer une mosaïque de vidéos avec avisynth

Voici un tutoriel pour assembler plusieurs vidéos sous la forme d'une mosaïque et enregistrer le résultat sous forme de vidéo. Pour ça, nous utiliserons avisynth pour réaliser le script de montage et ffmpeg pour créer la vidéo finale (deux logiciels libres). Pour l'installation de ces deux logiciels, voir les 2 billets : installation de ffmpeg et utiliser ffmpeg avec avisynth).



une mosaïque à 4 cases

Voila le script avisynth dans version la plus simple, les 4 vidéos sont assignées une par une, et les opérateurs StackHorizontal et StackVertical permettent de faire l'assemblage. On part du principe que ces vidéos sont muettes et ont les mêmes caractéristiques (dimensions, images par seconde). Les vidéos seront assemblées de gauche à droite et de haut en bas. Ce script est à coller dans un fichier texte avec l'extension ".avs"

clip1 = AviSource("video1.avi") 
clip2 = AviSource("video2.avi") 
clip3 = AviSource("video3.avi") 
clip4 = AviSource("video4.avi") 
clip5 = StackVertical(StackHorizontal(clip1,clip2),StackHorizontal(clip3,clip4)) 
return clip5
mosaique video à 4 cases

Image créée à partir du script avisynth avec la commande ffmpeg suivante :
ffmpeg -i mosaique4.avs -an -ss 00:00:00 -r 1 -vframes 1 -s 320×240 -f mjpeg -y mosaique4.jpg


une mosaïque à 9 cases

Sur le même principe on peut étendre le script avisynth pour réaliser une vidéo à 9 cases

# pour un copier coller, enlever les retours à la ligne de la ligne clip 10
clip1 = AviSource("video1.avi") 
clip2 = AviSource("video2.avi") 
clip3 = AviSource("video3.avi") 
clip4 = AviSource("video4.avi") 
clip5 = AviSource("video5.avi") 
clip6 = AviSource("video6.avi") 
clip7 = AviSource("video7.avi") 
clip8 = AviSource("video8.avi") 
clip9 = AviSource("video9.avi") 

clip10 = StackVertical(StackHorizontal(clip1,clip2,clip3),
   StackHorizontal(clip4,clip5,clip6),
   StackHorizontal(clip7,clip8,clip9)) 
return clip10

mosaique video à 9 cases



une mosaïque avec des cases de différentes tailles

Un peu plus corsé cette fois, une mosaïque avec plusieurs cases, des cases noires, et une bande son rajoutée à la fin! Voila à quoi devrait ressembler notre vidéo finale :

mosaique video

# fixer les dimensions de base d'une case
largeur = 320
hauteur = 240
duree = 200

# créer les clips et égaliser leur propriétés
clip1 = AVISource("video1.avi").KillAudio.BicubicResize(largeur*2,hauteur*2)
         .ChangeFPS(25).ConvertToYUY2().Trim(0,duree-1)
clip2 = AVISource("video2.avi").KillAudio.BicubicResize(largeur,hauteur)
          .ChangeFPS(25).ConvertToYUY2().Trim(0,duree-1)
clip3 = DirectShowSource("video3.avi").KillAudio.BicubicResize(largeur*2,hauteur*2)
          .ChangeFPS(25).ConvertToYUY2().Trim(100,duree-1)
clip4 = AVISource("video4.avi").KillAudio.BicubicResize(largeur*3,hauteur*3)
          .ChangeFPS(25).ConvertToYUY2().Trim(0,duree-1)

# créer une séquence noire
vide = BlankClip(width=largeur,height=hauteur,fps=25,length=duree-1,
         color=$000000).ConvertToYUY2()

# empiler!
clip5 = StackHorizontal(vide.BicubicResize(largeur,hauteur*2), clip1, 
          vide.BicubicResize(largeur,hauteur*2), StackVertical(vide,clip2))
clip6 = StackHorizontal(StackVertical(clip3,
          vide.BicubicResize(largeur*2,hauteur)),clip4)
clip7 = StackVertical(clip5,clip6)

# redimensionner
clip8 = clip7.BicubicResize(largeur,hauteur)

# rajouter une bande son
audio = WAVSource("osc.wav")
# on ne peut pas utiliser Trim sur du son
# donc on crée une vidéo fantoche
clip9 = AudioDub(vide,audio).Trim(0,duree-1)

clip10 = AudioDub(clip8,clip9)

return clip10

Script avisynth à télécharger (changer l'extension par .avs) : mosaique avisynth
Le nouveau fichier vidéo est créé en utilisant ffmpeg, avec la commande suivante :
ffmpeg -i mosaique3.avs -b 360k -f flv video.flv

Et voila le résultat (par elle même, la vidéo n'a aucun intérêt! C'est juste un montage réalisé à partir de séquences qui trainent sur mon disque dur!)




      ajouter un titre et un générique à une video

Ce tutoriel décrit comment ajouter un titre sur les premières images d'une vidéo ainsi qu'un générique à la fin sans passer par un logiciel de montage, en utilisant les logiciels libres ffmpeg et avisynth. Il faut les installer au préalable (pour l'installation, voir les 2 billets : installation de ffmpeg et utiliser ffmpeg avec avisynth).


étape 1 : ajouter un titre sur les premières images de la vidéo

fichier avisynth (à enregistrer sous le nom "titres.avs")
# attention! en cas de copier-coller, il ne doit pas y avoir de retour à la ligne
# après "last_frame=45," dans les lignes suivantes

video_originale = AviSource("video.avi")
v1 = Subtitle(video_originale, "ffmpeg", x=160, y=75, first_frame=0, last_frame=45, 
   font="verdana", size=36, text_color=$000000, halo_color=$ffffff, align=2)
v2 = Subtitle(v1, "&", x=160, y=125, first_frame=0, last_frame=45, 
   font="verdana", size=36, text_color=$000000, halo_color=$ffffff, align=2)
v3 = Subtitle(v2, "avisynth", x=160, y=175, first_frame=0, last_frame=45, 
   font="verdana", size=36, text_color=$000000, halo_color=$ffffff, align=2)
v3

La vidéo utilisée pour l'exemple est à 15 images par seconde, et fait 320 x 240 pixels. En 3 étapes on ajoute les 3 lignes du titre, pour chacune la commande subtitle est accompagnée des paramètres suivants : le nom du clip sur lequel inscrire le texte, le texte à écrire, les coordonnées où « accrocher » le texte et l'alignement par rapport à ce point (align=2, pour du texte centré), les caractéristiques de la police (font, size, text_color et halo_color) ainsi que l'intervalle pendant lequel le texte sera affiché (première image : first_frame, et dernière : last_frame). Le texte restera affiché pendant 45 images ce qui correspond à 3 secondes à 15 images/secondes. La toute dernière ligne renvoie la vidéo résultant de ces opérations. La durée globale restant identique, il n'y a pas à se préoccuper du son.

étape 2 : ajouter un générique à la fin

Le générique est composé de 2 images qui restent chacune affichées pendant 2 secondes.
fichier avisynth (à enregistrer sous le nom "titres.avs")
# attention! en cas de copier-coller, il ne doit pas y avoir de retour à la ligne
# après "last_frame=45," dans les lignes suivantes

video_originale = AviSource("video.avi")
v1 = Subtitle(video_originale, "ffmpeg", x=160, y=75, first_frame=0, last_frame=45, 
   font="verdana", size=36, text_color=$000000, halo_color=$ffffff, align=2)
v2 = Subtitle(v1, "&", x=160, y=125, first_frame=0, last_frame=45, 
   font="verdana", size=36, text_color=$000000, halo_color=$ffffff, align=2)
v3 = Subtitle(v2, "avisynth", x=160, y=175, first_frame=0, last_frame=45, 
   font="verdana", size=36, text_color=$000000, halo_color=$ffffff, align=2)
v4 = blankclip(video_originale, length=30, color=$ff8800)
v5 = Subtitle(v4, "2007", font="verdana", size=48, text_color=$ffffff, 
   halo_color=$bb3300, align=5)
v6 = Subtitle(v4, "http://urzhiata.emoc.org", font="verdana", size=24, 
   text_color=$ffffff, halo_color=$bb3300, align=5)
video_resultat = v3 + v5 + v6
video_resultat

En supplément de l'étape précédente, un nouveau clip est créé par blankclip, avec les mêmes caractéristiques que la vidéo originale (premier paramètre), pour une durée de 30 images (2 secondes à 15 images/secondes) et avec une couleur de fond orangée ($ff8800). Il est utilisé 2 fois comme fond pour placer les textes du générique, puis la vidéo est construite à partir des 3 éléments. Si la vidéo est sonore, les parties ajoutées ne comporteront pas de son.

étape 3 : créer la vidéo avec ffmpeg

Cette commande ffmpeg va créer un fichier flash vidéo avec les caractéristiques par défaut, le fichier avisynth joue le rôle de vidéo de départ :
ffmpeg -i titres.avs -f flv titres.flv


variante : utiliser des images de la vidéo en images de fond

On peut utiliser une image de la vidéo en image fixe de fond pour le générique, dans le fichier avisynth ci-dessus il faudrait remplacer la ligne v4 par la suivante, ce qui aura pour effet de répéter 45 fois l'image 160 de la vidéo, en ramenant le son à 0.
v4 = Trim(video_originale,160,160).Loop(45,160,160).Normalize(0)



      ajouter un logo sur une vidéo

Ce tutoriel permet d'ajouter un logo sur une vidéo, sans passer par un logiciel de montage, en utilisant les logiciels libres ffmpeg et avisynth. Il faut donc les avoir installé au préalable (pour l'installation, voir les 2 billets : installation de ffmpeg et utiliser ffmpeg avec avisynth). Cette méthode est particulièrement adaptée au traitement par lot de fichiers, par un fichier batch, afin d'ajouter un logo à toutes les vidéos d'un répertoire.

étape 1 : créer le script avisynth

fichier avisynth (copier-coller dans le bloc-notes et enregistrer sous le nom "video.avs")
logo = ImageSource("logo.png")
video_originale = AviSource("video.avi")
video_resultat = overlay(video_originale,logo,250,170,logo,1)
video_resultat

L'image et la vidéo originale sont définies ligne 1 et 2 (la vidéo fait 320x240 pixels) puis elles sont mélangées pour créer la vidéo finale (ligne 3), le résultat est renvoyé ligne 4. C'est la commande overlay qui définit les paramètres pour la superposition du logo, dans l'ordre on trouve : le clip de base (vidéo_originale), l'image superposée (logo), le placement en X à partir du coin en haut à gauche, le placement en Y, l'image utilisée comme masque (ici il s'agit de la même image), puis l'opacité (de 0 à 1, 100% opaque dans ce cas)

urzhiata L'image d'origine du logo est au format png (60x60 pixels), elle sert également de masque, les pixels noirs sont alors interprétés comme totalement transparents, les blancs comme opaque et les gris seront à moitié transparents.




étape 2 : créer la vidéo avec ffmpeg

La ligne de commande suivante va créer une vidéo au format flash video à partir de la pseudo-vidéo avisynth, sans qu'une vidéo intermédiaire n'ait été nécessaire.
ffmpeg -i video.avs -f flv video.flv





variante : inscrire une ligne de texte sur la vidéo

La commande subtitle d'avisynth permet d'inscrire du texte sur une vidéo en utilisant les polices de caractères installées.
video_originale = AviSource("video.avi")
video_resultat = Subtitle(video_originale, "http://urzhiata.emoc.org", 
    font="verdana", size=18, text_color=$000000, halo_color=$ffffff, align=8)
video_resultat


Parmi les paramètres de subtitle, on trouve les caractéristiques de la police (taille, couleur, etc.) et align qui définit le placement du texte sur la vidéo, ici la valeur 8 indique que la vidéo est centrée en haut.



ajouter un logo sur un lot de vidéo

L'utilisation de ffmpeg + avisynth permet de traiter des vidéos par lot, on peut adapter ces scripts pour ajouter un logo sur tous les fichiers vidéo d'un répertoire en créant un fichier batch. Le batch ci-dessous ajoutera le logo sur toutes les vidéos d'un répertoire, pourvu qu'elles aient les mêmes dimensions, il pourrait être adapté en utilisant les fonctions d'avisynth qui détectent la résolution du fichier vidéo, et en adaptant la taille de l'image du logo.

fichier batch (à copier-coller dans le bloc-notes et enregistrer avec l'extension ".bat")
@ECHO OFF
FOR /F "usebackq delims==" %%y IN (`dir /b *.avi`) DO CALL :creer_fichier_avs %%~ny
FOR /F "usebackq delims==" %%y IN (`dir /b *.avs`) DO CALL :conversion_ffmpeg %%~ny
GOTO :fin

:creer_fichier_avs
ECHO creation du fichier avisynth pour %1.avi
ECHO logo = ImageSource("logo.png") > %1.avs
ECHO video_originale = AviSource("%1.avi") >> %1.avs
ECHO video_resultat = overlay(video_originale,logo,250,170,logo,1) >> %1.avs
ECHO video_resultat >> %1.avs
GOTO :eof

:conversion_ffmpeg
ECHO conversion de %1
ffmpeg -i %1.avs -f flv %1.flv
GOTO :eof

:fin
ECHO tous les fichiers ont ete traites...
Ce fichier batch procède en deux étapes : création d'un fichier avisynth pour chaque vidéo avi du répertoire, puis traitement de chaque fichier avisynth avec ffmpeg pour le transformer en flash video (flv). Chacune de ces étapes est réalisée par une sous-routine. Il faut placer ce fichier dans le répertoire avec les fichiers vidéos avi et le logo (logo.png) puis double cliquer, toutes les vidéos seront transformées en flv avec le logo incrusté!


      utiliser ffmpeg avec avisynth

Avisynth est un logiciel d'édition vidéo sous forme de scripts, il offre de nombreuses possibilités que ce soit pour l'amélioration des images, l'assemblage audio + vidéo, la superposition (sous-titres, logos), la composition, etc.
Les fichiers avisynth sont des scripts au format texte (avec l'extension ".avs"), des « pseudo-vidéos » qui peuvent être ouvertes avec un lecteur traditionnel (media player classic, VLC, Virtual Dub) mais également utilisés en entrée de ffmpeg, la version windows de ce dernier étant compilée avec le support avisynth.

En utilisant ffmpeg et avisynth, on peut donc simplement faire des montages dans un fichier texte et produire un fichier vidéo dans un des nombreux formats de sortie de ffmpeg. Ces deux outils fonctionnant en ligne de commande on peut également les utiliser pour des traitements par lot automatiques (ex : ajouter un logo à toutes les vidéos d'un répertoire)

Quelques utilisations de ces outils en détail :

- ajouter un logo sur une vidéo
- ajouter un titre et un générique à une vidéo
- créer une mosaïque de vidéos avec avisynth
- créer un diaporama en vidéo (prochainement)
- ajouter un sous-titre à une vidéo (prochainement)

Au préalable, il faut télécharger et installer avisynth : télécharger la version 2.5.7 d'avisynth et avoir installé ffmpeg (voir installation et utilisation de ffmpeg)

Liens :

Site officiel (en français) : avisynth
Forum avisynth en français (sur unite-video.com) : forum avisynth
Un autre forum en français (sur ripp-it.com) : forum filtres avisynth
Forum en anglais (sur doom9) : avisynth usage forum



      comment installer ffmpeg avec windows XP

ffmpeg est un utilitaire pour la transformation des fichiers audio-video utilisable en ligne de commande. Bien qu'avec windows, on soit plutôt habitué à utiliser des logiciels à travers des interfaces graphiques, ffmpeg dispose d'un éventail de possibilités très intéressantes, rapides à mettre en oeuvre, et utilisables dans des fichiers batch pour des traitements pars lot. Il est disponible en open-source (donc gratuit) et évolue régulièrement. Comment s'y prendre pour l'installer et l'utiliser?

Télécharger une version de ffmpeg
Les versions récentes de ffmpeg, précompilées pour Windows sont téléchargeables sur ce site : ffmpeg pour windows. Il faut récupérer la plus récente, c'est un fichier compressé au format 7z, format ouvert que l'on peut décompresser en utilisant 7zip, logiciel open-source qui compresse et décompresse également de nombreux autres formats.

Décompresser le fichier de ffmpeg
Une fois décompressé, 3 fichiers sont extraits, à copier dans le répertoire C:/Windows/System32/ pour qu'ils puissent être utilisables depuis n'importe quel dossier :
ffmpeg.exe est le programme principal qui permet de passer les vidéos d'un format à un autre, d'extraire du son, des images fixes, etc. (voir des exemples dans la rubrique pratique)
ffplay.exe est un lecteur simple pour afficher des vidéos
pthreadGC2.dll est une librairie de fonctions utilisées pour faire fonctionner l'ensemble (cf dll sur wikipedia)

Utiliser la ligne de commande
Pour utiliser ffmpeg, il faut d'abord ouvrir une invite de commande, ce qui peut se faire de différentes manières : soit à partir de "démarrer", puis "programme/accessoires/invite de commande"

soit "démarrer/exécuter"
ouvrir une invite de commande, phase 1

puis entrer "cmd" dans la fenêtre qui s'ouvre
ouvrir une invite de commande, phase 2

Pour un usage régulier et bien plus pratique de la ligne de commande, on peut installer l'utilitaire cmdhere.exe téléchargeable parmi les powertoys du site de microsoft. Une fois installé, l'option open command window here est ajouté au menu contextuel des dossiers, ce qui évite d'avoir à se déplacer dans les dossiers. Un autre truc bien pratique : on peut rappeler les dernières commandes tapées, en utilisant la "fléche haut", ce qui évite de retaper les mêmes lignes ou presque en faisant des essais et même faire un copier-coller avec le bouton droit de la souris (ctrl-v ne marchera pas).

Obtenir l'aide et la documentation

Les différentes commandes de ffmpeg sont décrites dans une aide intégrée. Pour l'afficher, on utilise la commande suivante : ffmpeg -h
Les différents codecs et formats de fichiers sont affichables avec : ffmpeg -formats
Il est possible de réunir les deux dans un fichier texte pour avoir une documentation imprimable, en entrant ffmpeg -h > doc.txt puis ffmpeg -formats >> doc.txt (les deux chevrons indiquant que le résultat sera mis à la suite du fichier créé précédemment)

Maintenant vous avez tous éléments pour utiliser ffmpeg!

Dans la rubrique « pratique » de ce site, quelques exemples d'utilisation de ffmpeg :
extraire le son d'un fichier vidéo
transformer une vidéo flv en avi
extraire des images d'une vidéo toutes les X secondes
etc.




Si cet article vous a été utile, aidez à le faire connaître en deux clics : en lui ajoutant une "mark" sur tutmarks (en cliquant sur le chiffre dans le rond bleu!)


      créer une vidéo à partir d'images

Comment réunir une série d'images sous forme de vidéo? ffmpeg permet simplement, à partir d'une suite de fichiers images numérotés, de créer une séquence vidéo dans de nombreux formats. Voila la ligne de commande à utiliser :

pour fabriquer une vidéo au format flash FLV :

ffmpeg -r 25 -an -b 360k -i image-%04d.png -s 360x288 -f flv video.flv

-r 25 : définir le taux à 25 images/secondes
-an : desactiver l'audio
-b 360k : débit pour le flux vidéo, ici 360 kbits/secondes, à définir selon la taille du fichier que l'on souhaite
-i image-%04d.png : "modèle" pour les noms des fichiers image
-s 360x288 : définir les dimensions de la vidéo à obtenir
-f flv : fixer le format de sortie, ici flash vidéo FLV video.flv : nom du fichier vidéo à créer

Avec cette commande, les fichiers images doivent respecter un format bien précis et s'appeler image-0001.png, image-0002.png, etc. C'est ce qui est signifié par "%04d", bien sur on peut l'adapter (par exemple : %02d pour des fichiers de la forme image-02.png). La numérotation des fichiers image doit commencer à un et il ne peut pas y avoir de "trous". Parmi les formats d'image pris en charge par ffmpeg : jpg, tif, bmp, png, etc.

L'inverse est également possible : transformer une vidéo en série d'images



variante : modifier la durée d'affichage des images

Avec la commande précédente, chaque image est affichée pendant 1/25e de secondes. Pour modifier cette durée, il faut changer le nombre d'images par seconde de la vidéo source. Pour que chaque image reste visible une seconde, tout en conservant un taux de 25 images/seconde dans la vidéo finale on peut utiliser la commande suivante :

ffmpeg -r 1 -i image-%04d.png -an -b 360k -s 360x288 -r 25 -f flv video.flv

Pour qu'une image reste affichée 4 secondes, on utiliserait "-r 0.25", à l'inverse pour qu'une image reste un quart de seconde, il faudrait utiliser "-r 4". Cette modification concerne toutes les images de la vidéo, pour fixer séparément la durée d'affichage de chaque image, il faut utiliser ffmpeg avec avisynth



Comment renommer les fichiers par lot pour que leur nom ait le format souhaité (image_0001.jpg, image_0002.jpg) ?

Ant Renamer est un logiciel libre avec de nombreuses fonctions de renommage, en utilisant "énumération" on peut choisir le préfixe du fichier, le nombre de chiffres. Il dispose également de nombreuses autres fonctions de renommage!


      encodage mp3 par lot

Comment encoder des centaines de fichiers audio de la manière la plus rapide et simple possible : en préparant un script de traitement par lot! Une fois le script prêt il suffit de le placer dans le répertoire contenant les fichiers sons et de double-cliquer! (Le modèle de script, pour windows, est téléchargeable ci-dessous).

Le logiciel nécessaire est Lame, un encodeur audio capable de transformer un fichier wav en mp3, décoder un mp3 en wav, mais également réencoder de mp3 vers mp3.

Lire la suite


      lire une vidéo à l'envers

Pour faire défiler une vidéo ".avi" (son + image) à l'envers, c'est avisynth qui offre la solution la plus simple : en créant un fichier texte de deux lignes. Le son et l'image sont inversés sans créer de nouveau fichier. Avisynth s'intercale entre la vidéo originale et le lecteur, et "filtre" le fichier original. Pour voir la vidéo, on ouvre le fichier ainsi créé dans son player habituel, pour moi cela a très bien fonctionné avec Media Player Classic, mais pas avec VLC. Pour créer un fichier ".avi" réel de la vidéo inversé, on peut utiliser la vidéo virtuelle d'avisynth dans virtualdub et sauver en ".avi".

Voila ce que doit contenir le fichier texte (video_a_l_envers.avs)

AVISource("C:\VIDEO\fichier_video.avi")
Reverse


Avisynth est capable de beaucoup plus (filtrage des images, redimensionnement, ajout de sous-titres, conversion de formats, nettoyage de l'image, etc.)
Télécharger les logiciels : avisynth, media player classic, virtualdub (les 3 sont des logiciels libres)