EmojiVidGen — забавный инструмент, который создает видео из текстовых файлов. Он принимает входные данные в виде простых текстовых файлов, содержащих сценарий (похожий на историю или диалог). Затем он преобразует этот сценарий в потрясающее видео. EmojiVidGen основан на системе плагинов, которая позволяет экспериментировать с различными моделями и языками. Все, что вам нужно, это немного воображения и навыков набора текста!
Ключевые особенности
Первоначально EmojiVidGen
предназначался для развлечения с помощью GenAI, но обладает значительным потенциалом для создания увлекательного и классного контента, особенно в умелых руках. Этот проект является экспериментальным и в первую очередь создан в образовательных целях, изучая возможности создания видео с помощью искусственного интеллекта.
Данное программное обеспечение предназначено исключительно для образовательных целей. Используется на ваше усмотрение и риск. Имейте в виду, что модели искусственного интеллекта, используемые в этом коде, могут иметь ограничения на коммерческое использование.
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
Примечание. Сценарий всегда должен начинаться с директивы
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! "
Эмодзи ?️
зарезервирован как рассказчик. Использование его в начале строки приведет к тому, что система будет генерировать только звук и не выводить изображение на заднем плане.
Если вы следовали предыдущим инструкциям по созданию видео, вы могли заметить, что в настройках по умолчанию в качестве механизма преобразования текста в речь используется espeak
, что приводит к выводу, звучащему как робот. EmojiVidGen имеет внутреннюю структуру, состоящую из плагинов, каждый из которых способен изменять способ выполнения задачи или используемую модель.
Например, вы можете назначить отдельный плагин для каждого типа задач генерации — будь то преобразование текста в изображение, преобразование текста в аудио или преобразование текста в речь. Поскольку каждый плагин работает со своей уникальной моделью и методом, индивидуальная настройка этих параметров может оказаться сложной задачей. Чтобы упростить этот процесс, я ввел концепцию пресетов. Вы можете применить предустановку, указав опцию --preset
в generate_video.py
.
Например, в приведенном ниже пресете используется пресет под названием local_medium
.
python generate_video.py stories/hello.txt hello.mp4 --preset local_medium
Все пресеты хранятся в ./presets folder
. Чтобы создать новый пресет (скажем, custom_preset
), просто создайте новый файл custom_preset.yaml
в папке ./presets и начните использовать его следующим образом.
python generate_video.py stories/hello.txt hello.mp4 --preset custom_preset
Обратите внимание, что voice
, используемые в разделе characters
, должны поддерживаться выбранным поставщиком text_to_speech
. В идеале изображения должны представлять собой файлы PNG с квадратным соотношением сторон и прозрачным фоном.
Имя предустановки | Описание |
---|---|
openai_basic | Использует OpenAI для преобразования текста в речь (стандарт) и генерации изображений (DALL-E 2 @ 512x512). Необходимо заполнить переменную среды OPENAI_API_KEY |
openai_medium | Похож на openai_basic, но использует (DALL-E 3 @ 1024x1024). Необходимо заполнить переменную среды OPENAI_API_KEY |
local_basic | Использует конвейер Stable Diffusion от Huggingface с моделью stabilityai/sd-turbo для преобразования текста в изображение. Использует espeak для преобразования текста в речь и конвейер AudioLDM от Huggingface для преобразования текста в аудио. |
local_basic_gpu | То же, что и local_basic, но с включенной поддержкой cuda. |
local_medium | Похож на local_basic, но использует brave в качестве механизма преобразования текста в речь и модель stabilityai/sdxl-turbo для преобразования текста в изображение. |
local_medium | То же, что и local_medium, но с включенной поддержкой cuda. |
одиннадцать_средний | То же, что и local_medium, но использует преобразование текста в речь ElevenLabs . Поддержка API включена. Требуется Интернет и переменная ELEVEN_API_KEY , которая должна быть определена в файле .env . Требуется Интернет и учетная запись ElevenLabs. |
parler_medium | То же, что и local_medium, но использует parler текста в речь. Поддержка API включена. |
Иногда вы можете не захотеть использовать смайлы в качестве персонажей в своем видео или использовать разные голоса для каждого персонажа. Теперь этого можно добиться, используя раздел characters
в предустановленных файлах yaml. Ниже приведен пример того, как может выглядеть такой раздел:
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
НЗП
EmojiVidGen использует механизм кэширования для сохранения ресурсов, созданных во время создания видео, каждый из которых связан с конкретной используемой «подсказкой». Эта функция оказывается очень полезной, особенно при итеративной очистке видео, устраняя необходимость многократного восстановления ресурсов. Однако имейте в виду, что каталог .cache
не очищается автоматически. Рекомендуется очищать его после завершения видеопроекта и начала другого.
Совет: Чтобы принудительно воссоздать кэшированные ресурсы, внесите незначительные изменения в «подсказку», например добавьте пробел или знаки препинания.
Убедитесь, что файлы ресурсов присутствуют в папке .cache
. Создайте скрипт таким образом
Image: .cache/existing_background_hd.png
Audio: Funny opening music jingle.
Title: EmojiVidGen
?: .cache/existing_speech.wav
Скопируйте подходящий файл настроек и измените следующие строки:
global :
width : 1152
height : 896
Примечание. Этот параметр влияет на результат стабильной диффузии. Не все разрешения работают так хорошо. Для получения дополнительной информации ознакомьтесь с этой страницей https://rescribe.com/guides/stable-diffusion/how-to-use/. Кажется, что Stable Diffusion хорошо работает с квадратными пропорциями.
Вы увидите это сообщение об ошибке при использовании поставщика услуг 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
Пока игнорируйте эту ошибку, поскольку она не влияет на вывод.
Если вы получили следующую ошибку, удалите каталог .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}
}