File size: 1,631 Bytes
8f3b56b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from pathlib import Path
import uuid
import pickle as pkl
from dynamic_utils import Sampler, get_layout
from utils import clean_temp_dir, get_scene_data, get_scene_dir_path
from video_utils import Video_Generator
from utils import get_video_path, read_character


def generate_schedules(scene_file_name, character_files):
    scene_dir = get_scene_dir_path(scene_file_name)
    house_info = get_scene_data(scene_dir)

    activity_base_list = []
    character_info_list = []
    schedule_list = []
    for character_file in character_files:
        activity_base, character_info, schedule = read_character(character_file)
        activity_base_list.append(activity_base)
        character_info_list.append(character_info)
        schedule_list.append(schedule)

    #set sampler
    sampler = Sampler()
    sampler.set_activity(character_info_list, activity_base_list, schedule_list)
    scene_layout = get_layout(house_info)
    sampler.set_scene_layout(scene_layout)
    schedules, _, _ = sampler.sample()
    return schedules

def save_vedio(schedules, scene_id, vedio_path):
    video_generator = Video_Generator()
    video_generator.generate(schedules, scene_id, vedio_path)

def generate_video(scene_file_name: str, character_files: list[dict|str|Path], max_try_num: int=5) -> Path:
    for _ in range(max_try_num):
        try:
            schedules = generate_schedules(scene_file_name, character_files)
            clean_temp_dir()
            video_path = get_video_path()
            save_vedio(schedules, scene_file_name, video_path)
            return video_path
        except:
            continue
    return None