Ema_Chatbot / Components /video_utility.py
K Mohith Goud
Adding repo from Git hub Account of Mohith202
93461a2
Raw
History Blame Contribute Delete
2.78 kB
import tempfile
import os
from moviepy.editor import VideoFileClip
from whisper import load_model # Importing Whisper AI
def save_uploaded_video(uploaded_file):
"""Save the uploaded video file to a temporary location."""
try:
temp_dir = tempfile.mkdtemp()
# Check if uploaded_file is a string (path) or has an attribute 'name' (file-like object)
if isinstance(uploaded_file, str):
video_file_path = uploaded_file # Assume it's a direct path to the file
else:
video_file_path = os.path.join(temp_dir, uploaded_file.name)
# Save the uploaded video file to the temporary directory
with open(video_file_path, "wb") as f:
f.write(uploaded_file.getbuffer())
# Check if the file was saved successfully
if not os.path.exists(video_file_path):
raise FileNotFoundError(f"Failed to save video file: {video_file_path}")
print(f"Saving video to {video_file_path}") # Add debug print to confirm path
return video_file_path
except Exception as e:
raise RuntimeError(f"An error occurred while saving the video file: {e}")
def extract_audio_from_video(video_file):
"""Extract audio from the video file and save it as a WAV file."""
audio_file = "temp_audio.wav"
print(f"Extracting audio from {video_file} to {audio_file}") # Add debug print to confirm path
try:
if not os.path.exists(video_file):
raise FileNotFoundError(f"Video file not found: {video_file}")
with VideoFileClip(video_file) as video:
video.audio.write_audiofile(audio_file, codec='pcm_s16le')
if not os.path.exists(audio_file):
raise FileNotFoundError(f"Failed to extract audio file: {audio_file}")
print(f"Extracting audio to {audio_file}") # Add debug print to confirm path
return audio_file
except Exception as e:
raise RuntimeError(f"An error occurred while extracting audio: {e}")
def process_video_voice(video_file):
"""Process the video file to extract voice and return the recognized text."""
print(f"Processing video file: {video_file}") # Add debug print to confirm path
saved_video_file = save_uploaded_video(video_file)
print(f"Saved video file: {saved_video_file}") # Add debug print to confirm path
audio_file = extract_audio_from_video(saved_video_file)
print(f"Extracted audio file: {audio_file}") # Add debug print to confirm path
if not os.path.exists(saved_video_file):
raise FileNotFoundError(f"Video file not found: {video_file}")
model = load_model("small")
result = model.transcribe(audio_file)
return result['text']