File size: 3,896 Bytes
bd2f353
0fc70c3
11cf479
d627392
79ec25e
d627392
 
 
8aca7f6
 
 
 
6695749
 
d627392
8aca7f6
 
49487f1
c3dd560
 
 
 
 
 
 
c947273
6c6b506
 
 
c947273
 
 
b951d0b
d449724
 
b951d0b
c947273
 
c3dd560
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6695749
bd2f353
 
63dca7d
bd2f353
2f4dbe2
 
bd2f353
b951d0b
d627392
b951d0b
49487f1
 
 
b951d0b
49487f1
 
6695749
49487f1
bd2f353
d627392
bd2f353
b24dca3
 
79ec25e
8a67596
6695749
8a67596
d627392
cef6ce0
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import gradio as gr
import subprocess
import os

def generate(video, audio, checkpoint, no_smooth, resize_factor, pad_top, pad_bottom, pad_left, pad_right, save_as_video):
    if video is None or audio is None or checkpoint is None:
        return "Пожалуйста, загрузите видео/изображение и аудио файл, а также выберите чекпойнт."

    print(f"Текущая рабочая директория: {os.getcwd()}")
    print(f"Содержимое текущей директории: {os.listdir('.')}")
    print(f"Проверка наличия 'inference.py': {os.path.exists('inference.py')}")

    video_path = video  
    audio_path = audio  

    print(f"Путь к видео: {video_path}")
    print(f"Путь к аудио: {audio_path}")

    output_dir = "outputs"
    os.makedirs(output_dir, exist_ok=True)

    output_path = os.path.join(output_dir, "output.mp4")
    print(f"Путь к выходному файлу: {output_path}")

    args = [
    "--checkpoint_path", f"checkpoints/{checkpoint}.pth",
    "--segmentation_path", "checkpoints/face_segmentation.pth",    
    "--no_seg",  
    "--no_sr",      
    "--face", video_path,
    "--audio", audio_path,
    "--outfile", output_path,
    "--resize_factor", "2", 
    "--face_det_batch_size", "4",    
    "--wav2lip_batch_size", "64",    
    "--fps", "30",                    
    
    "--pads", str(pad_top), str(pad_bottom), str(pad_left), str(pad_right)
    ]

    if no_smooth:
        args.append("--nosmooth")

    if save_as_video:
        args.append("--save_as_video")

    try:
        cmd = ["python", "inference.py"] + args
        print(f"Запуск инференса с командой: {' '.join(cmd)}")
        subprocess.run(cmd, check=True)
    except subprocess.CalledProcessError as e:
        print(f"Ошибка при выполнении команды: {e}")
        return f"Произошла ошибка при обработке: {e}"

    if not os.path.exists(output_path):
        print("Выходной файл не существует.")
        return "Не удалось создать выходное видео."

    print(f"Выходной файл создан по пути: {output_path}")
    return output_path  

with gr.Blocks() as ui:
    gr.Markdown("## Lypsinc")
    with gr.Row():
        video = gr.File(label="Видео или Изображение", type="filepath")
        audio = gr.File(label="Аудио", type="filepath")
        with gr.Column():
            checkpoint = gr.Radio(["wav2lip", "wav2lip_gan"], label="Чекпойнт", value="wav2lip_gan", visible=False)
            no_smooth = gr.Checkbox(label="Без сглаживания", value=False)
            resize_factor = gr.Slider(minimum=1, maximum=4, step=1, label="Фактор изменения размера", value=2)
    with gr.Row():
        with gr.Column():
            pad_top = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ сверху")
            pad_bottom = gr.Slider(minimum=0, maximum=50, step=1, value=10, label="Отступ снизу")
            pad_left = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ слева")
            pad_right = gr.Slider(minimum=0, maximum=50, step=1, value=0, label="Отступ справа")
            save_as_video = gr.Checkbox(label="Сохранять как видео", value=True)  
            generate_btn = gr.Button("Сгенерировать")
        with gr.Column():
            result = gr.Video(label="Результат")

    generate_btn.click(
        generate, 
        inputs=[video, audio, checkpoint, no_smooth, resize_factor, pad_top, pad_bottom, pad_left, pad_right, save_as_video], 
        outputs=result,
        concurrency_limit=30  
    )

ui.launch(debug=True)