Spaces:
Running
Running
File size: 1,624 Bytes
78477bb |
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 |
import base64
import pathlib
import tempfile
import gradio as gr
recorder_js = pathlib.Path('recorder.js').read_text()
main_js = pathlib.Path('main.js').read_text()
record_button_js = pathlib.Path('record_button.js').read_text().replace('let recorder_js = null;', recorder_js).replace(
'let main_js = null;', main_js)
def save_base64_video(base64_string):
base64_video = base64_string
video_data = base64.b64decode(base64_video)
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_file:
temp_filename = temp_file.name
temp_file.write(video_data)
print(f"Temporary MP4 file saved as: {temp_filename}")
return temp_filename
with gr.Blocks(title="Screen Recorder Demo") as demo:
start_button = gr.Button("Record Screen π΄")
video_component = gr.Video(interactive=True, show_share_button=True)
def toggle_button_label(returned_string):
if returned_string.startswith("Record"):
return gr.Button(value="Stop Recording βͺ"), None
else:
try:
temp_filename = save_base64_video(returned_string)
except Exception as e:
return gr.Button(value="Record Screen π΄"), gr.Warning(f'Failed to convert video to mp4:\n{e}')
return gr.Button(value="Record Screen π΄"), gr.Video(value=temp_filename, interactive=True,
show_share_button=True)
start_button.click(toggle_button_label, start_button, [start_button, video_component], js=record_button_js)
if __name__ == "__main__":
demo.launch()
|