Spaces:
Sleeping
Sleeping
File size: 2,779 Bytes
93461a2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 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'] |