ajouter un logo sur une vidéo
29/01/08 à 18:17 pratique
é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)
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é!



Commentaires
Hello , j'ai essayé de faire ce tuto mais ça me pose un probleme lorsque j'essay d'afficher le resultat
Surement un probleme avec ImageSource...
le message d'erreur :
Script error :There is no function named "ImageSource" --> ligne 1
D'où cela peut'il venir ?
Hello, deux pistes pour ton problème : quelle version d'avisynth utilises tu ? ImageSource est inclus depuis la version 2.55 ; sinon aurais tu une version plus ancienne (il faudrait alors la désinstaller)
Merci emoc c'était bien ça, ma version de Avisynth était trop vieille ;)
Encore merci pour ce tuto vraiment sympa ! bonne continuation
lol encore une question, le premier script fonctionne bien , par contre j'ai essayé le batch et quand je le lance rien ne se passe ? ...
Je suis encore plsu que novice dans tout ça désolé de te déranger
Hello Nutty, ton fichier a t'il l'extension ".bat" ? si, jusque là tu lançais le fichier batch en double-cliquant dessus, tu peux essayer en ouvrant une fenêtre de commande dans le répertoire ou sont tes vidéos / logo et batch, et là tu fais "batch.bat" en supposant que ce soit le nom de ton fichier batch, ce qui va lancer le batch, tu verras alors les commandes du batch se réaliser une par une, et avoir une idée de ce qui ne marche pas. Voila en espérant que ça t'aide, sinon n'hésites pas à reposer des questions.
merci j'ai fait ce que tu m'a dit , et il semblerait que l'erreur soit sur mon chemin d'acces au dossier qui contient tout :
"mon_chemin" was unexpected at this time.
j'ai rien dit ^^ j'ai trouvé mon erreur, en fait j'avais pas compris le FOR /F ^^ now sa marche trés bien !
Désolé pour le flood
salut, je tente avec plusieurs formats et ca ne marche jamais :( avec les wmv il me dit il me peut pas trouver le fichier, si c est un avi histoire de codec...
avec ffmpeg en direct ca marche
alors je viens de titler, avisynth ne prendrai que des AVI en entrée ? :D
et sinon les 2-3 videos avi que j ai testé il arrive pas a initialiser l audio donc ca veut pas continuer
en effet apres un peu de recherche tout passe avec DirectShowSource() et non AVISource(), je n'ai plus qu'a trouver comment conserver le ratio des videos et de mettre toutes a la meme dimension pour eviter d avoir une video sur 2 ou le logo est pas a sa place :D
@ frem : avisynth permet de connaitre les propriétés d'une vidéo (avec Width(clip) et Height(clip)), tu peux donc faire le calcul du ratio et des nouvelles dimensions dans le script et adapter l'emplacement (et la taille !) du logo en conséquence
Peut-on encoder directement à partir d'un FLV pour réencoder ensuite en flv, je n'ai rien trouvé la dessus, merci.
@joee : oui, c'est possible il faut utiliser "DirectShowSource" avec avisynth, en ayant au préalable installé ffdshow et flv splitter, pour pouvoir décoder le flv en local
Ajouter un commentaire