EmojiVidGen es una herramienta divertida que crea videos a partir de archivos de texto. Requiere información en forma de archivos de texto sin formato que contienen un guión (similar a una historia o un diálogo). Luego transforma este guión en un vídeo impresionante. EmojiVidGen se basa en un sistema de complementos que permite experimentar con diferentes modelos e idiomas. ¡Todo lo que necesitas es algo de imaginación y habilidades de mecanografía!
Características clave
Si bien inicialmente estaba destinado al entretenimiento con GenAI, EmojiVidGen
tiene un potencial significativo para producir contenido atractivo y atractivo, especialmente en manos capaces. Este proyecto es experimental y está diseñado principalmente con fines educativos, explorando las posibilidades de la creación de videos con tecnología de inteligencia artificial.
Este software está destinado únicamente a fines educativos. Se utiliza bajo su propia discreción y riesgo. Tenga en cuenta que los modelos de IA utilizados en este código pueden tener restricciones contra el uso comercial.
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
Nota: Un script siempre debe comenzar con una directiva
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! "
El emoji ?️
está reservado como narrador. Usarlo al inicio de la línea hará que el sistema solo genere sonido y no genere ninguna imagen de fondo.
Si ha seguido las instrucciones anteriores para la generación de vídeo, habrá notado que la configuración predeterminada utiliza espeak
como motor de conversión de texto a voz, lo que da como resultado una salida con sonido robótico. EmojiVidGen está construido con una estructura interna que consta de complementos, cada uno de los cuales es capaz de modificar cómo se ejecuta una tarea o qué modelo se utiliza.
Por ejemplo, puede designar un complemento específico para cada tipo de tarea de generación, ya sea texto a imagen, texto a audio o texto a voz. Debido a que cada complemento funciona con su modelo y método únicos, configurar estos ajustes individualmente puede resultar abrumador. Para simplificar este proceso, he introducido el concepto de ajustes preestablecidos. Puede aplicar un ajuste preestablecido proporcionando la opción --preset
al archivo generate_video.py
.
Por ejemplo, el siguiente ajuste preestablecido utiliza un ajuste preestablecido llamado local_medium
.
python generate_video.py stories/hello.txt hello.mp4 --preset local_medium
Todos los ajustes preestablecidos se almacenan en ./presets folder
. Para crear un nuevo ajuste preestablecido (por ejemplo, custom_preset
), simplemente cree un nuevo archivo custom_preset.yaml
en la carpeta `./presets' y comience a usarlo así
python generate_video.py stories/hello.txt hello.mp4 --preset custom_preset
Tenga en cuenta que las voice
utilizadas en la sección characters
deben ser compatibles con el proveedor text_to_speech
seleccionado. Lo ideal es que las imágenes sean archivos PNG con una relación de aspecto cuadrado y un fondo transparente.
Nombre preestablecido | Descripción |
---|---|
openai_basic | Utiliza OpenAI para texto a voz (estándar) y generación de imágenes (DALL-E 2 @ 512x512). Necesita que se complete la variable de entorno OPENAI_API_KEY |
openai_medium | Similar a openai_basic pero usa (DALL-E 3 @ 1024x1024). Necesita que se complete la variable de entorno OPENAI_API_KEY |
local_basico | Utiliza el canal de difusión estable de Huggingface con modelo de stabilityai/sd-turbo para texto a imagen. Utiliza espeak para texto a voz y el canal AudioLDM de Huggingface para texto a audio. |
local_basic_gpu | Igual que local_basic, pero con soporte cuda habilitado. |
medio_local | Similar a local_basic pero utiliza brave como motor de texto a voz y modelo de stabilityai/sdxl-turbo para texto a imagen |
medio_local | Igual que local_medium, pero con la compatibilidad con cuda habilitada. |
once_medio | Igual que local_medium, pero utiliza la API de texto a voz ElevenLabs . La compatibilidad con API está habilitada. Necesita Internet y la variable ELEVEN_API_KEY para definirse en el archivo .env . Necesita internet y cuenta de ElevenLabs. |
parler_medium | Igual que local_medium, pero utiliza la API de texto a voz parler y la compatibilidad con API está habilitada. |
A veces es posible que no quieras usar emojis como personajes en tu video o usar una voz diferente para cada personaje. Esto ahora se puede lograr usando la sección characters
en archivos yaml preestablecidos. A continuación se muestra un ejemplo de cómo podría verse dicha sección:
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
WIP
EmojiVidGen utiliza un mecanismo de caché para retener los activos producidos durante la creación del video, cada uno asociado con el "mensaje" específico utilizado. Esta característica resulta muy beneficiosa, especialmente cuando se refinan videos de forma iterativa, eliminando la necesidad de regenerar recursos repetidamente. Sin embargo, tenga en cuenta que el directorio .cache
no se borra automáticamente. Es recomendable borrarlo al finalizar un proyecto de vídeo y comenzar otro.
Consejo: Para forzar la recreación de recursos almacenados en caché, realice modificaciones menores en el 'mensaje', como agregar un espacio o puntuación.
Asegúrese de que los archivos de activos estén presentes en la carpeta .cache
. Crea el script de esta manera.
Image: .cache/existing_background_hd.png
Audio: Funny opening music jingle.
Title: EmojiVidGen
?: .cache/existing_speech.wav
Copie un archivo preestablecido adecuado y modifique las siguientes líneas:
global :
width : 1152
height : 896
Nota: Esta configuración afecta la salida de difusión estable. No todas las resoluciones funcionan tan bien. Para obtener más información, consulte este https://replicate.com/guides/stable-diffusion/how-to-use/. La difusión estable parece funcionar bien con relaciones de aspecto cuadradas.
Verá este mensaje de error cuando utilice el proveedor de texto a voz 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
Ignore este error por ahora ya que no afecta la salida.
Si recibe el siguiente error, elimine el directorio .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}
}