<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Montage Audio on Boris Dupoux</title><link>https://borisdupoux.com/fr/tags/montage-audio/</link><description>Recent content in Montage Audio on Boris Dupoux</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Mon, 01 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://borisdupoux.com/fr/tags/montage-audio/index.xml" rel="self" type="application/rss+xml"/><item><title>De l'enregistrement multipiste à la timeline éditable : transcription, diarisation et export AAF</title><link>https://borisdupoux.com/fr/research/speech-to-edit/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><guid>https://borisdupoux.com/fr/research/speech-to-edit/</guid><description>&lt;h2 id="contexte"&gt;&lt;a href="#contexte" class="header-anchor"&gt;&lt;/a&gt;Contexte
&lt;/h2&gt;&lt;p&gt;Une conférence enregistrée sur plusieurs microphones (intervenants, salle,
musique) produit des heures d&amp;rsquo;audio multipiste brut. L&amp;rsquo;essentiel du temps de
montage est consacré à repérer la matière — qui parle quand, sur quelle piste,
où se trouvent les silences — avant toute coupe.&lt;/p&gt;
&lt;p&gt;Les outils vocaux open source (Whisper et ses dérivés, pyannote, Silero VAD)
résolvent bien la transcription et la question « qui a parlé quand », mais
s&amp;rsquo;arrêtent au &lt;strong&gt;texte&lt;/strong&gt;. La question traitée ici est de savoir si cette analyse
peut être livrée sous la forme d&amp;rsquo;un &lt;strong&gt;objet de montage&lt;/strong&gt; : une timeline
multipiste au format AAF, le format d&amp;rsquo;échange que les stations audionumériques
ouvrent nativement, avec des pistes qualifiées et les temps morts supprimés.&lt;/p&gt;
&lt;h2 id="avant--après"&gt;&lt;a href="#avant--apr%c3%a8s" class="header-anchor"&gt;&lt;/a&gt;Avant → après
&lt;/h2&gt;&lt;p&gt;Un vrai projet traité de bout en bout : une conférence enregistrée sur
&lt;strong&gt;16 pistes&lt;/strong&gt;. Toute la colonne de droite est produite automatiquement, sans
aucune coupe manuelle ; les chiffres sont lus dans la base d&amp;rsquo;analyse du projet
et dans l&amp;rsquo;AAF livré. Ce projet a été transcrit avec WhisperX (avec diarisation
pyannote), et non avec faster-whisper. La qualité du montage n&amp;rsquo;a pas encore été
évaluée face à un montage humain (n = 1 conférence).&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;Entrée (enregistrement brut)&lt;/th&gt;
					&lt;th&gt;Sortie générée (timeline AAF)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Pistes&lt;/td&gt;
					&lt;td&gt;16 × 1 h 32 min 54 s (≈ 24 h 46 min d&amp;rsquo;audio) ; 10 des 16 pistes étaient quasi silencieuses au niveau numérique, 6 portaient du signal (≈ 9 h 17 min)&lt;/td&gt;
					&lt;td&gt;16 pistes conservées dans l&amp;rsquo;AAF, dont 6 portent des clips&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Rôles des pistes&lt;/td&gt;
					&lt;td&gt;4 parole · 2 musique (dont une détectée comme ambiance) · 10 silencieuses&lt;/td&gt;
					&lt;td&gt;10 pistes silencieuses laissées vides, sans tri manuel&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Matière&lt;/td&gt;
					&lt;td&gt;204 régions de parole et 5 passages musicaux détectés&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;41 clips&lt;/strong&gt; (37 parole, 4 musique)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Coupes&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;40 coupes franches&lt;/strong&gt; entre sources, dont 33 changements de micro&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Transitions&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;0 fondu enchaîné : coupes franches, chaque clip de parole prolongé de 0,3 s&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Temps morts&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;début et fin rognés et un trou interne de 16 s supprimé (36,9 s au total) ; timeline de 1 h 32 min 17 s&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="Avant/après multipiste : les 16 pistes d’entrée colorées par rôle dans le temps, et le montage généré montrant la piste retenue pour chaque segment, avec les changements de source marqués" class="gallery-image" data-flex-basis="333px" data-flex-grow="138" height="1152" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://borisdupoux.com/fr/research/speech-to-edit/multitrack-before-after.fr.png" srcset="https://borisdupoux.com/fr/research/speech-to-edit/multitrack-before-after.fr_hu_ed7871e33c6cf34f.png 800w, https://borisdupoux.com/fr/research/speech-to-edit/multitrack-before-after.fr.png 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;En haut : les 16 pistes d&amp;rsquo;entrée sur toute la durée de l&amp;rsquo;enregistrement,
