awacke1's picture
Update app.py
1dc1e50
raw
history blame
2.34 kB
# Import required libraries
import streamlit as st
import cv2
import tempfile
import base64
# Streamlit app title
st.title("Video Concatenator App πŸŽ₯")
# Function to read video and return frames and properties
def read_video(video_path):
cap = cv2.VideoCapture(video_path)
frames = []
while True:
ret, frame = cap.read()
if not ret:
break
frames.append(frame)
fps = int(cap.get(cv2.CAP_PROP_FPS))
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
cap.release()
return frames, fps, size
# Function to convert video file to base64
def get_video_base64(video_path):
with open(video_path, "rb") as file:
video_base64 = base64.b64encode(file.read()).decode()
return video_base64
# Function to save frames to video
def save_frames_to_video(frames, output_video_path, fps, size):
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_video_path, fourcc, fps, size)
for frame in frames:
out.write(frame)
out.release()
# Textbox for user to specify output video name
output_video_name = st.text_input("Enter the name for the output video:", "Output_Video.mp4")
# Upload videos
uploaded_files = st.file_uploader("Upload Video Files πŸ“€", type=["mp4"], accept_multiple_files=True)
if uploaded_files:
video_paths = []
for file in uploaded_files:
tfile = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4")
tfile.write(file.read())
video_paths.append(tfile.name)
st.write("Uploaded video files: πŸ“‚", video_paths)
# Read videos and get frames
all_frames = []
fps = 0
size = (0, 0)
for path in video_paths:
frames, fps, size = read_video(path)
all_frames.extend(frames)
# Placeholder for future functionality
st.write("Additional processing can be performed here. ⏳")
# Save frames to video
save_frames_to_video(all_frames, output_video_name, fps, size)
# Provide download link for the video
video_base64 = get_video_base64(output_video_name)
st.markdown(f'### Download Output Video πŸ“₯')
href = f'<a href="data:video/mp4;base64,{video_base64}" download="{output_video_name}">Click here to download the video</a>'
st.markdown(href, unsafe_allow_html=True)