Search code examples
pythonopencvstreamlit

How to play videos side by side using streamlit and opencv-python


Created a project for playing video side by side using streamlit and opencv-python but on the loop it generates video frames continuously but I want in a 1x1 format

import cv2
import streamlit as st

st.set_page_config(
    page_title="Sample Page"
)

st.title("4-Video Grid")

cap = cv2.VideoCapture("videos/video1.mp4")

col1, col2 = st.columns([1, 1])

while True:
    ret, frame1 = cap.read()
    ret, frame2 = cap.read()
    if not ret:
        break
    
    col1.image(frame1, channels="BGR")
    col2.image(frame2, channels="BGR")


    key = cv2.waitKey(1)
    if key == ord("q"):
        break
cap.release()
cv2.destroyAllWindows()

The above provided code is just a sample but it generates frames continuously

I want to play 2 videos side by side using streamlit and opencv-python for a Computer Vision Project


Solution

  • Finally, I found a temporary solution to this so i am going to close this topic if anyone know a better solution feel free to reach me

    import streamlit as st
    import cv2
    
    st.set_page_config(
        page_title="Workout file"
    )
    
    st.title("Multiple Cameras")
    
    cam1, cam2 = st.columns((1, 1))
    video_1 = cam1.empty()
    video_2 = cam2.empty()
    
    cap1 = cv2.VideoCapture("videos/cars.mp4")
    cap2 = cv2.VideoCapture("videos/motorbikes-1.mp4")
    
    while cap1.isOpened() or cap2.isOpened():
        ret1, frame1 = cap1.read()
        ret2, frame2 = cap2.read()
    
        frame1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB)
        frame2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2RGB)
        video_1.image(frame1, channels="RGB")
        video_2.image(frame2, channels="RGB")
    
    
    cap1.release()
    cap2.release()
    cv2.destroyAllWindows()
    

    the above solution temporarily solved my issue!!