colorées selon le rôle et l&amp;rsquo;activité détectés ; les quatre micros de parole
sont actifs presque en permanence, car chacun capte aussi ses voisins. En bas :
le montage généré, une ligne par piste comme dans l&amp;rsquo;AAF — une seule source est
retenue à chaque instant, les repères marquent les 40 changements de source,
les zones hachurées du panneau supérieur sont les temps morts supprimés.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Les clips de parole sont peu nombreux et longs (médiane 79 s, le plus long
10 min 11 s) : le montage suit l&amp;rsquo;intervenant actif au lieu de couper à chaque
respiration, et les micro-bascules de moins de 0,8 s sont absorbées par le
lissage anti-papillotement. Dix clips durent encore moins de 6 s — de brèves
interjections, premier endroit à vérifier lors de la relecture du montage.&lt;/p&gt;
&lt;p&gt;Les pistes silencieuses ont tout de même produit des hallucinations types de
Whisper dans leurs transcriptions brutes ; elles sont exclues du montage par la
classification des pistes.&lt;/p&gt;
&lt;h2 id="approche"&gt;&lt;a href="#approche" class="header-anchor"&gt;&lt;/a&gt;Approche
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB
 A["Enregistrement WAV multipiste"] --&gt; B["Décodage en mono 16 kHz + énergie RMS par 100 ms"]
 B --&gt; C["Détection d'activité vocale (Silero)"]
 C --&gt; D["Transcription (Whisper large-v3, par segments)"]
 D --&gt; E["Alignement forcé des mots (WhisperX / wav2vec2)"]
 C --&gt; F["Diarisation des locuteurs (pyannote)"]
 E --&gt; G["Attribution des locuteurs + post-traitement des segments"]
 F --&gt; G
 B --&gt; H["Rôle de la piste : parole / musique / silence"]
 G --&gt; H
 H --&gt; I["Montage : micro actif par trame de 100 ms"]
 I --&gt; J["Export AAF (lié aux noms WAV d'origine)"]
 I --&gt; K["Mixage mono WAV"]&lt;/pre&gt;&lt;h2 id="méthodes"&gt;&lt;a href="#m%c3%a9thodes" class="header-anchor"&gt;&lt;/a&gt;Méthodes
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Transcription.&lt;/strong&gt; Whisper &lt;code&gt;large-v3&lt;/code&gt;, soit via WhisperX (utilisé pour l&amp;rsquo;étude
de cas ci-dessus), soit via faster-whisper (CTranslate2). La voie faster-whisper
s&amp;rsquo;exécute sur des segments de longueur fixe dans un processus de travail isolé et
persistant : le modèle n&amp;rsquo;est chargé qu&amp;rsquo;une fois, et un plantage natif ne fait
perdre qu&amp;rsquo;un segment, signalé plutôt qu&amp;rsquo;ignoré silencieusement. Le décodage
utilise une recherche en faisceau avec filtrage Silero VAD, et
&lt;code&gt;condition_on_previous_text&lt;/code&gt; est désactivé pour limiter les boucles de
répétition.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Horodatage des mots et locuteurs.&lt;/strong&gt; Les horodatages au niveau du mot
proviennent de l&amp;rsquo;alignement forcé de WhisperX (wav2vec2). Les tours de parole
proviennent de la diarisation pyannote et sont attribués aux mots par
recouvrement temporel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Post-traitement.&lt;/strong&gt; Des filtres purs suppriment les hallucinations connues de
Whisper (crédits de sous-titrage types, formules du genre « merci d&amp;rsquo;avoir
regardé », segments purement musicaux), les sorties en écriture non latine sur
de l&amp;rsquo;audio français et les doublons, puis fusionnent les segments consécutifs
d&amp;rsquo;un même locuteur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qualification des pistes et montage.&lt;/strong&gt; Chaque piste est classée en parole,
musique ou silence en combinant l&amp;rsquo;énergie par trame, la couverture VAD et des
statistiques de transcription. Le montage sélectionne, par trame de 100 ms,
le microphone en s&amp;rsquo;appuyant sur le rapport signal sur bruit de chaque segment
de parole au-dessus du bruit de fond de la piste (ce qui réduit la diaphonie
entre micros), applique un lissage anti-papillotement et resserre la timeline en
supprimant les temps morts globaux.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Synchronisation.&lt;/strong&gt; Les enregistreurs distincts sont alignés en appariant des
mots caractéristiques entre transcriptions (médiane robuste des décalages),
après un placement grossier fondé sur l&amp;rsquo;horloge et corrigé de la dérive
d&amp;rsquo;horloge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Export.&lt;/strong&gt; La liste de montage est écrite sous forme d&amp;rsquo;AAF multipiste avec
&lt;code&gt;pyaaf2&lt;/code&gt;, en intégrant l&amp;rsquo;audio ou en le référençant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Déploiement.&lt;/strong&gt; Un portail web reçoit les tâches et un nœud de calcul distinct
l&amp;rsquo;interroge en HTTPS. Les clients ne téléversent que des copies d&amp;rsquo;analyse
compressées accompagnées d&amp;rsquo;un manifeste de leurs fichiers d&amp;rsquo;origine ; l&amp;rsquo;AAF
livré référence les &lt;strong&gt;noms des WAV d&amp;rsquo;origine&lt;/strong&gt;, de sorte que le monteur
reconnecte localement les sources en pleine qualité et que les originaux ne
quittent jamais la machine du client.&lt;/p&gt;
&lt;h2 id="résultats"&gt;&lt;a href="#r%c3%a9sultats" class="header-anchor"&gt;&lt;/a&gt;Résultats
&lt;/h2&gt;&lt;p&gt;Banc d&amp;rsquo;essai (&lt;code&gt;bench_stt.py&lt;/code&gt;) sur de l&amp;rsquo;audio réel de conférence issu d&amp;rsquo;un autre
enregistrement à sept pistes, distinct de l&amp;rsquo;étude de cas à 16 pistes ci-dessus : fenêtres de
parole d&amp;rsquo;une minute sélectionnées par VAD sur quatre pistes de parole, Whisper
&lt;code&gt;large-v3&lt;/code&gt; dans tous les cas, ordinateur portable Apple Silicon, mesures à
chaud hors chargement du modèle. Aucune transcription de référence n&amp;rsquo;étant
disponible, les indicateurs de qualité sont des &lt;strong&gt;divergences par rapport à
une pseudo-référence&lt;/strong&gt; (sortie de WhisperX), et non des erreurs absolues.&lt;/p&gt;
&lt;p&gt;Facteurs temps réel (4 × 1 min, une seule exécution ; réglages de décodage propres à chaque chaîne) :&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Chaîne de traitement (CPU)&lt;/th&gt;
					&lt;th style="text-align: right"&gt;Facteur temps réel&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;openai-whisper&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0,43&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WhisperX&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0,51&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WhisperX + alignement forcé&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0,54&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;openai-whisper + horodatage des mots&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0,57&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;faster-whisper (faisceau 5 + VAD)&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0,66&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;faster-whisper + horodatage des mots&lt;/td&gt;
					&lt;td style="text-align: right"&gt;0,70&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Horodatage des mots :&lt;/strong&gt; les horodatages natifs s&amp;rsquo;écartent de l&amp;rsquo;alignement
