EmojiVidGen ist ein unterhaltsames Tool, das Videos aus Textdateien erstellt. Die Eingabe erfolgt in Form von einfachen Textdateien, die ein Skript enthalten (ähnlich einer Geschichte oder einem Dialog). Anschließend wird dieses Skript in ein atemberaubendes Video umgewandelt. EmojiVidGen basiert auf einem Plugin-System, das das Experimentieren mit verschiedenen Modellen und Sprachen ermöglicht. Alles, was Sie brauchen, ist etwas Fantasie und Schreibfähigkeiten!
Hauptmerkmale
Obwohl EmojiVidGen
ursprünglich für die Unterhaltung mit GenAI gedacht war, birgt es ein erhebliches Potenzial für die Produktion ansprechender und cooler Inhalte, insbesondere in kompetenten Händen. Dieses Projekt ist experimentell und in erster Linie für Bildungszwecke konzipiert, um die Möglichkeiten der KI-gestützten Videoerstellung zu erkunden.
Diese Software ist ausschließlich für Bildungszwecke bestimmt. Die Nutzung erfolgt nach eigenem Ermessen und auf eigenes Risiko. Bitte beachten Sie, dass die in diesem Code verwendeten KI-Modelle möglicherweise Einschränkungen hinsichtlich der kommerziellen Nutzung haben.
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
Hinweis: Ein Skript sollte immer mit einer
Image:
-Direktive beginnen
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! "
Das Emoji ?️
ist als Erzähler reserviert. Wenn Sie es am Zeilenanfang verwenden, erzeugt das System nur Ton und gibt kein Bild im Hintergrund aus.
Wenn Sie die vorherigen Anweisungen zur Videogenerierung befolgt haben, ist Ihnen möglicherweise aufgefallen, dass die Standardeinstellung espeak
als Text-zu-Sprache-Engine verwendet, was zu einer roboterhaft klingenden Ausgabe führt. EmojiVidGen ist mit einer internen Struktur aufgebaut, die aus Plugins besteht, die jeweils die Art und Weise ändern können, wie eine Aufgabe ausgeführt wird oder welches Modell verwendet wird.
Sie können beispielsweise für jede Art von Generierungsaufgabe ein bestimmtes Plugin festlegen – sei es Text-zu-Bild, Text-zu-Audio oder Text-zu-Sprache. Da jedes Plugin mit seinem eigenen Modell und seiner eigenen Methode arbeitet, kann die individuelle Konfiguration dieser Einstellungen überwältigend sein. Um diesen Prozess zu vereinfachen, habe ich das Konzept der Voreinstellungen eingeführt. Sie können eine Voreinstellung anwenden, indem Sie die Option --preset
für die Datei generate_video.py
angeben.
Die folgende Voreinstellung verwendet beispielsweise eine Voreinstellung namens local_medium
.
python generate_video.py stories/hello.txt hello.mp4 --preset local_medium
Alle Voreinstellungen werden im ./presets folder
gespeichert. Um eine neue Voreinstellung zu erstellen (z. B. custom_preset
), erstellen Sie einfach eine neue Datei custom_preset.yaml
im Ordner „./presets“ und verwenden Sie sie wie folgt
python generate_video.py stories/hello.txt hello.mp4 --preset custom_preset
Beachten Sie, dass die im Abschnitt characters
verwendeten voice
vom ausgewählten text_to_speech
Anbieter unterstützt werden sollten. Bilder sollten idealerweise PNG-Dateien mit quadratischem Seitenverhältnis und transparentem Hintergrund sein.
Name der Voreinstellung | Beschreibung |
---|---|
openai_basic | Verwendet OpenAI für Text-to-Speech (Standard) und Bildgenerierung (DALL-E 2 @ 512x512). Die Umgebungsvariable OPENAI_API_KEY muss ausgefüllt werden |
openai_medium | Ähnlich wie openai_basic, verwendet jedoch (DALL-E 3 bei 1024 x 1024). Die Umgebungsvariable OPENAI_API_KEY muss ausgefüllt werden |
local_basic | Verwendet die Stable Diffusion-Pipeline von Huggingface mit stabilityai/sd-turbo Modell für Text-zu-Bild. Verwendet espeak für Text-to-Speech und die AudioLDM-Pipeline von Huggingface für Text-to-Audio. |
local_basic_gpu | Wie local_basic, jedoch mit aktivierter Cuda-Unterstützung. |
local_medium | Ähnlich wie local_basic, verwendet jedoch brave als Text-to-Speech-Engine und stabilityai/sdxl-turbo Modell für Text-to-Image |
local_medium | Wie local_medium, jedoch mit aktivierter Cuda-Unterstützung. |
elf_medium | Identisch mit local_medium, nutzt jedoch die Text-to-Speech-API-Unterstützung ElevenLabs . Erfordert die Definition des Internets und der Variablen ELEVEN_API_KEY in .env Datei. Benötigt Internet und ElevenLabs-Konto. |
parler_medium | Identisch mit local_medium, verwendet jedoch die Unterstützung parler Text-to-Speech-API. |
Manchmal möchten Sie möglicherweise keine Emojis als Charaktere in Ihrem Video verwenden oder für jeden Charakter eine andere Stimme verwenden. Dies kann jetzt über den Abschnitt characters
in voreingestellten Yaml-Dateien erreicht werden. Nachfolgend finden Sie ein Beispiel dafür, wie ein solcher Abschnitt aussehen könnte:
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
In Bearbeitung
EmojiVidGen nutzt einen Cache-Mechanismus, um während der Videoerstellung erstellte Assets zu speichern, die jeweils mit der spezifischen verwendeten „Eingabeaufforderung“ verknüpft sind. Diese Funktion erweist sich insbesondere bei der iterativen Verfeinerung von Videos als äußerst nützlich, da sie die wiederholte Neugenerierung von Assets überflüssig macht. Bitte beachten Sie jedoch, dass das .cache
-Verzeichnis nicht automatisch geleert wird. Es empfiehlt sich, es zu löschen, wenn Sie ein Videoprojekt abschließen und mit einem anderen beginnen.
Tipp: Um die Neuerstellung zwischengespeicherter Assets zu erzwingen, nehmen Sie geringfügige Änderungen an der „Eingabeaufforderung“ vor, z. B. das Hinzufügen eines Leerzeichens oder eines Satzzeichens
Stellen Sie sicher, dass Asset-Dateien im .cache
Ordner vorhanden sind. Erstellen Sie das Skript auf diese Weise
Image: .cache/existing_background_hd.png
Audio: Funny opening music jingle.
Title: EmojiVidGen
?: .cache/existing_speech.wav
Kopieren Sie eine geeignete Voreinstellungsdatei und ändern Sie die folgenden Zeilen:
global :
width : 1152
height : 896
Hinweis: Diese Einstellung wirkt sich auf die Ausgabe einer stabilen Diffusion aus. Nicht alle Auflösungen funktionieren so gut. Weitere Informationen finden Sie unter https://replicate.com/guides/stable-diffusion/how-to-use/. „Stabile Diffusion“ scheint bei quadratischen Seitenverhältnissen gut zu funktionieren.
Diese Fehlermeldung wird Ihnen angezeigt, wenn Sie den Text-to-Speech-Anbieter espeak
verwenden.
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
Ignorieren Sie diesen Fehler vorerst, da er sich nicht auf die Ausgabe auswirkt.
Wenn Sie die folgende Fehlermeldung erhalten, löschen Sie das .cache
-Verzeichnis
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}
}