~ / Blog / AJA : transcrire un podcast avec Voxtral
Aujourd'hui j'ai appris (AJA) qu'on peut transcrire un podcast français en quelques lignes de Python avec Voxtral Mini 3B de Mistral (cocorico !).
Le modèle tourne en local. Pas de clé API. Pas de GPU NVIDIA. Ça marche sur un Mac M2 avec 24 Go de RAM.
Pour tester, j'ai transcrit un épisode de Silicon Carne. Le résultat est bluffant.
Les dépendances :
pip install -U "transformers>=4.54" torch accelerate \
"mistral-common[audio]" soxr librosa soundfile
Le modèle (~6 Go) se télécharge automatiquement depuis HuggingFace au premier lancement.
30 lignes :
import torch
import time
from transformers import VoxtralForConditionalGeneration, AutoProcessor
repo_id = "mistralai/Voxtral-Mini-3B-2507"
# Charger le processeur et le modèle
processor = AutoProcessor.from_pretrained(repo_id)
model = VoxtralForConditionalGeneration.from_pretrained(
repo_id,
dtype=torch.float16,
device_map="cpu",
low_cpu_mem_usage=True,
)
# Préparer la requête de transcription
inputs = processor.apply_transcription_request(
language="fr",
audio="silicon-carne.wav",
model_id=repo_id,
)
inputs = inputs.to("cpu")
# Générer la transcription
t0 = time.time()
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=2000)
print(f"Transcription en {time.time() - t0:.1f}s")
# Décoder et afficher
decoded = processor.batch_decode(
outputs[:, inputs.input_ids.shape[1]:],
skip_special_tokens=True,
)
print(decoded[0])
Voxtral attend du WAV 16 kHz.
Si la source est un MP3, on convertit avec librosa :
import librosa
import soundfile as sf
y, sr = librosa.load("episode.mp3", sr=16000, duration=120) # 2 premières minutes
sf.write("episode.wav", y, sr)
J'ai limité à 2 minutes pour garder un temps d'inférence raisonnable sur CPU. Sur GPU, on peut aller beaucoup plus loin.
Les 2 premières minutes de l'épisode « Les travailleurs vont-ils être remplacés par des IA ? » du 26 février 2026. Zéro retouche :
Aujourd'hui dans Silicon Carnet, on parle de la Silicon Valley qui est persuadée que les CEOs seront remplacés par des intelligences artificielles. Sam Altman, Cidipre et Elon Musk lancent Macrohard, une société sans aucun employé, capable de rivaliser avec Microsoft. Et si Karl Marx s'était trompé sur qui allait vraiment être remplacé par les machines, on parle du futur du travail avec Eric Gervais, ancien partenaire chez Atti Carney aux US, maintenant artiste peintre.
On évoque également SeDance 2.0, cette IA chinoise qui fait trembler Hollywood. On a tous vu ces vidéos avec Brad Pitt ou Tom Cruise, sauf que les intéressés n'avaient pas donné leur accord. Disney panique, envoie ses avocats et Matthew McConaughey, lui, il y voit une opportunité en or. On demandera à Greg Gambateau si c'est la fin du cinéma ou le début de quelque chose de beaucoup plus grand.
Mais avant cela, on a peut-être mis le doigt sur une des plus grosses failles de sécurité sur ChatGPT. C'est Johan Sido, auditeur fidèle de Silicon Carnet, qui nous a alertés. Du coup, on lui a dit de venir nous en parler dans le show. Il va vous expliquer ce qui se passe vraiment quand vous prenez un selfie pour vérifier votre identité. Et on demandera à Jérémy Michel si tout ça ne cache pas une machine de surveillance de masse.
Bienvenue dans Silicon Carnet, le plus grand talk show tech de France en direct de San Francisco. L'émission commence maintenant.
Bonjour les amis, bonjour, comment allez-vous ? Une grosse émission, ça va débattre et on accueille aujourd'hui Johan Sido, le pauvre, il est terrorisé, c'est pas ce qu'il vient foutre là. Je lui dis clairement, je sais pas ce qu'il fout ici, juste à faire un message LinkedIn, vraiment. Voilà, explique-nous Johan. En fait, ce que t'as fait, c'est que tu as eu la très mauvaise idée de nous envoyer un message sur LinkedIn. Tu es un jeune qui autodidacte, qui s'intéresse aux questions de sécurité, c'est ça ? Tu viens même de monter ta propre...
Si le cloud ne vous dérange pas, l'API fait la même chose en 4 lignes. Avec la diarisation et les timestamps en bonus.
from mistralai import Mistral
client = Mistral(api_key="votre-cle")
with open("episode.mp3", "rb") as f:
result = client.audio.transcriptions.complete(
model="voxtral-mini-latest",
file={"content": f, "file_name": "episode.mp3"},
language="fr",
diarize=True,
timestamp_granularities=["word"],
)
print(result.text)
$0.003/minute. Soit ~$0.35 pour un épisode d'une heure.
Voxtral est un modèle de transcription sérieux. Ça tourne en local, c'est open-source, le français est supporté nativement. La qualité est quasi-professionnelle.