import gradio as gr import cv2 import PIL def get_frame_id_from_pct(v, pct): return int(v.get(cv2.CAP_PROP_FRAME_COUNT) * pct/100) def frame2pil(frame): return PIL.Image.fromarray(frame, mode="RGB") def extract_frame(pct, video): v = cv2.VideoCapture(video) frame_at = get_frame_id_from_pct(v, pct) v.set(cv2.CAP_PROP_POS_FRAMES, frame_at) ret, frame = v.read() return frame2pil(frame) def process_video(pct, video): return extract_frame(pct, video) app = gr.Interface(fn=process_video, inputs=[gr.Number(label="PCT", ) ,gr.PlayableVideo()] , outputs='image') app.launch()