import streamlit as st
from pytube import YouTube
import os
import base64
import time
#@deprecated: not used anymore due to streamlit download_button feature
def get_binary_file_downloader_html(bin_file, file_label='File'):
with open(bin_file, 'rb') as f:
data = f.read()
bin_str = base64.b64encode(data).decode()
href = f'Download {file_label}'
return href
def on_progress(stream, chunk, bytes_remaining):
print(' progress:', bytes_remaining, " ", end='\r', flush=True)
def on_complete(stream, filename):
print('--- Completed ---')
print('stream:', stream)
print('filename:', filename)
def delete_file(filepath):
if os.path.exists(filepath):
os.remove(filepath)
def on_download_file_click(filepath):
# sleep Xsec can delete file
time.sleep(2)
delete_file(filepath)
def main():
# Set the title and background color
st.title("YouTube video downloader 🎥")
st.markdown('', unsafe_allow_html=True)
# st.subheader('Built with the Llama 2 🦙, Haystack, Streamlit and ❤️')
# st.markdown('', unsafe_allow_html=True)
# Expander for app details
with st.expander("About the App (Works well on chrome browser)"):
st.write("This app allows you to download video from YouTube url.")
st.write("Enter a YouTube URL in the input box below and click on 'Submit'")
# Input box for YouTube URL
youtube_url = st.text_input("Enter YouTube URL")
# Submit button
if st.button("Submit") and youtube_url:
progress_bar = st.progress(0, text='Processing...')
yt = YouTube(youtube_url)
yt.register_on_progress_callback(on_progress)
yt.register_on_complete_callback(on_complete)
# extract only audio
video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
# video = yt.streams.get_highest_resolution()
initial_filename = yt.title
# download the file
destination = '.' # current folder
out_file = video.download(output_path=destination, filename=str(initial_filename))
# save the file
# base, ext = os.path.splitext(out_file)
new_file = '-'.join(initial_filename.split(' '))[-15:] + '.mp4'
os.rename(out_file, new_file)
# Display layout with 2 rows
st.video(youtube_url)
# st.header("Audio file in MP3 format")
# st.write(new_file)
# st.markdown(get_binary_file_downloader_html('photo.jpg', 'Picture'), unsafe_allow_html=True)
# st.markdown(get_binary_file_downloader_html('data.csv', 'My Data'), unsafe_allow_html=True)
# st.markdown(get_binary_file_downloader_html(new_file, 'Audio'), unsafe_allow_html=True)
# download video file
with open(new_file, 'rb') as f:
st.download_button('Download Video', f, file_name=new_file, on_click=on_download_file_click(new_file))
progress_bar.progress(100, text='DONE')
st.success('Successfull!!')
if __name__ == "__main__":
main()