dieumercimvemba commited on
Commit
62027aa
·
verified ·
1 Parent(s): 89d6539

Update data/generate_subtitles.py

Browse files
Files changed (1) hide show
  1. data/generate_subtitles.py +8 -19
data/generate_subtitles.py CHANGED
@@ -2,43 +2,32 @@
2
  import sys
3
  import stable_whisper
4
  import json
5
- import os
6
 
7
  def run():
8
- # On attend 3 arguments : l'audio, le SRT de sortie, et le TEXTE ORIGINAL
9
  if len(sys.argv) < 4:
10
- error = {"status": "error", "message": "Usage: python3 generate_subtitles.py <input_audio> <output_srt> <original_text>"}
11
- print(json.dumps(error))
12
  sys.exit(1)
13
 
14
  input_audio = sys.argv[1]
15
- output_srt = sys.argv[2]
16
  original_text = sys.argv[3]
17
 
18
  try:
19
- # 1. Chargement de stable-whisper (plus précis pour le timing)
20
  model = stable_whisper.load_model("base")
21
 
22
- # 2. Transcription forcée avec le texte original (initial_prompt)
23
- # Cela empêche Whisper d'inventer des mots si Tacotron prononce mal
24
  result = model.transcribe(
25
  input_audio,
26
  language="fr",
27
  initial_prompt=original_text,
28
- vad=True # Détecte le silence pour s'arrêter pile quand l'audio finit
29
  )
30
 
31
- # 3. Génération du SRT avec balises Karaoké (word_level=True)
32
- # C'est ce paramètre qui permet au bleu de défiler mot par mot
33
- result.to_srt_vtt(output_srt, word_level=True)
34
 
35
- # Réponse JSON pour n8n
36
- response = {
37
- "status": "success",
38
- "output_file": output_srt,
39
- "text_detected": result.text
40
- }
41
- print(json.dumps(response))
42
 
43
  except Exception as e:
44
  print(json.dumps({"status": "error", "message": str(e)}))
 
2
  import sys
3
  import stable_whisper
4
  import json
 
5
 
6
  def run():
 
7
  if len(sys.argv) < 4:
8
+ print(json.dumps({"status": "error", "message": "Usage: python3 script.py <audio> <output_ass> <text>"}))
 
9
  sys.exit(1)
10
 
11
  input_audio = sys.argv[1]
12
+ output_ass = sys.argv[2]
13
  original_text = sys.argv[3]
14
 
15
  try:
 
16
  model = stable_whisper.load_model("base")
17
 
18
+ # Alignement avec le texte original
 
19
  result = model.transcribe(
20
  input_audio,
21
  language="fr",
22
  initial_prompt=original_text,
23
+ vad=True
24
  )
25
 
26
+ # Génération du fichier .ass (format Karaoké pro)
27
+ # word_level=True crée les balises de timing individuelles
28
+ result.to_ass(output_ass, word_level=True)
29
 
30
+ print(json.dumps({"status": "success", "output_file": output_ass}))
 
 
 
 
 
 
31
 
32
  except Exception as e:
33
  print(json.dumps({"status": "error", "message": str(e)}))