forcé d&amp;rsquo;environ 205 ms en médiane (faster-whisper) et d&amp;rsquo;environ 210 ms
(openai-whisper) ; l&amp;rsquo;alignement forcé ajoute environ 1,2 s par minute
d&amp;rsquo;audio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Divergence des transcriptions :&lt;/strong&gt; 7 à 11 % de divergence au niveau du mot
entre chaînes (pseudo-référence, 4 extraits d&amp;rsquo;une minute de l&amp;rsquo;autre
enregistrement à 7 pistes). La mesure retire la casse et la ponctuation :
après inspection manuelle, l&amp;rsquo;écart tient surtout au découpage des mots, à
l&amp;rsquo;orthographe des noms propres et aux effets de bord des extraits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Répétitions :&lt;/strong&gt; 1,1 à 2,4 % de contenu répété ; aucun passage halluciné
observé sur ces extraits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Détection des pistes :&lt;/strong&gt; les trois pistes de musique ou de silence de
l&amp;rsquo;enregistrement à sept pistes ont été identifiées par VAD et écartées
automatiquement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="limites--suite"&gt;&lt;a href="#limites--suite" class="header-anchor"&gt;&lt;/a&gt;Limites &amp;amp; suite
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;La qualité est mesurée par rapport à une pseudo-référence ; un jeu de test
transcrit manuellement est nécessaire pour rapporter un véritable taux
d&amp;rsquo;erreur sur les mots et un taux d&amp;rsquo;erreur de diarisation.&lt;/li&gt;
&lt;li&gt;La qualité du montage n&amp;rsquo;a pas encore été évaluée face à un montage humain
(n = 1 conférence).&lt;/li&gt;
&lt;li&gt;Les extraits du banc d&amp;rsquo;essai sont courts (une minute par piste) et ne
comportent qu&amp;rsquo;un seul locuteur par fenêtre : la précision de la diarisation
en cas de chevauchement de plusieurs locuteurs n&amp;rsquo;est donc pas encore
quantifiée.&lt;/li&gt;
&lt;li&gt;CTranslate2 n&amp;rsquo;a pas de backend Metal : sur Apple Silicon, faster-whisper et
WhisperX s&amp;rsquo;exécutent sur CPU, tandis que CUDA est utilisé lorsqu&amp;rsquo;il est
disponible. Le choix du matériel pour chaque étape a été mesuré plutôt que
présumé ; une comparaison sous CUDA reste à effectuer.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;export AAF cible l&amp;rsquo;import dans Logic Pro ; les autres logiciels de montage
n&amp;rsquo;ont pas été testés de manière systématique.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stack-technique"&gt;&lt;a href="#stack-technique" class="header-anchor"&gt;&lt;/a&gt;Stack technique
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Python&lt;/code&gt; · &lt;code&gt;faster-whisper&lt;/code&gt; · &lt;code&gt;CTranslate2&lt;/code&gt; · &lt;code&gt;WhisperX&lt;/code&gt; · &lt;code&gt;pyannote.audio&lt;/code&gt; · &lt;code&gt;Silero VAD&lt;/code&gt; · &lt;code&gt;PyTorch (MPS / CUDA)&lt;/code&gt; · &lt;code&gt;ffmpeg&lt;/code&gt; · &lt;code&gt;pyaaf2&lt;/code&gt; · &lt;code&gt;SQLite&lt;/code&gt; · &lt;code&gt;PHP&lt;/code&gt; · &lt;code&gt;MySQL&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>