video / app.py
EngrNarmeen's picture
Update app.py
e1c295b verified
import streamlit as st
import tempfile
import os
import cv2
import numpy as np
import subprocess
# Ensure FFmpeg is installed
os.system("apt-get update && apt-get install -y ffmpeg")
# Function to remove watermark from frames
def remove_watermark(frame):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
_, mask = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)
result = cv2.inpaint(frame, mask, 3, cv2.INPAINT_TELEA)
return result
# Function to enhance resolution to 1080p
def enhance_resolution(input_path, output_path):
os.system(f"ffmpeg -i {input_path} -vf scale=1920:1080 {output_path}")
# Function to get video duration using subprocess (fix for ffmpeg.probe error)
def get_video_duration(video_path):
try:
result = subprocess.run(
["ffprobe", "-v", "error", "-show_entries", "format=duration",
"-of", "default=noprint_wrappers=1:nokey=1", video_path],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
return float(result.stdout.strip()) # Convert duration to float (seconds)
except Exception as e:
print("Error getting video duration:", e)
return None
# Function to trim last 3 seconds (removes Invideo AI branding)
def trim_invidea_ai_branding(input_path, output_path):
duration = get_video_duration(input_path)
if duration:
duration = max(0, duration - 3) # Trim last 3 seconds
os.system(f"ffmpeg -i {input_path} -t {duration} {output_path}")
else:
os.system(f"cp {input_path} {output_path}") # Copy file without trimming
# Function to process the video
def process_video(input_video):
cap = cv2.VideoCapture(input_video)
if not cap.isOpened():
return None
temp_output = tempfile.NamedTemporaryFile(delete=False, suffix='.mp4')
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(temp_output.name, fourcc, 30.0, (int(cap.get(3)), int(cap.get(4))))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
processed_frame = remove_watermark(frame)
out.write(processed_frame)
cap.release()
out.release()
# Enhance resolution
enhanced_output = tempfile.NamedTemporaryFile(delete=False, suffix='.mp4')
enhance_resolution(temp_output.name, enhanced_output.name)
# Trim branding
final_output = tempfile.NamedTemporaryFile(delete=False, suffix='.mp4')
trim_invidea_ai_branding(enhanced_output.name, final_output.name)
return final_output.name
# Streamlit UI
st.title("AI Video Enhancement App 🎥")
uploaded_file = st.file_uploader("Upload a video", type=["mp4", "avi", "mov"])
if uploaded_file:
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_file:
temp_file.write(uploaded_file.read())
temp_file_path = temp_file.name
st.write("Processing video...")
processed_video_path = process_video(temp_file_path)
if processed_video_path:
st.video(processed_video_path)
with open(processed_video_path, "rb") as file:
st.download_button("Download Processed Video", file, "enhanced_video.mp4", "video/mp4")