EmojiVidGen เป็นเครื่องมือสนุก ๆ ที่สร้างวิดีโอจากไฟล์ข้อความ รับอินพุตในรูปแบบของไฟล์ข้อความธรรมดาที่มีสคริปต์ (คล้ายกับเรื่องราวหรือบทสนทนา) จากนั้นจึงแปลงสคริปต์นี้ให้เป็นวิดีโอที่น่าทึ่ง EmojiVidGen ใช้ระบบปลั๊กอินซึ่งช่วยให้สามารถทำการทดลองกับรุ่นและภาษาต่างๆ ได้ สิ่งที่คุณต้องมีคือจินตนาการและทักษะการพิมพ์!
คุณสมบัติที่สำคัญ
แม้ว่าในตอนแรกจะมีจุดประสงค์เพื่อความบันเทิงด้วย GenAI แต่ EmojiVidGen
ก็มีศักยภาพที่สำคัญในการผลิตเนื้อหาที่น่าสนใจและน่าสนใจ โดยเฉพาะอย่างยิ่งในมือที่มีความสามารถ โปรเจ็กต์นี้เป็นการทดลองและสร้างขึ้นเพื่อการศึกษาเป็นหลัก โดยสำรวจความเป็นไปได้ของการสร้างวิดีโอที่ขับเคลื่อนด้วย AI
ซอฟต์แวร์นี้มีวัตถุประสงค์เพื่อการศึกษาเท่านั้น มันถูกใช้ตามดุลยพินิจและความเสี่ยงของคุณเอง โปรดทราบว่าโมเดล AI ที่ใช้ในโค้ดนี้อาจมีข้อจำกัดในการใช้งานเชิงพาณิชย์
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 พร้อมโมเดล 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 แล้ว |
eleven_medium | เหมือนกับ local_medium แต่เปิดใช้งานการรองรับ API ข้อความเป็นคำพูด ElevenLabs แล้ว ต้องการอินเทอร์เน็ตและตัวแปร ELEVEN_API_KEY ที่จะกำหนดในไฟล์ . .env ต้องการอินเทอร์เน็ตและบัญชี ElevenLabs |
parler_medium | เหมือนกับ local_medium แต่เปิดใช้งานการรองรับ API ข้อความเป็นคำพูด 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
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}
}