Update app.py
Browse filesCorrection de la fonction extract_audio
app.py
CHANGED
|
@@ -111,23 +111,26 @@ def load_model(name):
|
|
| 111 |
# ---------------------------- # AUDIO EXTRACTION & CLEANING (ROBUSTE) # ----------------------------
|
| 112 |
def extract_audio(video_path, out_wav):
|
| 113 |
"""
|
| 114 |
-
Extrait l'audio en deux étapes pour stabiliser le fichier webcam/corrompu
|
|
|
|
| 115 |
"""
|
| 116 |
# Chemin du fichier intermédiaire stabilisé
|
| 117 |
tmp_fd, stabilized_mp4 = tempfile.mkstemp(suffix="_stabilized.mp4")
|
| 118 |
os.close(tmp_fd)
|
| 119 |
|
| 120 |
-
# ÉTAPE 1: Stabilisation
|
| 121 |
-
#
|
| 122 |
remux_cmd = (
|
| 123 |
f'ffmpeg -hide_banner -loglevel error -y '
|
| 124 |
f'-analyzeduration 2147483647 -probesize 2147483647 -ignore_unknown '
|
| 125 |
-
f'-i {shlex.quote(video_path)}
|
|
|
|
|
|
|
| 126 |
)
|
| 127 |
-
print("RUN:
|
| 128 |
run_cmd(remux_cmd)
|
| 129 |
|
| 130 |
-
# ÉTAPE 2: Extraction de l'audio 16k WAV
|
| 131 |
extract_cmd = (
|
| 132 |
f'ffmpeg -hide_banner -loglevel error -y '
|
| 133 |
f'-i {shlex.quote(stabilized_mp4)} -vn -ac 1 -ar 16000 -f wav {shlex.quote(out_wav)}'
|
|
@@ -135,10 +138,10 @@ def extract_audio(video_path, out_wav):
|
|
| 135 |
print("RUN: Extraction de l'audio depuis le fichier stabilisé...")
|
| 136 |
run_cmd(extract_cmd)
|
| 137 |
|
| 138 |
-
# Nettoyage
|
| 139 |
if os.path.exists(stabilized_mp4):
|
| 140 |
os.remove(stabilized_mp4)
|
| 141 |
-
|
| 142 |
def clean_audio(wav_path, target_sr=16000):
|
| 143 |
"""Load audio, ensure mono, resample to target_sr, normalize, write cleaned wav."""
|
| 144 |
audio, sr = sf.read(wav_path)
|
|
|
|
| 111 |
# ---------------------------- # AUDIO EXTRACTION & CLEANING (ROBUSTE) # ----------------------------
|
| 112 |
def extract_audio(video_path, out_wav):
|
| 113 |
"""
|
| 114 |
+
Extrait l'audio en deux étapes pour stabiliser le fichier webcam/corrompu.
|
| 115 |
+
Correction : On réencode en libx264 car MP4 ne supporte pas le VP8 (Webcam).
|
| 116 |
"""
|
| 117 |
# Chemin du fichier intermédiaire stabilisé
|
| 118 |
tmp_fd, stabilized_mp4 = tempfile.mkstemp(suffix="_stabilized.mp4")
|
| 119 |
os.close(tmp_fd)
|
| 120 |
|
| 121 |
+
# ÉTAPE 1: Stabilisation avec RÉENCODAGE (obligatoire pour la compatibilité WebM -> MP4)
|
| 122 |
+
# On utilise -c:v libx264 au lieu de -c copy
|
| 123 |
remux_cmd = (
|
| 124 |
f'ffmpeg -hide_banner -loglevel error -y '
|
| 125 |
f'-analyzeduration 2147483647 -probesize 2147483647 -ignore_unknown '
|
| 126 |
+
f'-i {shlex.quote(video_path)} '
|
| 127 |
+
f'-c:v libx264 -preset ultrafast -crf 23 -c:a aac '
|
| 128 |
+
f'{shlex.quote(stabilized_mp4)}'
|
| 129 |
)
|
| 130 |
+
print("RUN: Conversion et stabilisation du flux (Webcam compatible)...")
|
| 131 |
run_cmd(remux_cmd)
|
| 132 |
|
| 133 |
+
# ÉTAPE 2: Extraction de l'audio 16k WAV
|
| 134 |
extract_cmd = (
|
| 135 |
f'ffmpeg -hide_banner -loglevel error -y '
|
| 136 |
f'-i {shlex.quote(stabilized_mp4)} -vn -ac 1 -ar 16000 -f wav {shlex.quote(out_wav)}'
|
|
|
|
| 138 |
print("RUN: Extraction de l'audio depuis le fichier stabilisé...")
|
| 139 |
run_cmd(extract_cmd)
|
| 140 |
|
| 141 |
+
# Nettoyage
|
| 142 |
if os.path.exists(stabilized_mp4):
|
| 143 |
os.remove(stabilized_mp4)
|
| 144 |
+
|
| 145 |
def clean_audio(wav_path, target_sr=16000):
|
| 146 |
"""Load audio, ensure mono, resample to target_sr, normalize, write cleaned wav."""
|
| 147 |
audio, sr = sf.read(wav_path)
|