Différences entre les versions de « Tutoriel transcriptions »

De April MediaWiki
Aller à la navigationAller à la recherche
(Nouvelle page : Catégorie:Transcriptions =Tutoriel du groupe Transcriptions=)
 
Ligne 2 : Ligne 2 :
  
 
=Tutoriel du groupe Transcriptions=
 
=Tutoriel du groupe Transcriptions=
 +
 +
==Modes opératoires et conseils techniques==
 +
 +
=== Liens et programmes utiles ===
 +
 +
* [http://www.mplayerhq.hu/design7/news.html Mplayer] lit la plupart des formats vidéo utilisés; je ne pense pas qu'un autre programme libre en lise certains que lui ne sait pas lire. Il est (désormais) packagé par Debian. Il y a apparemment des questions compliquées de codes disponibles mais pas libres.
 +
* Un navigateur web en mode texte comme [http://w3m.sourceforge.net/ w3m] (packagé par Debian) est parfois bien pratique.
 +
* Les URL débutant par ''itpc://''... ??? '''TODO'''.  Exemple: [http://www.cnam.fr/mediascnam/Podcast/2007/070222_QSVV_LogicielsLibres.html 1] sur la page [http://www.cnam.fr/1172652110891/0/fiche___actualite/ 2].
 +
* Les URL débutant par ''mms://'' se téléchargent avec le programme ''mimms'' (packagé par Debian).
 +
* Les URL débutant par ''rtsp://''... Apparemment le paquet Debian ''livemedia-utils'' et son programme ''openRTSP'' se chargent de cela, mais je n'ai pas réussi à le faire fonctionner. ???  '''TODO'''. Exemple: [rtsp://212.95.67.121:554/permanent/c6/promos/070619_fr.rmvb?cloakport=80,554,7070 1] vu sur [http://stream.arte-tv.com/ramgen/permanent/c6/promos/070619_fr.rmvb 2] vu sur [http://www.arte.tv/fr/histoire-societe/Tous-fiches/1588398.html 3].
 +
* Un flux RSS mentionne l'URL du média. Exemple: [http://www.cnam.fr/mediascnam/Podcast/2007/070222_QSVV_LogicielsLibres.xml 1] trouvé sur la page [http://www.cnam.fr/1172652110891/0/fiche___actualite/ 2] mentionne [http://www.cnam.fr/mediascnam/Podcast/2007/070222_QSVV_LogicielsLibres.mp3 3] (lien désormais cassé...).
 +
* Les URL débutant par ''pnm://''...??? '''TODO''' Exemple: [pnm://212.95.67.121:7070/permanent/c6/promos/070619_fr.rmvb?cloakport=80,554,7070 1] vu sur [http://stream.arte-tv.com/ramgen/permanent/c6/promos/070619_fr.rmvb 2] vu sur [http://www.arte.tv/fr/histoire-societe/Tous-fiches/1588398.html 3].
 +
* '''TODO''': comment télécharger les vidéos annoncées au format RealPlayer? Exemple: [http://www.cnam.fr/mediascnam/Conferences/2007/070222_QSVV_LogicielsLibres_800x500_RealLD.htm 1] trouvé sur la page [http://www.cnam.fr/1172652110891/0/fiche___actualite/ 2].
 +
* [http://validator.w3.org/ Validation XHTML].
 +
* [http://jigsaw.w3.org/css-validator Validation CSS].
 +
 +
=== Méthode générale ===
 +
 +
Traitons par exemple le cas d'un podcast.
 +
 +
Utiliser le navigateur Firefox et installer l'extension Firebug.
 +
 +
Dans la sous-fenêtre de Firebug, onglet ''Net'', on voit dans la liste un nom de fichier (''nom_de_fichier.mp3''). Clic droit, ''Copy Location''. Ça semble fonctionner avec Youtube et de nombreux sites.
 +
 +
Description plus détaillée: [http://www.poucet.net/web/spip.php?article168 Télécharger n'importe quel contenu sur les sites de diffusions de vidéos et MP3].
 +
 +
=== Connaître la durée d'un document ===
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Format
 +
!  Extension
 +
!  Commande
 +
|-
 +
|  Ogg Vorbis ou Ogg Theora
 +
|  ''.ogg''
 +
|  ''ogginfo''
 +
|-
 +
|  MPEG, AVI
 +
|  ''.mp3'', ''.mp4'', ''.mpg'', ''.avi''
 +
|  ''mplayer -identify''; chercher ''ID_LENGTH'' (valeur exprimée en secondes); ne disposer que du début du fichier suffit parfois
 +
|-
 +
|  Général
 +
|  ''.xxx''
 +
|  Approximation avec: ''time'' ''player'' ''fichier''
 +
|}
 +
 +
=== Programmes d'assistance à la transcription ===
 +
 +
==== Trans ====
 +
 +
Le programme ''trans'' du paquet Debian ''transcriber'' semble riche et prometteur. Si quelqu'un apprend à s'en servir et peut expliquer comment procéder efficacement, ses conseils seront les bienvenus ('''TODO'''). Attention, la page web du projet donnée dans la documentation a disparu; le projet est désormais [http://sourceforge.net/projects/trans/ hébergé sur Sourceforge].
 +
 +
==== Programme temporel simple ====
 +
 +
Le programme [bin/Play.pl Play.pl] permet de jouer des petites portions (intervalles) d'un média afin de les transcrire au fur et à mesure. Il dispose d'options d'ergonomie. Il joue le fichier indiqué dans la variable d'environnement ''MEDIA_FILE''. Les valeurs des variables utilisées sont rappelées dans un ''xmessage''.
 +
 +
On pourra l'interfacer avec l'éditeur de textes VIM en insérant les lignes suivantes dans son fichier de configuration:
 +
 +
<pre>
 +
" To use for transcriptions
 +
:map &lt;F1&gt; !!perl ~/bin/Play.pl GotoPreviousInterval&lt;CR&gt;
 +
:map &lt;F2&gt; !!perl ~/bin/Play.pl PlayCurrentInterval&lt;CR&gt;
 +
:map &lt;F3&gt; !!perl ~/bin/Play.pl PlayNextInterval&lt;CR&gt;A
 +
:map &lt;F4&gt; !!perl ~/bin/Play.pl GotoNextInterval&lt;CR&gt;A
 +
:map &lt;F5&gt; !!perl ~/bin/Play.pl ShortenIntervalLength&lt;CR&gt;
 +
:map &lt;F6&gt; !!perl ~/bin/Play.pl ShortenOverlapLength&lt;CR&gt;
 +
:map &lt;F7&gt; !!perl ~/bin/Play.pl LengthenOverlapLength&lt;CR&gt;
 +
:map &lt;F8&gt; !!perl ~/bin/Play.pl LengthenIntervalLength&lt;CR&gt;
 +
:map &lt;F9&gt; !!perl ~/bin/Play.pl ReduceSpeed&lt;CR&gt;
 +
:map &lt;F10&gt; !!perl ~/bin/Play.pl AccelerateSpeed&lt;CR&gt;
 +
:map &lt;F11&gt; !!perl ~/bin/Play.pl ForwardTwoSeconds&lt;CR&gt;
 +
:map &lt;F12&gt; !!perl ~/bin/Play.pl MarkUpOffset&lt;CR&gt;
 +
</pre>
 +
 +
Ceci mettra en place les effets suivants:
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Touche
 +
!  Commande
 +
!  Effet
 +
|-
 +
|  ''F1''
 +
|  ''GotoPreviousInterval''
 +
|  Recule d'un intervalle.
 +
|-
 +
|  ''F2''
 +
|  ''PlayCurrentInterval''
 +
|  (Re)joue l'intervalle actuel.
 +
|-
 +
|  ''F3''
 +
|  ''PlayNextInterval''
 +
|  Joue l'intervalle suivant sans y avancer.
 +
|-
 +
|  ''F4''
 +
|  ''GotoNextInterval''
 +
|  Avance d'un intervalle.
 +
|-
 +
|  ''F5''
 +
|  ''ShortenIntervalLength''
 +
|  Réduit d'une seconde la durée de l'intervalle (durée minimale: 1 seconde).
 +
|-
 +
|  ''F6''
 +
|  ''ShortenOverlapLength''
 +
|  Réduit d'une seconde le recouvrement entre deux intervalles (durée minimale: 1 seconde).
 +
|-
 +
|  ''F7''
 +
|  ''LengthenOverlapLength''
 +
|  Augmente d'une seconde le recouvrement entre deux intervalles (durée maximale: celle de l'intervalle).
 +
|-
 +
|  ''F8''
 +
|  ''LengthenIntervalLength''
 +
|  Augmente d'une seconde la durée de l'intervalle (durée maximale: durée totale).
 +
|-
 +
|  ''F9''
 +
|  ''ReduceSpeed''
 +
|  Réduit la vitesse de 5% (vitesse minimale: 50%) et arrondit à 1 si on est 1 plus ou moins 3%.
 +
|-
 +
|  ''F10''
 +
|  ''AccelerateSpeed''
 +
|  Augmente la vitesse de 5% (vitesse maximale: 2) et arrondit à 1 si on est 1 plus ou moins 3%.
 +
|-
 +
|  ''F11''
 +
|  ''ForwardTwoSeconds''
 +
|  Avance de deux secondes.
 +
|-
 +
|  ''F12''
 +
|  ''MarkUpOffset''
 +
|  Insère le timecode actuel dans la transcription.
 +
|}
 +
 +
'''Note''': VIM n'est en rien imposé ou nécessaire; la plupart des autres éditeurs de texte programmables pourront eux aussi être raccordés au programme ''Play.pl''. Communiquez-moi les instructions de configuration et je les mentionnerai ici.
 +
 +
==== Programme syllabique plus évolué ====
 +
 +
Cette méthode analyse dans un premier temps le fichier sonore pour repérer les silences le ponctuant et y compter les syllabes. Elle repose sur le fait que [http://sox.sourceforge.net/ SoX], à partir de sa version 14, est capable de jouer des portions de bande son découpées au centième de seconde près.
 +
 +
L'ensemble se compose de trois éléments:
 +
 +
# Un [bin/w.c programme C], qui analyse le fichier son (au format WAV 16 bits).  On le compile sans difficulté particulière, par exemple avec ''gcc -Wall -O2 -o w wav.c''.
 +
# Un [bin/P.pl script Perl], qui exploite les données produites pour en jouer les portions repérées une à une.
 +
# Quelques lignes de configuration instrumentant l'éditeur de texte employé pour faire appel à ce script.
 +
 +
 +
=== Méthode opératoire pour appliquer le découpage syllabique ===
 +
 +
Méthode opératoire (on ne détaille pas les répertoires de stockage et chemins d'accès, ces choix étant laissés libres et ces notions supposées connues):
 +
 +
# Télécharger le fichier son (exemple utilisé ici: [http://media.april.org/audio/radio_campus/27112002/FreeSoft.ogg FreeSoft.ogg]).
 +
# Le convertir au format WAV 16 bits.
 +
##On peut faire appel au programme ''oggdec'' (paquet Debian [http://packages.debian.org/sid/vorbis-tools vorbis-tools]): ''oggdec fichier.ogg''
 +
# Repérer les syllabes et silences de ce fichier: ''./w FreeSoft.wav | tee TIMECODES.txt''.
 +
 +
Ce dernier calcul dépend des choix de constantes faits dans
 +
''w.c''. Avec les réglages suivants:
 +
 +
<pre>
 +
#define MAX_SILENCE (1.0)      /* Always cut when silences that long (in seconds) */
 +
#define MAX_DURATION  20        /* Maximum duration of the chunk to listen (in seconds) */
 +
 +
#define MIN_SYLLABLES 20        /* Minimum number of syllables to listen to (precedence smaller than MAX_SILENCE) */
 +
#define MAX_SYLLABLES 40        /* Maximum number of syllables to listen to */
 +
 +
#define ENERGY_LEVELS 30            /* Range where we will map energy levels (ignoring the zero as silences) */
 +
#define PER_SECOND_GRANULARITY 100  /* Basic time length */
 +
#define MAX_SYLLABLES_PER_SECOND 10 /* Maximum speech rate */
 +
</pre>
 +
 +
On obtiendra plus de mille lignes:
 +
 +
<pre>
 +
0.00 5.31 5.31 0.42 35
 +
5.31 11.24 5.93 0.72 35
 +
11.24 17.84 6.60 0.43 33
 +
17.84 29.56 11.72 1.64 33
 +
[...]
 +
5681.41 5688.26 6.85 0.23 40
 +
5688.26 5694.88 6.62 0.40 37
 +
5694.88 5699.70 4.82 0.63 30
 +
5699.70 5700.89 1.19 0.00 40
 +
</pre>
 +
 +
On incorpore ces lignes sous la ligne ''__DATA__'' dans le fichier ''P.pl''. Note: dans ce fichier une commande produit un bip pour clarifier les séparations (le fichier ''/usr/share/sounds/KDE_Beep_Pop.wav'' relève du paquet Debian ''kdebase-data''):
 +
 +
<pre>
 +
my $beep = "play /usr/share/sounds/KDE_Beep_Pop.wav;";
 +
</pre>
 +
 +
On règle l'éditeur de textes (dans cet exemple nous détaillerons le cas de VIM) comme suit:
 +
 +
<pre>
 +
" Start the chunk
 +
:map &lt;F1&gt; :.,$!perl P.pl&lt;CR&gt;
 +
" 1 more second of overlap in the beginning
 +
:map &lt;F12&gt; :.,$!perl PP.pl&lt;CR&gt;o
 +
" Tag afterwards: type this on the first line of the rest of the transcription
 +
:map &lt;F8&gt; Gdd''P&lt;F1&gt;
 +
:syntax match TimeCode /^\[\[[0-9].*$/
 +
:highlight TimeCode ctermfg=DarkGreen
 +
 +
" Cut word before cursor
 +
:map &lt;F5&gt; i...&lt;CR&gt;...&lt;ESC&gt;
 +
 +
" Check mode
 +
:map &lt;F2&gt; !!perl P.pl&lt;CR&gt;jdd
 +
" Check mode, with more overlap
 +
:map &lt;F11&gt; !!perl PP.pl&lt;CR&gt;o
 +
 +
" Wraps the current word (&gt;= 2 letters) with "*"
 +
:map &lt;F9&gt; hebi*&lt;ESC&gt;ea*&lt;ESC&gt;
 +
</pre>
 +
 +
On pourra sauvegarder ces quelques lignes dans un fichier ''transcription.vim''. La première, qui définit le comportement de la touche ''F1'', indique notamment à l'éditeur de textes VIM de transmettre au programme ''P.pl'' toute la suite du fichier, à partir de la ligne courante, jusqu'à la fin.
 +
 +
Note: on appelle ''timecode'' un marqueur temporel de type ''hh:mm:ss.cc'' (heures, minutes, secondes, centièmes; les heures et minutes ne sont pas toujours précisées quand elles sont nulles.
 +
 +
La touche ''F1'' sert alors à la transcription (et les touches ''F2'' ou ''F8'' à l'insertion de ''timecodes'' dans les fichiers déjà transcrits; ''F11'' ajoutant une seconde de contexte sonore au début). La touche ''F12'' donne un peu plus de contexte au début de l'extrait courant. La touche ''F9'' encadre le mot courant, s'il compte plus de deux lettres, d'astérisques.
 +
 +
La touche ''F5'' coupe le mot en cours par des points de suspension:
 +
 +
<pre>
 +
comme ce...
 +
[[ hh:mm:ss]] # ''ceci est une mention de timecode''
 +
...ci
 +
</pre>
 +
 +
si cela correspond à une borne du morcellement sonore; ce mot sera recollé ensuite par le programme <a href="bin/Rush_to_TXT.sh">Rush_to_TXT.sh</a>.
 +
 +
Note importante: si l'on a décodé le média compressé (au format ''.ogg'' par exemple) en le transformant en ''.wav'', la réactivité sera instantanée au lieu d'être de plus en plus longue: en effet, le format WAV permet au lecteur de se rendre directement au bon endroit du morceau, alors qu'il faut décoder tout le début dans le cas d'un format compressé. Le fichier ''P.pl'', en présence d'une version WAV, la détectera à son extension de fichier et l'utilisera de préférence.
 +
 +
On met en place la variable d'environnement ''MEDIA_FILE'' pour renvoyer sur le fichier ''FreeSoft.ogg'':
 +
 +
<pre>
 +
export MEDIA_FILE=FreeSoft.ogg
 +
</pre>
 +
 +
Alors, on peut débuter la transcription comme suit: ''vim -S transcription.vim FreeSoft.txt'', dans un terminal de préférence sur fond sombre (par exemple un ''xterm'' en blanc sur noir &mdash; dans le cas contraire on pourra intervenir sur le réglage de couleur ''DarkGreen''):
 +
 +
<pre>
 +
[[00.00]] syl=35 sil=0.42
 +
[[05.32]]
 +
</pre>
 +
 +
Ces lignes apparaissent en vert foncé. La première indique: on débute à la seconde 0. C'est le début d'une séquence de 35 syllabes, terminée par un blanc de 42 centièmes de seconde, qui prendra fin au ''timecode'' ''5.31''. On peut réécouter la séquence en enfonçant à nouveau la touche ''F1''. Le bip de fin marque la fin du blanc, et précède un petit temps de recouvrement réglé dans ''P.pl''. La touche ''o'' sous VIM permet de réaliser la transcription de cette portion:
 +
 +
<pre>
 +
[[00.00]] syl=35 sil=0.42
 +
Denis Devos: Vous écoutez Radio Campus, la radio de la communauté de
 +
l'université libre de Bruxelles. Il est 10:18.
 +
[[05.32]]
 +
</pre>
 +
 +
On presse ensuite la touche d'échappement ''ESC'', se place sur le ''timecode'' suivant (''[[05.32]]''), et une nouvelle pression sur ''F1'' produit:
 +
 +
<pre>
 +
[[05.31]] syl=35 sil=0.72
 +
[[11.25]]
 +
</pre>
 +
 +
On procède ainsi de proche en proche jusqu'à la fin de la transcription.  Pour noter un changement d'interlocuteur ou un nouveau paragraphe, on passe une ligne (avant ou après le ''timecode'', ou entre deux ''timecodes'', selon les cas. On veillera à laisser les timecodes toujours seuls sur leur ligne, et prendra garde à ne pas passer plusieurs lignes.
 +
 +
Ceci produit le fichier de [data/02/2002-11-27-Brevets-Radio-Campus.txt ''rushes'']. Les ''timecodes'' pourront être exploités dans une application web ou autre, pour faire le lien entre la bande son et la transcription textuelle.
 +
 +
On transforme facilement le fichier de ''rushes'' en [data/03/2002-11-27-Brevets-Radio-Campus.txt version texte brut] un peu plus propre, avec le filtre [bin/Rush_to_TXT.sh Rush_to_TXT.sh]. Ligne de commande: ''sh Rush_to_TXT.sh rushes.txt &gt; texte.txt''.

Version du 6 octobre 2009 à 16:10


Tutoriel du groupe Transcriptions

Modes opératoires et conseils techniques

Liens et programmes utiles

  • Mplayer lit la plupart des formats vidéo utilisés; je ne pense pas qu'un autre programme libre en lise certains que lui ne sait pas lire. Il est (désormais) packagé par Debian. Il y a apparemment des questions compliquées de codes disponibles mais pas libres.
  • Un navigateur web en mode texte comme w3m (packagé par Debian) est parfois bien pratique.
  • Les URL débutant par itpc://... ??? TODO. Exemple: 1 sur la page 2.
  • Les URL débutant par mms:// se téléchargent avec le programme mimms (packagé par Debian).
  • Les URL débutant par rtsp://... Apparemment le paquet Debian livemedia-utils et son programme openRTSP se chargent de cela, mais je n'ai pas réussi à le faire fonctionner. ??? TODO. Exemple: [rtsp://212.95.67.121:554/permanent/c6/promos/070619_fr.rmvb?cloakport=80,554,7070 1] vu sur 2 vu sur 3.
  • Un flux RSS mentionne l'URL du média. Exemple: 1 trouvé sur la page 2 mentionne 3 (lien désormais cassé...).
  • Les URL débutant par pnm://...??? TODO Exemple: [pnm://212.95.67.121:7070/permanent/c6/promos/070619_fr.rmvb?cloakport=80,554,7070 1] vu sur 2 vu sur 3.
  • TODO: comment télécharger les vidéos annoncées au format RealPlayer? Exemple: 1 trouvé sur la page 2.
  • Validation XHTML.
  • Validation CSS.

Méthode générale

Traitons par exemple le cas d'un podcast.

Utiliser le navigateur Firefox et installer l'extension Firebug.

Dans la sous-fenêtre de Firebug, onglet Net, on voit dans la liste un nom de fichier (nom_de_fichier.mp3). Clic droit, Copy Location. Ça semble fonctionner avec Youtube et de nombreux sites.

Description plus détaillée: Télécharger n'importe quel contenu sur les sites de diffusions de vidéos et MP3.

Connaître la durée d'un document

Format Extension Commande
Ogg Vorbis ou Ogg Theora .ogg ogginfo
MPEG, AVI .mp3, .mp4, .mpg, .avi mplayer -identify; chercher ID_LENGTH (valeur exprimée en secondes); ne disposer que du début du fichier suffit parfois
Général .xxx Approximation avec: time player fichier

Programmes d'assistance à la transcription

Trans

Le programme trans du paquet Debian transcriber semble riche et prometteur. Si quelqu'un apprend à s'en servir et peut expliquer comment procéder efficacement, ses conseils seront les bienvenus (TODO). Attention, la page web du projet donnée dans la documentation a disparu; le projet est désormais hébergé sur Sourceforge.

Programme temporel simple

Le programme [bin/Play.pl Play.pl] permet de jouer des petites portions (intervalles) d'un média afin de les transcrire au fur et à mesure. Il dispose d'options d'ergonomie. Il joue le fichier indiqué dans la variable d'environnement MEDIA_FILE. Les valeurs des variables utilisées sont rappelées dans un xmessage.

On pourra l'interfacer avec l'éditeur de textes VIM en insérant les lignes suivantes dans son fichier de configuration:

" To use for transcriptions
:map <F1> !!perl ~/bin/Play.pl GotoPreviousInterval<CR>
:map <F2> !!perl ~/bin/Play.pl PlayCurrentInterval<CR>
:map <F3> !!perl ~/bin/Play.pl PlayNextInterval<CR>A
:map <F4> !!perl ~/bin/Play.pl GotoNextInterval<CR>A
:map <F5> !!perl ~/bin/Play.pl ShortenIntervalLength<CR>
:map <F6> !!perl ~/bin/Play.pl ShortenOverlapLength<CR>
:map <F7> !!perl ~/bin/Play.pl LengthenOverlapLength<CR>
:map <F8> !!perl ~/bin/Play.pl LengthenIntervalLength<CR>
:map <F9> !!perl ~/bin/Play.pl ReduceSpeed<CR>
:map <F10> !!perl ~/bin/Play.pl AccelerateSpeed<CR>
:map <F11> !!perl ~/bin/Play.pl ForwardTwoSeconds<CR>
:map <F12> !!perl ~/bin/Play.pl MarkUpOffset<CR>

Ceci mettra en place les effets suivants:

Touche Commande Effet
F1 GotoPreviousInterval Recule d'un intervalle.
F2 PlayCurrentInterval (Re)joue l'intervalle actuel.
F3 PlayNextInterval Joue l'intervalle suivant sans y avancer.
F4 GotoNextInterval Avance d'un intervalle.
F5 ShortenIntervalLength Réduit d'une seconde la durée de l'intervalle (durée minimale: 1 seconde).
F6 ShortenOverlapLength Réduit d'une seconde le recouvrement entre deux intervalles (durée minimale: 1 seconde).
F7 LengthenOverlapLength Augmente d'une seconde le recouvrement entre deux intervalles (durée maximale: celle de l'intervalle).
F8 LengthenIntervalLength Augmente d'une seconde la durée de l'intervalle (durée maximale: durée totale).
F9 ReduceSpeed Réduit la vitesse de 5% (vitesse minimale: 50%) et arrondit à 1 si on est 1 plus ou moins 3%.
F10 AccelerateSpeed Augmente la vitesse de 5% (vitesse maximale: 2) et arrondit à 1 si on est 1 plus ou moins 3%.
F11 ForwardTwoSeconds Avance de deux secondes.
F12 MarkUpOffset Insère le timecode actuel dans la transcription.

Note: VIM n'est en rien imposé ou nécessaire; la plupart des autres éditeurs de texte programmables pourront eux aussi être raccordés au programme Play.pl. Communiquez-moi les instructions de configuration et je les mentionnerai ici.

Programme syllabique plus évolué

Cette méthode analyse dans un premier temps le fichier sonore pour repérer les silences le ponctuant et y compter les syllabes. Elle repose sur le fait que SoX, à partir de sa version 14, est capable de jouer des portions de bande son découpées au centième de seconde près.

L'ensemble se compose de trois éléments:

  1. Un [bin/w.c programme C], qui analyse le fichier son (au format WAV 16 bits). On le compile sans difficulté particulière, par exemple avec gcc -Wall -O2 -o w wav.c.
  2. Un [bin/P.pl script Perl], qui exploite les données produites pour en jouer les portions repérées une à une.
  3. Quelques lignes de configuration instrumentant l'éditeur de texte employé pour faire appel à ce script.


Méthode opératoire pour appliquer le découpage syllabique

Méthode opératoire (on ne détaille pas les répertoires de stockage et chemins d'accès, ces choix étant laissés libres et ces notions supposées connues):

  1. Télécharger le fichier son (exemple utilisé ici: FreeSoft.ogg).
  2. Le convertir au format WAV 16 bits.
    1. On peut faire appel au programme oggdec (paquet Debian vorbis-tools): oggdec fichier.ogg
  3. Repérer les syllabes et silences de ce fichier: ./w FreeSoft.wav | tee TIMECODES.txt.

Ce dernier calcul dépend des choix de constantes faits dans w.c. Avec les réglages suivants:

#define MAX_SILENCE (1.0)       /* Always cut when silences that long (in seconds) */
#define MAX_DURATION  20        /* Maximum duration of the chunk to listen (in seconds) */

#define MIN_SYLLABLES 20        /* Minimum number of syllables to listen to (precedence smaller than MAX_SILENCE) */
#define MAX_SYLLABLES 40        /* Maximum number of syllables to listen to */

#define ENERGY_LEVELS 30            /* Range where we will map energy levels (ignoring the zero as silences) */
#define PER_SECOND_GRANULARITY 100  /* Basic time length */
#define MAX_SYLLABLES_PER_SECOND 10 /* Maximum speech rate */

On obtiendra plus de mille lignes:

0.00 5.31 5.31 0.42 35
5.31 11.24 5.93 0.72 35
11.24 17.84 6.60 0.43 33
17.84 29.56 11.72 1.64 33
[...]
5681.41 5688.26 6.85 0.23 40 
5688.26 5694.88 6.62 0.40 37
5694.88 5699.70 4.82 0.63 30
5699.70 5700.89 1.19 0.00 40

On incorpore ces lignes sous la ligne __DATA__ dans le fichier P.pl. Note: dans ce fichier une commande produit un bip pour clarifier les séparations (le fichier /usr/share/sounds/KDE_Beep_Pop.wav relève du paquet Debian kdebase-data):

my $beep = "play /usr/share/sounds/KDE_Beep_Pop.wav;";

On règle l'éditeur de textes (dans cet exemple nous détaillerons le cas de VIM) comme suit:

" Start the chunk
:map <F1> :.,$!perl P.pl<CR>
" 1 more second of overlap in the beginning
:map <F12> :.,$!perl PP.pl<CR>o
" Tag afterwards: type this on the first line of the rest of the transcription
:map <F8> Gdd''P<F1>
:syntax match TimeCode /^\[\[[0-9].*$/
:highlight TimeCode ctermfg=DarkGreen

" Cut word before cursor
:map <F5> i...<CR>...<ESC>

" Check mode
:map <F2> !!perl P.pl<CR>jdd
" Check mode, with more overlap
:map <F11> !!perl PP.pl<CR>o

" Wraps the current word (>= 2 letters) with "*"
:map <F9> hebi*<ESC>ea*<ESC>

On pourra sauvegarder ces quelques lignes dans un fichier transcription.vim. La première, qui définit le comportement de la touche F1, indique notamment à l'éditeur de textes VIM de transmettre au programme P.pl toute la suite du fichier, à partir de la ligne courante, jusqu'à la fin.

Note: on appelle timecode un marqueur temporel de type hh:mm:ss.cc (heures, minutes, secondes, centièmes; les heures et minutes ne sont pas toujours précisées quand elles sont nulles.

La touche F1 sert alors à la transcription (et les touches F2 ou F8 à l'insertion de timecodes dans les fichiers déjà transcrits; F11 ajoutant une seconde de contexte sonore au début). La touche F12 donne un peu plus de contexte au début de l'extrait courant. La touche F9 encadre le mot courant, s'il compte plus de deux lettres, d'astérisques.

La touche F5 coupe le mot en cours par des points de suspension:

comme ce...
[[ hh:mm:ss]] # ''ceci est une mention de timecode''
...ci

si cela correspond à une borne du morcellement sonore; ce mot sera recollé ensuite par le programme <a href="bin/Rush_to_TXT.sh">Rush_to_TXT.sh</a>.

Note importante: si l'on a décodé le média compressé (au format .ogg par exemple) en le transformant en .wav, la réactivité sera instantanée au lieu d'être de plus en plus longue: en effet, le format WAV permet au lecteur de se rendre directement au bon endroit du morceau, alors qu'il faut décoder tout le début dans le cas d'un format compressé. Le fichier P.pl, en présence d'une version WAV, la détectera à son extension de fichier et l'utilisera de préférence.

On met en place la variable d'environnement MEDIA_FILE pour renvoyer sur le fichier FreeSoft.ogg:

export MEDIA_FILE=FreeSoft.ogg

Alors, on peut débuter la transcription comme suit: vim -S transcription.vim FreeSoft.txt, dans un terminal de préférence sur fond sombre (par exemple un xterm en blanc sur noir — dans le cas contraire on pourra intervenir sur le réglage de couleur DarkGreen):

[[00.00]] syl=35 sil=0.42
[[05.32]]

Ces lignes apparaissent en vert foncé. La première indique: on débute à la seconde 0. C'est le début d'une séquence de 35 syllabes, terminée par un blanc de 42 centièmes de seconde, qui prendra fin au timecode 5.31. On peut réécouter la séquence en enfonçant à nouveau la touche F1. Le bip de fin marque la fin du blanc, et précède un petit temps de recouvrement réglé dans P.pl. La touche o sous VIM permet de réaliser la transcription de cette portion:

[[00.00]] syl=35 sil=0.42
Denis Devos: Vous écoutez Radio Campus, la radio de la communauté de
l'université libre de Bruxelles. Il est 10:18.
[[05.32]]

On presse ensuite la touche d'échappement ESC, se place sur le timecode suivant (05.32), et une nouvelle pression sur F1 produit:

[[05.31]] syl=35 sil=0.72
[[11.25]]

On procède ainsi de proche en proche jusqu'à la fin de la transcription. Pour noter un changement d'interlocuteur ou un nouveau paragraphe, on passe une ligne (avant ou après le timecode, ou entre deux timecodes, selon les cas. On veillera à laisser les timecodes toujours seuls sur leur ligne, et prendra garde à ne pas passer plusieurs lignes.

Ceci produit le fichier de [data/02/2002-11-27-Brevets-Radio-Campus.txt rushes]. Les timecodes pourront être exploités dans une application web ou autre, pour faire le lien entre la bande son et la transcription textuelle.

On transforme facilement le fichier de rushes en [data/03/2002-11-27-Brevets-Radio-Campus.txt version texte brut] un peu plus propre, avec le filtre [bin/Rush_to_TXT.sh Rush_to_TXT.sh]. Ligne de commande: sh Rush_to_TXT.sh rushes.txt > texte.txt.