deven367's picture
bug fixes
2433253
raw
history blame
2.42 kB
import streamlit as st
from annotator.utils import *
st.set_page_config(layout='wide')
from fastcore.xtras import globtastic
from pathlib import Path
import subprocess
SRT_PATH = Path('srt')
if not SRT_PATH.exists(): SRT_PATH.mkdir(exist_ok=True)
AUDIO_PATH = Path('./audio')
if not AUDIO_PATH.exists(): AUDIO_PATH.mkdir(exist_ok=True)
def make_sidebar():
with st.sidebar:
st.markdown('## yt-video-annotator')
st.write('Link to the GitHub repo')
@st.cache(allow_output_mutation=True)
def caption_from_url(url):
audio_src = get_audio(url)
v = get_v_from_url(url)
audio_src = globtastic(AUDIO_PATH, file_glob='*.mp3', file_re=v)[0]
result = annotate(audio_src)
df = df_from_result(result)
return audio_src, df
def main():
url, name = None, None
make_sidebar()
col1, col2 = st.columns([1.2, 1])
with col1:
url = st.text_input('Enter URL for the YT video')
st.video(url)
with col2:
default_opt = 'Search for words'
opt = st.radio('What do you wish to do?', [default_opt, 'Generate subtitles for the entire video'])
if opt == default_opt:
st.markdown('### Search for words in the video')
words = st.text_input('Enter words separated by a comma')
words = words.split(',')
if st.button('Get Timestamps'):
audio_src, df = caption_from_url(url)
times = find_word_timestamp(df, *words)
times = np.asarray(times).reshape(len(words), -1)
# st.write(times)
for i, word in enumerate(words):
st.write(f"{word} is said on {times[i].flatten()} timestamp")
else:
if st.button('Generate SRT'):
audio_src, df = caption_from_url(url)
name = Path(audio_src).stem
s = generate_srt(df)
with working_directory(SRT_PATH):
write_srt(s, name)
if name is not None:
with working_directory(SRT_PATH):
key = get_v_from_url(url)
srt = globtastic('.', file_glob='*.srt', file_re=key)[0]
with open(srt) as f:
st.download_button('Download SRT', f, file_name=f'{name}.srt')
# subprocess.run(['rm', '-rf', 'audio'])
# subprocess.run(['rm', '-rf', 'srt'])
if __name__ == "__main__":
main()