radames's picture
Update app.py
3f97687
import gradio as gr
get_video_data = """async (video, video_data_dummy) => {
const videoEl = document.querySelector("#video_in video");
if (!videoEl){
return [video, {}]
}
const metadata = {
duration: videoEl.duration,
currentTime: videoEl.currentTime,
isPaused: videoEl.paused,
hasEnded: videoEl.ended,
volume: videoEl.volume,
isMuted: videoEl.muted,
playbackRate: videoEl.playbackRate,
videoWidth: videoEl.videoWidth,
videoHeight: videoEl.videoHeight,
readyState: videoEl.readyState,
bufferedTimeRanges: Array.from(
{ length: videoEl.buffered.length },
(v, i) => ({
start: videoEl.buffered.start(i),
end: videoEl.buffered.end(i),
})
),
};
console.log(metadata);
return [video, metadata];
}"""
def predict(video, video_data):
timestamp = video_data["currentTime"]
return video_data
with gr.Blocks() as demo:
video_data_dummy = gr.JSON({}, visible=False)
with gr.Row():
with gr.Column():
video = gr.Video(elem_id="video_in")
with gr.Column():
timestamp = gr.JSON()
with gr.Row():
btn = gr.Button(value="Run")
btn.click(
predict, inputs=[video, video_data_dummy], outputs=[timestamp], _js=get_video_data
)
demo.launch()