marquesafonso commited on
Commit
2b0ce36
·
1 Parent(s): 8cdcb92

audio preprocessing enhancement. fix dirs. add zip archive response.

Browse files
Files changed (5) hide show
  1. cli.py +18 -11
  2. main.py +23 -11
  3. utils/convert_mp4_to_mp3.py +16 -0
  4. utils/process_video.py +7 -3
  5. utils/zip_response.py +10 -0
cli.py CHANGED
@@ -2,6 +2,7 @@ from argparse import ArgumentParser
2
  from utils.download_video import download_video
3
  from utils.transcriber import transcriber
4
  from utils.subtitler import subtitler
 
5
  import logging, os
6
  from tqdm import tqdm
7
 
@@ -20,26 +21,32 @@ def main(video_url:str,
20
  text_color:str
21
  ):
22
  INVIDEO_DIR = os.path.join('data/',invideo_filename)
23
- if not os.path.exists(INVIDEO_DIR):
24
- os.makedirs(INVIDEO_DIR)
25
  SRT_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.srt")
26
  OUTVIDEO_PATH = os.path.join(INVIDEO_DIR, f"result_{invideo_filename}.mp4")
27
  with tqdm(total=100, desc="Overall Progress") as pbar:
28
  if video_url != None:
29
- stream_title = download_video(video_url, INVIDEO_DIR, invideo_filename)
30
- pbar.update(33.33)
 
 
 
31
  if not os.path.exists(SRT_PATH):
32
- transcriber(stream_title, SRT_PATH, max_words_per_line)
33
- pbar.update(33.33)
34
- subtitler(stream_title, SRT_PATH, OUTVIDEO_PATH,fontsize, font, bg_color, text_color)
35
- pbar.update(33.34)
36
  return
37
  INVIDEO_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.mp4")
 
 
 
 
38
  if not os.path.exists(SRT_PATH):
39
- transcriber(INVIDEO_PATH, SRT_PATH, max_words_per_line)
40
- pbar.update(66.66)
41
  subtitler(INVIDEO_PATH, SRT_PATH, OUTVIDEO_PATH, fontsize, font, bg_color, text_color)
42
- pbar.update(33.34)
43
 
44
  if __name__ == '__main__':
45
  parser = ArgumentParser()
 
2
  from utils.download_video import download_video
3
  from utils.transcriber import transcriber
4
  from utils.subtitler import subtitler
5
+ from utils.convert_mp4_to_mp3 import convert_mp4_to_mp3
6
  import logging, os
7
  from tqdm import tqdm
8
 
 
21
  text_color:str
22
  ):
23
  INVIDEO_DIR = os.path.join('data/',invideo_filename)
24
+ os.makedirs(INVIDEO_DIR, exist_ok=True)
 
25
  SRT_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.srt")
26
  OUTVIDEO_PATH = os.path.join(INVIDEO_DIR, f"result_{invideo_filename}.mp4")
27
  with tqdm(total=100, desc="Overall Progress") as pbar:
28
  if video_url != None:
29
+ INVIDEO_PATH = download_video(video_url, INVIDEO_DIR, invideo_filename)
30
+ pbar.update(25)
31
+ INAUDIO_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.mp3")
32
+ convert_mp4_to_mp3(INVIDEO_PATH,INAUDIO_PATH)
33
+ pbar.update(25)
34
  if not os.path.exists(SRT_PATH):
35
+ transcriber(INAUDIO_PATH, SRT_PATH, max_words_per_line)
36
+ pbar.update(25)
37
+ subtitler(INVIDEO_PATH, SRT_PATH, OUTVIDEO_PATH,fontsize, font, bg_color, text_color)
38
+ pbar.update(25)
39
  return
40
  INVIDEO_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.mp4")
41
+ INAUDIO_PATH = os.path.join(INVIDEO_DIR, f"{invideo_filename}.mp3")
42
+ if not os.path.exists(INAUDIO_PATH):
43
+ convert_mp4_to_mp3(INVIDEO_PATH,INAUDIO_PATH)
44
+ pbar.update(50)
45
  if not os.path.exists(SRT_PATH):
46
+ transcriber(INAUDIO_PATH, SRT_PATH, max_words_per_line)
47
+ pbar.update(25)
48
  subtitler(INVIDEO_PATH, SRT_PATH, OUTVIDEO_PATH, fontsize, font, bg_color, text_color)
49
+ pbar.update(25)
50
 
51
  if __name__ == '__main__':
