EmojiVidGen هي أداة ممتعة تقوم بإنشاء مقاطع فيديو من ملفات نصية. يأخذ المدخلات في شكل ملفات نصية عادية تحتوي على برنامج نصي (مشابه للقصة أو الحوار). ثم يقوم بتحويل هذا البرنامج النصي إلى فيديو مذهل. يعتمد EmojiVidGen على نظام المكونات الإضافية، والذي يسمح بتجربة نماذج ولغات مختلفة. كل ما تحتاجه هو بعض مهارات الخيال والكتابة!
الميزات الرئيسية
على الرغم من أنه كان مخصصًا في البداية للترفيه باستخدام GenAI، إلا EmojiVidGen
يحمل إمكانات كبيرة لإنتاج محتوى جذاب ورائع، خاصة في الأيدي القادرة. هذا المشروع تجريبي وتم تصميمه في المقام الأول للأغراض التعليمية، واستكشاف إمكانيات إنشاء مقاطع فيديو مدعومة بالذكاء الاصطناعي.
هذا البرنامج مخصص للأغراض التعليمية فقط. يتم استخدامه وفقًا لتقديرك الخاص والمخاطر الخاصة بك. يرجى العلم أن نماذج الذكاء الاصطناعي المستخدمة في هذا الكود قد تكون لها قيود ضد الاستخدام التجاري.
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 | يستخدم خط أنابيب Huggingface's Stable Diffusion مع نموذج 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 . يحتاج إلى الإنترنت ومتغير ELEVEN_API_KEY ليتم تعريفه في ملف .env . يحتاج إلى الإنترنت وحساب ElevenLabs. |
parler_medium | مثل local_medium، ولكنه يستخدم دعم واجهة برمجة تطبيقات parler النص إلى كلام. |
في بعض الأحيان، قد لا ترغب في استخدام الرموز التعبيرية كأحرف في الفيديو الخاص بك أو استخدام صوت مختلف لكل شخصية. يمكن الآن تحقيق ذلك باستخدام قسم 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://replicate.com/guides/stable-diffusion/how-to-use/. يبدو أن الانتشار المستقر يعمل بشكل جيد مع نسب العرض إلى الارتفاع المربعة.
سوف ترى رسالة الخطأ هذه عند استخدام espeak
text to مزود الكلام.
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}
}