Spaces:
Sleeping
Sleeping
File size: 1,867 Bytes
6588ad0 8625430 af70ba1 8625430 41557b5 f462b2c af70ba1 29bd054 6588ad0 29bd054 6588ad0 29bd054 e407e34 29bd054 e407e34 29bd054 6588ad0 29bd054 6588ad0 29bd054 e407e34 9d915ef f462b2c 9d915ef 29bd054 41557b5 ac31d19 9c20e94 af70ba1 29bd054 9d915ef 29bd054 e407e34 |
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 |
from flask import Flask, request, render_template, redirect, url_for
import os
from moviepy.editor import VideoFileClip
import whisper
app = Flask(__name__)
# Configure the maximum content length for uploads (500 MB)
app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024 * 500 # 500 MB limit
# Load the Whisper model
model = whisper.load_model("base")
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload_video():
if 'video' not in request.files:
return redirect(url_for('index'))
video_file = request.files['video']
if video_file.filename == '':
return redirect(url_for('index'))
# Save the video file
video_path = os.path.join('uploads', video_file.filename)
video_file.save(video_path)
try:
# Extract audio from the video
audio_path = extract_audio(video_path)
# Transcribe the audio
transcript = transcribe_audio(audio_path)
except Exception as e:
return f"Error: {e}"
return render_template('result.html', transcript=transcript)
def extract_audio(video_path):
audio_path = os.path.splitext(video_path)[0] + ".wav"
try:
# Use a temporary file to reduce the load on memory
with VideoFileClip(video_path) as video:
video.audio.write_audiofile(audio_path)
except Exception as e:
raise RuntimeError(f"Error extracting audio: {e}")
return audio_path
def transcribe_audio(audio_path):
if not os.path.exists(audio_path):
raise FileNotFoundError(f"Audio file not found at {audio_path}")
try:
result = model.transcribe(audio_path)
return result["text"]
except Exception as e:
raise RuntimeError(f"Error during transcription: {e}")
if __name__ == '__main__':
app.run(debug=False, host='0.0.0.0', port=7860) |