52
  parser = ArgumentParser()
main.py CHANGED
@@ -2,7 +2,15 @@ from fastapi import FastAPI, UploadFile, File, HTTPException, Form
2
  from fastapi.responses import FileResponse, HTMLResponse
3
  from typing import Optional
4
  from utils.process_video import process_video
5
- import shutil, os
 
 
 
 
 
 
 
 
6
 
7
  app = FastAPI()
8
 
@@ -42,17 +50,19 @@ async def process_video_api(video_file: UploadFile = File(...),
42
  try:
43
  if not str(video_file.filename).endswith('.mp4'):
44
  raise HTTPException(status_code=400, detail="Invalid file type. Please upload an MP4 file.")
45
- # Create temp dir
46
  temp_dir = os.path.join(os.getcwd(),"temp")
47
  os.makedirs(temp_dir, exist_ok=True)
48
- temp_input_path = os.path.join(temp_dir, video_file.filename)
49
- # Copy video UploadFile to the temp_input_path
 
 
50
  with open(temp_input_path, 'wb') as buffer:
51
  try:
52
  shutil.copyfileobj(video_file.file, buffer)
53
  finally:
54
  video_file.file.close()
55
- # Copy srt UploadFile to the temp_input_path
56
  if srt_file.size > 0:
57
  SRT_PATH = os.path.abspath(f"{temp_input_path.split('.')[0]}.srt")
58
  with open(SRT_PATH, 'wb') as buffer:
@@ -60,14 +70,16 @@ async def process_video_api(video_file: UploadFile = File(...),
60
  shutil.copyfileobj(srt_file.file, buffer)
61
  finally:
62
  srt_file.file.close()
63
- # Process the video
64
  output_path = process_video(temp_input_path, SRT_PATH, max_words_per_line, fontsize, font, bg_color, text_color)
65
- return FileResponse(output_path, media_type="video/mp4", filename=f"result_{video_file.filename}")
66
- # Process the video
 
 
67
  output_path = process_video(temp_input_path, None, max_words_per_line, fontsize, font, bg_color, text_color)
68
- # FileResponse(output_path, media_type="text/srt", filename=f"result_{video_file.filename.split('.')[0]}.srt")
69
- # Return the processed video file
70
- return FileResponse(output_path, media_type="video/mp4", filename=f"result_{video_file.filename}")
71
 
72
  except Exception as e:
73
  raise HTTPException(status_code=500, detail=str(e))
 
2
  from fastapi.responses import FileResponse, HTMLResponse
3
  from typing import Optional
4
  from utils.process_video import process_video
5
+ from utils.zip_response import zip_response
6
+ import shutil, os, logging
7
+
8
+ logging.basicConfig(filename='main.log',
9
+ encoding='utf-8',
10
+ level=logging.DEBUG,
11
+ format='%(asctime)s %(levelname)s %(message)s',
12
+ datefmt='%m/%d/%Y %I:%M:%S %p')
13
+
14
 
15
  app = FastAPI()
16
 
 
50
  try:
51
  if not str(video_file.filename).endswith('.mp4'):
52
  raise HTTPException(status_code=400, detail="Invalid file type. Please upload an MP4 file.")
53
+ logging.info("Creating temporary directories")
54
  temp_dir = os.path.join(os.getcwd(),"temp")
55
  os.makedirs(temp_dir, exist_ok=True)
56
+ temp_vid_dir = os.path.join(temp_dir,video_file.filename.split('.')[0])
57
+ os.makedirs(temp_vid_dir, exist_ok=True)
58
+ temp_input_path = os.path.join(temp_vid_dir, video_file.filename)
59
+ logging.info("Copying video UploadFile to the temp_input_path")
60
  with open(temp_input_path, 'wb') as buffer:
61
  try:
62
  shutil.copyfileobj(video_file.file, buffer)
63
  finally:
64
  video_file.file.close()
65
+ logging.info("Copying SRT UploadFile to the temp_input_path")
66
  if srt_file.size > 0:
67
  SRT_PATH = os.path.abspath(f"{temp_input_path.split('.')[0]}.srt")
68
  with open(SRT_PATH, 'wb') as buffer:
 
70
  shutil.copyfileobj(srt_file.file, buffer)
71
  finally:
72
  srt_file.file.close()
73
+ logging.info("Processing the video...")
74
  output_path = process_video(temp_input_path, SRT_PATH, max_words_per_line, fontsize, font, bg_color, text_color)
75
+ logging.info("Archiving response...")
76
+ zip_path = zip_response(os.path.join(temp_vid_dir,"archive.zip"), [SRT_PATH, output_path])
77
+ return FileResponse(zip_path, media_type='application/zip', filename=f'result_{video_file.filename}.zip')
78
+ logging.info("Processing the video...")
79
  output_path = process_video(temp_input_path, None, max_words_per_line, fontsize, font, bg_color, text_color)
80
+ logging.info("Archiving response...")
81
+ zip_path = zip_response(os.path.join(temp_vid_dir,"archive.zip"), [SRT_PATH, output_path])
82
+ return FileResponse(zip_path, media_type='application/zip', filename=f'result_{video_file.filename}.zip')
83
 
84
  except Exception as e:
85
  raise HTTPException(status_code=500, detail=str(e))
utils/convert_mp4_to_mp3.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from moviepy.editor import VideoFileClip
2
+
3
+ def convert_mp4_to_mp3(mp4_file_path, mp3_file_path):
4
+ # Load the video file
5
+ video_clip = VideoFileClip(mp4_file_path)
6
+
7
+ # Extract the audio from the video clip
8
+ audio_clip = video_clip.audio
9
+
10
+ # Save the audio clip as an MP3 file
11
+ audio_clip.write_audiofile(mp3_file_path)
12
+
13
+ # Close the clips
14
+ audio_clip.close()
15
+ video_clip.close()
16
+ return mp3_file_path
utils/process_video.py CHANGED
@@ -1,6 +1,7 @@
1
  # Import necessary modules
2
  from utils.transcriber import transcriber
3
  from utils.subtitler import subtitler
 
4
  import logging, os
5
 
6
  # Set up logging
@@ -19,13 +20,16 @@ def process_video(invideo_filename:str,
19
  bg_color:str,
20
  text_color:str
21
  ):
22
- OUTVIDEO_PATH = os.path.join("temp/", "result.mp4")
 
23
  if srt_path:
24
  subtitler(invideo_filename, srt_path, OUTVIDEO_PATH, fontsize, font, bg_color, text_color)
25
  return OUTVIDEO_PATH
26
- SRT_PATH = os.path.abspath(f"{invideo_filename.split('.')[0]}.srt")
 
 
27
  if not os.path.exists(SRT_PATH):
28
- transcriber(invideo_filename, SRT_PATH, max_words_per_line)
29
  logging.info("Transcription Complete")
30
  subtitler(invideo_filename, SRT_PATH, OUTVIDEO_PATH, fontsize, font, bg_color, text_color)
31
  logging.info("Subtitling Complete")
 
1
  # Import necessary modules
2
  from utils.transcriber import transcriber
3
  from utils.subtitler import subtitler
4
+ from utils.convert_mp4_to_mp3 import convert_mp4_to_mp3
5
  import logging, os
6
 
7
  # Set up logging
 
20
  bg_color:str,
21
  text_color:str
22
  ):
23
+ VIDEO_NAME = invideo_filename.split('\\')[-1]
24
+ OUTVIDEO_PATH = os.path.join(invideo_filename.split('\\')[-3], invideo_filename.split('\\')[-2], f"result_{VIDEO_NAME}")
25
  if srt_path:
26
  subtitler(invideo_filename, srt_path, OUTVIDEO_PATH, fontsize, font, bg_color, text_color)
27
  return OUTVIDEO_PATH
28
+ INAUDIO_PATH = os.path.abspath(f"{invideo_filename.split('.')[0]}.mp3")
29
+ convert_mp4_to_mp3(invideo_filename, INAUDIO_PATH)
30
+ SRT_PATH = os.path.abspath(f"{invideo_filename.split('.')[0]}.srt")
31
  if not os.path.exists(SRT_PATH):
32
+ transcriber(INAUDIO_PATH, SRT_PATH, max_words_per_line)
33
  logging.info("Transcription Complete")
34
  subtitler(invideo_filename, SRT_PATH, OUTVIDEO_PATH, fontsize, font, bg_color, text_color)
35
  logging.info("Subtitling Complete")
utils/zip_response.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import zipfile, os
2
+
3
+ def zip_response(archive_name: str, files: list):
4
+ # Create a new zip file
5
+ with zipfile.ZipFile(archive_name, 'w') as zipf:
6
+ # Add specific files to the zip file
7
+ for file in files:
8
+ zipf.write(file, arcname=os.path.basename(file))
9
+ zipf.write(file, arcname=os.path.basename(file))
10
+ return archive_name