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)