MujtabaAli's picture
Update app.py
07e567b verified
import streamlit as st
import yt_dlp
# Function to get video info (formats, quality, etc.)
def get_video_info(url):
ydl_opts = {
'quiet': True,
'noplaylist': True,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=False)
return info
# Function to download video
def download_video(url, format):
ydl_opts = {
'format': format,
'outtmpl': '%(title)s.%(ext)s', # Name the file based on the video title
'noplaylist': True,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
# Streamlit layout
st.title("Video Downloader App")
# User input for video URL
url = st.text_input('Enter Video URL')
if url:
try:
# Get video information (formats)
video_info = get_video_info(url)
formats = video_info.get('formats', [])
# Prepare list of available formats (e.g., 'best', 'mp4', 'webm')
format_options = []
for f in formats:
# Ensure format has 'format_note' and 'ext' to avoid key errors
if 'format_note' in f and 'ext' in f and 'filesize' in f:
format_options.append(f"{f['format_note']} - {f['ext']} - {f['filesize']} bytes")
if format_options:
# User selects a format
selected_format = st.selectbox('Select Video Quality', format_options)
# Convert selected format to yt-dlp's format identifier
selected_format_id = formats[format_options.index(selected_format)]['format_id']
if st.button('Download'):
with st.spinner('Downloading...'):
download_video(url, selected_format_id)
st.success('Download complete!')
else:
st.error("No formats available.")
except Exception as e:
st.error(f"Error fetching video info: {e}")