| import gradio as gr |
| import requests |
| import time |
| import os |
| import tempfile |
| import shutil |
|
|
|
|
| |
| API_KEY = os.getenv("API_KEY") |
| api_url = os.getenv("api_url") |
|
|
| def check_status_and_get_link(job_id): |
| status_url = f"{api_url}/{job_id}" |
| headers = {"accept": "application/json", "x-api-key": API_KEY} |
| |
| while True: |
| response = requests.get(status_url, headers=headers) |
| if response.status_code == 200: |
| status = response.json()["status"] |
| if status == "COMPLETED": |
| return response.json()["url"], "λΉλμ€κ° μ±κ³΅μ μΌλ‘ μμ±λμμ΅λλ€." |
| elif status == "FAILED": |
| return None, "λΉλμ€ μμ± μ€ν¨." |
| else: |
| return None, "μν νμΈ μ€ μ€λ₯ λ°μ." |
| time.sleep(10) |
|
|
| def create_video(video_data, audio_data): |
| files = { |
| 'video': ('video.mp4', video_data, 'video/mp4'), |
| 'audio': ('audio.mp3', audio_data, 'audio/mpeg'), |
| } |
| payload = { |
| "synergize": True, |
| "model": os.getenv("MODEL_VERSION") |
| } |
| headers = {"x-api-key": API_KEY} |
|
|
| try: |
| response = requests.post(api_url, files=files, data=payload, headers=headers) |
| print(f"Response: {response.status_code}, {response.text}") |
| if response.status_code in [200, 201]: |
| job_id = response.json()["id"] |
| download_url, message = check_status_and_get_link(job_id) |
| if download_url: |
| html_code = f''' |
| <video width="640" height="360" controls> |
| <source src="{download_url}" type="video/mp4"> |
| </video> |
| <br> |
| <button onclick="window.location.href='{download_url}'">λ€μ΄λ‘λ</button> |
| ''' |
| return job_id, html_code, message |
| else: |
| return job_id, "λΉλμ€ λ§ν¬λ₯Ό λΆλ¬μ¬ μ μμ΅λλ€.", message |
| else: |
| print(f"API νΈμΆ μ€ν¨: {response.status_code}, {response.text}") |
| return "API νΈμΆ μ€ν¨", None, None |
| except Exception as e: |
| print(f"API νΈμΆ μ€ μμΈ λ°μ: {e}") |
| return "API νΈμΆ μ€ μ€λ₯ λ°μ", None, None |
|
|
| iface = gr.Interface( |
| fn=create_video, |
| inputs=[ |
| gr.File(label="λΉλμ€ νμΌ μ
λ‘λ", type="binary"), |
| gr.File(label="μ€λμ€ νμΌ μ
λ‘λ", type="binary") |
| ], |
| outputs=[ |
| gr.Textbox(label="μμ
ID"), |
| gr.HTML(label="λΉλμ€"), |
| gr.Textbox(label="λ©μμ§") |
| ], |
| title="νμ νμ΄μ€", |
| description="mp4 λΉλμ€ νμΌκ³Ό μ€λμ€ νμΌμ μ
λ‘λνμ¬ λΉλμ€λ₯Ό μμ±ν©λλ€." |
| ) |
|
|
| iface.launch() |