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()