EmojiVidGen adalah alat menyenangkan yang membuat video dari file teks. Dibutuhkan input berupa file teks biasa yang berisi skrip (mirip dengan cerita atau dialog). Itu kemudian mengubah skrip ini menjadi video yang menakjubkan. EmojiVidGen didasarkan pada sistem plugin, yang memungkinkan untuk bereksperimen dengan berbagai model dan bahasa. Yang Anda butuhkan hanyalah imajinasi dan keterampilan mengetik!
Fitur Utama
Meskipun awalnya ditujukan untuk hiburan dengan GenAI, EmojiVidGen
memiliki potensi signifikan dalam menghasilkan konten yang menarik dan keren, terutama di tangan yang cakap. Proyek ini bersifat eksperimental dan terutama dibuat untuk tujuan pendidikan, mengeksplorasi kemungkinan pembuatan video yang didukung AI.
Perangkat lunak ini dimaksudkan semata-mata untuk tujuan pendidikan. Ini digunakan atas kebijaksanaan dan risiko Anda sendiri. Perlu diketahui bahwa model AI yang digunakan dalam kode ini mungkin memiliki batasan terhadap penggunaan komersial.
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
Catatan: Skrip harus selalu dimulai dengan direktif
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! "
Emoji ?️
dicadangkan sebagai narator. Menggunakannya di awal baris akan menyebabkan sistem hanya menghasilkan suara dan tidak mengeluarkan gambar apa pun di latar belakang.
Jika Anda telah mengikuti petunjuk sebelumnya untuk pembuatan video, Anda mungkin memperhatikan bahwa pengaturan default menggunakan espeak
sebagai mesin text-to-speech, sehingga menghasilkan keluaran yang terdengar seperti robot. EmojiVidGen dibangun dengan struktur internal yang terdiri dari plugin, masing-masing mampu mengubah cara tugas dijalankan atau model mana yang digunakan.
Misalnya, Anda dapat menentukan plugin spesifik untuk setiap jenis tugas pembuatan—baik itu text-to-image, text-to-audio, atau text-to-speech. Karena setiap plugin beroperasi dengan model dan metode uniknya, mengonfigurasi pengaturan ini satu per satu bisa sangat melelahkan. Untuk menyederhanakan proses ini, saya telah memperkenalkan konsep preset. Anda dapat menerapkan preset dengan memberikan opsi --preset
ke file generate_video.py
.
Misalnya preset di bawah ini menggunakan preset yang disebut local_medium
.
python generate_video.py stories/hello.txt hello.mp4 --preset local_medium
Semua preset disimpan di ./presets folder
. Untuk membuat preset baru (misalnya custom_preset
), cukup buat file custom_preset.yaml
baru di folder `./presets' dan mulai gunakan seperti ini
python generate_video.py stories/hello.txt hello.mp4 --preset custom_preset
Perhatikan bahwa voice
yang digunakan di bagian characters
harus didukung oleh penyedia text_to_speech
yang dipilih. Gambar idealnya berupa file PNG dengan rasio aspek persegi dan latar belakang transparan.
Nama Prasetel | Keterangan |
---|---|
openai_basic | Menggunakan OpenAI untuk pembuatan teks ke ucapan (standar) dan gambar (DALL-E 2 @ 512x512). Perlu diisi variabel lingkungan OPENAI_API_KEY |
openai_medium | Mirip dengan openai_basic tetapi menggunakan (DALL-E 3 @ 1024x1024). Perlu diisi variabel lingkungan OPENAI_API_KEY |
lokal_dasar | Menggunakan pipa Difusi Stabil Huggingface dengan model stabilityai/sd-turbo untuk teks ke gambar. Menggunakan espeak untuk teks ke ucapan dan saluran AudioLDM Huggingface untuk teks ke audio. |
local_basic_gpu | Sama seperti local_basic, tetapi dengan dukungan cuda diaktifkan. |
lokal_medium | Mirip dengan local_basic tetapi menggunakan brave sebagai mesin teks ke ucapan dan model stabilityai/sdxl-turbo untuk teks ke gambar |
lokal_medium | Sama seperti local_medium, tetapi dengan dukungan cuda diaktifkan. |
sebelas_medium | Sama seperti local_medium, tetapi menggunakan dukungan API teks ke ucapan ElevenLabs diaktifkan. Membutuhkan internet dan variabel ELEVEN_API_KEY untuk didefinisikan dalam file .env . Membutuhkan internet dan akun ElevenLabs. |
parler_medium | Sama seperti local_medium, tetapi menggunakan parler dukungan API teks ke ucapan diaktifkan. |
Terkadang Anda mungkin tidak ingin menggunakan emoji sebagai karakter dalam video Anda atau menggunakan suara yang berbeda untuk setiap karakter. Ini sekarang dapat dicapai dengan menggunakan bagian characters
di file yaml yang telah ditetapkan sebelumnya. Di bawah ini adalah contoh tampilan bagian tersebut:
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 menggunakan mekanisme cache untuk menyimpan aset yang dihasilkan selama pembuatan video, masing-masing terkait dengan 'prompt' spesifik yang digunakan. Fitur ini terbukti sangat bermanfaat, terutama saat menyempurnakan video secara berulang, sehingga menghilangkan kebutuhan untuk membuat ulang aset secara berulang. Namun, perlu diketahui bahwa direktori .cache
tidak dihapus secara otomatis. Dianjurkan untuk menghapusnya setelah menyelesaikan proyek video dan memulai proyek video lainnya.
Tip: Untuk memaksa pembuatan ulang aset yang disimpan dalam cache, lakukan perubahan kecil pada 'perintah' seperti menambahkan spasi atau tanda baca
Pastikan file aset ada di folder .cache
. Buat skrip dengan cara ini
Image: .cache/existing_background_hd.png
Audio: Funny opening music jingle.
Title: EmojiVidGen
?: .cache/existing_speech.wav
Salin file preset yang sesuai dan ubah baris berikut:
global :
width : 1152
height : 896
Catatan: Pengaturan ini mempengaruhi keluaran difusi stabil. Tidak semua resolusi berhasil dengan baik. Untuk informasi lebih lanjut, periksa https://replication.com/guides/stable-diffusion/how-to-use/ ini. Difusi Stabil tampaknya berfungsi baik dengan rasio aspek persegi.
Anda akan melihat pesan kesalahan ini saat menggunakan penyedia teks ke 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
Abaikan kesalahan ini untuk saat ini karena tidak mempengaruhi keluaran.
Jika Anda menerima kesalahan di bawah ini, hapus direktori .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}
}