Files
FABLE/classes/video.py
Paillat f7835f6604 feat(audio_prompts): add default audio prompts for narrator
feat(audio_prompts): add en_narrator_deep audio prompt for narrator
feat(audio_prompts): add en_narrator_light_bg audio prompt for narrator
fix(video.py): fix indentation and add prompt for generating thumbnail
fix(montage.py): fix indentation and add prompt for generating thumbnail
fix(montage.py): fix image download for wikimage slides

fix(speak.py): remove unused import statement
fix(speak.py): remove unused variable 'fakenames'
feat(speak.py): add function 'remove_blank_moments' to remove silent parts from audio file
feat(speak.py): add function 'optimize_string_groups' to optimize string groups for audio generation
fix(speak.py): fix comment indentation in 'generate_voice' function
fix(speak.py): remove unused imports in 'generate_voice' function
fix(speak.py): remove unused variable 'reduced_noise' in 'generate_voice' function
fix(speak.py): remove unused import statements in 'generate_voice' function
fix(speak.py): remove unused import statement for 'logging' module
fix(speak.py): remove unused print statements in 'main' function
fix(speak.py): remove unused import statement for 'logging' module
fix(speak.py): remove unused print statements in 'main' function
fix(speak.py):

fix(wiki_downloader.py): fix Google search URL to include correct query parameter
fix(wiki_downloader.py): reduce sleep time after page load to 1 second
fix(wiki_downloader.py): increase sleep time after image click to 5 seconds
2023-07-02 11:17:10 +02:00

77 lines
3.3 KiB
Python

import os
import json
import yaml
from utils.openaicaller import openai
from utils.normalize_file import normalize_file as nf
from utils.config import bcolors
from utils.misc import clear_screen, open_explorer_here, realbcolors, printm
from utils.uploader import upload_video
from generators.script import generate_script
from generators.montage import mount, prepare
from generators.thumbnail import generate_thumbnail
class Video:
def __init__(self, idea, parent):
self.parent = parent # The parent class, which is a Channel class
self.id = None
self.url = None
self.script = None
self.path = None
self.idea = idea
self.title = self.idea['title']
self.description = self.idea['description']
self.metadata = None
async def generate(self):
normalized_title = await nf(self.idea['title'])
self.path = os.path.join(self.parent.path, "videos", normalized_title)
if not os.path.exists( self.path):
os.makedirs( self.path)
script = None
if os.path.exists(os.path.join( self.path, "script.json")):
if input("Video script already exists. Do you want to overwrite it ? (y/N) : ").lower() == "y":
os.remove(os.path.join( self.path, "script.json"))
if not os.path.exists(os.path.join( self.path, "script.json")):
script_prompt = None
if os.path.exists(os.path.join(self.parent.path, "script_prompt.txt")):
with open(os.path.join(self.parent.path, "script_prompt.txt"), "r") as f:
script_prompt = f.read()
f.close()
if script_prompt:
printm("Using custom script prompt")
script = await generate_script(self.idea['title'], self.idea['description'], script_prompt)
else:
printm("Using default script prompt")
script = await generate_script(self.idea['title'], self.idea['description'])
script = json.loads(script)
with open(os.path.join( self.path, "script.json"), "w") as f:
json.dump(script, f, indent=4)
f.close()
else:
with open(os.path.join(self.path, "script.json"), "r") as f:
script = json.load(f)
f.close()
await prepare( self.path)
credits = await mount(self.path, script)
self.metadata = {
"title": self.idea['title'],
"description": self.idea['description'] + "\n\n" + credits,
}
if input("Do you want to generate a thumbnail ? (y/N) : ").lower() == "y":
await generate_thumbnail( self.path, self.idea['title'], self.idea['description'])
videoid = await upload_video( self.path, self.idea['title'], self.metadata['description'], 28, "", "private", self.parent.path)
printm(f"Your video is ready! You can find it in { self.path}")
video_meta_file = {
"title": self.idea['title'],
"description": self.metadata['description'],
"id": videoid,
"path": self.path,
"url": f"https://www.youtube.com/watch?v={videoid}",
}
with open(os.path.join( self.path, "video.yaml"), "w") as f:
yaml.dump(video_meta_file, f)
f.close()
return self