EmojiVidGen est un outil amusant qui crée des vidéos à partir de fichiers texte. Il prend la forme de fichiers texte brut contenant un script (semblable à une histoire ou un dialogue). Il transforme ensuite ce script en une superbe vidéo. EmojiVidGen est basé sur un système de plugins, qui permet d'expérimenter différents modèles et langages. Tout ce dont vous avez besoin c'est d'un peu d'imagination et de compétences en dactylographie !
Principales fonctionnalités
Bien qu'initialement destiné au divertissement avec GenAI, EmojiVidGen
possède un potentiel important pour produire du contenu attrayant et sympa, en particulier entre des mains compétentes. Ce projet est expérimental et principalement conçu à des fins éducatives, explorant les possibilités de création vidéo basée sur l'IA.
Ce logiciel est destiné uniquement à des fins éducatives. Il est utilisé à votre propre discrétion et à vos propres risques. Veuillez noter que les modèles d'IA utilisés dans ce code peuvent avoir des restrictions contre une utilisation commerciale.
sudo apt update
sudo apt install espeak ffmpeg
git clone https://github.com/code2k13/emoji_vid_gen
cd emoji_vid_gen
wget https://github.com/googlefonts/noto-emoji/raw/main/fonts/NotoColorEmoji.ttf
pip install -r requirements.txt
Remarque : Un script doit toujours commencer par une directive
Image:
Image: Cartoon illustration showing a beautiful landscape with mountains and a road.
Audio: Tranquil calm music occasional chirping of birds.
Title: EmojiVidGen
?: Emoji vid gen is a tool to create videos from text files using AI.
python generate_video.py stories/hello.txt hello.mp4
Image: A single trophy kept on table. comic book style.
Audio: Upbeat introduction music for cartoon show.
Title: Emoji Quiz Showdown
?: " Welcome to the Emoji Quiz Showdown! Are you ready to test your knowledge? "
?: " Meow! I'm ready! "
?: " Woof! Let's do this! "
Image: Cartoon illustration of the Eiffel Tower.
?: " First question What is the capital of France? "
Audio: suspenseful music playing.
?: " Paris! "
Audio: people applauding sound
Image: Cartoon illustration of Mount Everest.
?: " Correct! One point for the cat! Next question What is the tallest mountain in the world? "
Audio: suspenseful music playing.
?: " Mount Everest! "
Audio: people applauding sound
Image: Cartoon illustration of a water molecule.
?: " Right again! One point for the dog! Next question What is the chemical symbol for water? "
Audio: suspenseful music playing.
?: " H2O! "
Audio: people applauding sound
Image: Cartoon illustration of a globe with seven continents.
?: " Correct! Another point for the cat! Last question How many continents are there on Earth? "
Audio: suspenseful music playing.
?: " Seven! "
Audio: people applauding sound
?: " Correct! It's a tie! You both did great! Thanks for playing the Emoji Quiz Showdown! "
L'emoji ?️
est réservé comme narrateur. Son utilisation en début de ligne fera que le système générera uniquement du son et ne produira aucune image en arrière-plan.
Si vous avez suivi les instructions précédentes pour la génération vidéo, vous avez peut-être remarqué que la configuration par défaut utilise espeak
comme moteur de synthèse vocale, ce qui donne une sortie au son robotique. EmojiVidGen est construit avec une structure interne composée de plugins, chacun capable de modifier la façon dont une tâche est exécutée ou le modèle utilisé.
Par exemple, vous pouvez désigner un plugin spécifique pour chaque type de tâche de génération, qu'il s'agisse de texte en image, de texte en audio ou de synthèse vocale. Étant donné que chaque plugin fonctionne selon son modèle et sa méthode uniques, la configuration de ces paramètres individuellement peut s'avérer fastidieuse. Pour simplifier ce processus, j'ai introduit le concept de préréglages. Vous pouvez appliquer un préréglage en fournissant l'option --preset
au fichier generate_video.py
.
Par exemple, le préréglage ci-dessous utilise un préréglage appelé local_medium
.
python generate_video.py stories/hello.txt hello.mp4 --preset local_medium
Tous les préréglages sont stockés dans ./presets folder
. Pour créer un nouveau préréglage (par exemple custom_preset
), créez simplement un nouveau fichier custom_preset.yaml
dans le dossier `./presets' et commencez à l'utiliser comme ceci
python generate_video.py stories/hello.txt hello.mp4 --preset custom_preset
Notez que les voice
utilisées dans la section characters
doivent être prises en charge par le fournisseur text_to_speech
sélectionné. Les images doivent idéalement être des fichiers PNG avec un format carré et un arrière-plan transparent.
Nom du préréglage | Description |
---|---|
openai_basic | Utilise OpenAI pour la synthèse vocale (standard) et la génération d'images (DALL-E 2 @ 512x512). Nécessite que la variable d'environnement OPENAI_API_KEY soit renseignée |
openai_medium | Similaire à openai_basic mais utilise (DALL-E 3 @ 1024x1024). Nécessite que la variable d'environnement OPENAI_API_KEY soit renseignée |
local_basic | Utilise le pipeline de diffusion stable de Huggingface avec le modèle stabilityai/sd-turbo pour le texte en image. Utilise espeak pour la synthèse vocale et le pipeline AudioLDM de Huggingface pour la synthèse vocale. |
local_basic_gpu | Identique à local_basic, mais avec la prise en charge de cuda activée. |
local_medium | Similaire à local_basic mais utilise brave comme moteur de synthèse vocale et modèle stabilityai/sdxl-turbo pour la synthèse texte-image |
local_medium | Identique à local_medium, mais avec la prise en charge de cuda est activée. |
onze_moyen | Identique à local_medium, mais utilise la prise en charge de l'API de synthèse vocale ElevenLabs . Nécessite Internet et la variable ELEVEN_API_KEY à définir dans le fichier .env . Nécessite Internet et un compte ElevenLabs. |
parler_medium | Identique à local_medium, mais utilise la prise en charge de l'API parler text to Speech est activée. |
Parfois, vous ne souhaiterez peut-être pas utiliser d'émojis comme personnages dans votre vidéo ou utiliser une voix différente pour chaque personnage. Ceci peut désormais être réalisé en utilisant la section characters
dans les fichiers yaml prédéfinis. Vous trouverez ci-dessous un exemple de ce à quoi pourrait ressembler une telle section :
global :
width : 512
height : 512
use_cuda : " false "
characters :
- name : " ? "
voice : " fable "
- name : " ? "
image : " /workspace/emoji_vid_gen/cat.png "
voice : " alloy "
- name : " ? "
image : " /workspace/emoji_vid_gen/dog.png "
voice : " echo "
text_to_speech :
provider : openai
voice : Nova
En-cours
EmojiVidGen utilise un mécanisme de cache pour conserver les ressources produites lors de la création vidéo, chacune associée à l'« invite » spécifique utilisée. Cette fonctionnalité s'avère très bénéfique, en particulier lors du raffinement itératif des vidéos, éliminant ainsi le besoin de régénérer les ressources de manière répétitive. Cependant, sachez que le répertoire .cache
n'est pas automatiquement effacé. Il est conseillé de l'effacer après avoir terminé un projet vidéo et en avoir commencé un autre.
Astuce : Pour forcer la recréation des éléments mis en cache, apportez des modifications mineures à « l'invite », comme l'ajout d'un espace ou d'un signe de ponctuation.
Assurez-vous que les fichiers d'actifs sont présents dans le dossier .cache
. Créez le script de cette manière
Image: .cache/existing_background_hd.png
Audio: Funny opening music jingle.
Title: EmojiVidGen
?: .cache/existing_speech.wav
Copiez un fichier de préréglage approprié et modifiez les lignes suivantes :
global :
width : 1152
height : 896
Remarque : Ce paramètre affecte la sortie de diffusion stable. Toutes les résolutions ne fonctionnent pas aussi bien. Pour plus d'informations, consultez ce https://replicate.com/guides/stable-diffusion/how-to-use/ . La diffusion stable semble bien fonctionner avec des proportions carrées.
Vous verrez ce message d’erreur lors de l’utilisation du fournisseur de synthèse vocale espeak
.
Traceback (most recent call last):
File " /usr/local/lib/python3.10/dist-packages/pyttsx3/drivers/espeak.py " , line 171, in _onSynth
self._proxy.notify( ' finished-utterance ' , completed=True)
ReferenceError: weakly-referenced object no longer exists
Ignorez cette erreur pour l'instant car elle n'affecte pas la sortie.
Si vous recevez l'erreur ci-dessous, supprimez le répertoire .cache
File " plyvel/_plyvel.pyx " , line 247, in plyvel._plyvel.DB.__init__
File " plyvel/_plyvel.pyx " , line 88, in plyvel._plyvel.raise_for_status
plyvel._plyvel.IOError: b ' IO error: lock .cache/asset/LOCK: Resource temporarily unavailable '
@misc{lacombe-etal-2024-parler-tts,
author = {Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi},
title = {Parler-TTS},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/huggingface/parler-tts}}
}
@misc{lyth2024natural,
title={Natural language guidance of high-fidelity text-to-speech with synthetic annotations},
author={Dan Lyth and Simon King},
year={2024},
eprint={2402.01912},
archivePrefix={arXiv},
primaryClass={cs.SD}
}