Spaces:
Runtime error
Runtime error
import base64 | |
import tempfile | |
from openai import AsyncOpenAI | |
from shiny.express import input, render, ui | |
from videoinput import audio_spinner, input_video_clip, process_video | |
client = AsyncOpenAI() | |
ui.page_opts(class_="py-5") | |
input_video_clip("clip") | |
async def show_clip(): | |
clip = input.clip() | |
mime_type = clip["type"] | |
bytes = base64.b64decode(clip["bytes"]) | |
# TODO: Use correct file extension based on mime type | |
with tempfile.TemporaryDirectory() as tempdir: | |
filename = tempfile.mktemp(dir=tempdir, suffix=get_video_extension(mime_type)) | |
with open(filename, "wb") as file: | |
file.write(bytes) | |
file.close() | |
with ui.Progress() as p: | |
mp3_data_uri = await process_video( | |
client, | |
filename, | |
callback=lambda status: p.set(message=status), | |
) | |
return audio_spinner(src=mp3_data_uri) | |
def get_video_extension(mime_type: str) -> str: | |
mime_type = mime_type.split(";")[0].strip() | |
# Dictionary to map MIME types to file extensions | |
mime_to_extension = { | |
"video/webm": ".webm", | |
"video/mp4": ".mp4", | |
"video/ogg": ".ogv", | |
"video/x-matroska": ".mkv", | |
"video/avi": ".avi", | |
"video/mpeg": ".mpeg", | |
"video/quicktime": ".mov", | |
} | |
# Return the appropriate file extension for the given MIME type | |
return mime_to_extension.get(mime_type, "") | |