Copyright © 2005 Anonymous
Copyright © 2005 Deny
Copyright © 2005 Joëlle Cornavin
Article paru dans le n°117 de la Gazette Linux d'août 2005.
Traduction française par Deny
<deny CHEZ monaco POINT net>
.
Relecture de la traduction française par Joëlle Cornavin
<jcornavi CHEZ club TIRET internet POINT fr>
.
Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Voici une suite de l'article de Maxin B. John's, qui nous a présenté le synthétiseur « à partir du texte vers la parole » (text-to-speech) Festival et quelques applications possibles. Ici, nous allons poursuivre plus avant et découvrir comment convertir des livres électroniques (e-books, des formats les plus courants tels que le HTML, CHM, PS et autres PDF en livres sonores prêts à être transférés sur votre lecteur portatif.
De nos jours, avec l'offre accrue de lecteurs MP3 miniaturisés et peu onéreux, il est devenu très commode d'écouter des livres et des articles dans des lieux ou vous n'auriez pas forcément le temps de les lire. Les livres sonores exigent habituellement un débit binaire très bas et, étant très peu volumineux, ils sont par conséquent le contenu le plus adapté à la capacité faible et bon marché des lecteurs MP3 (128 Mo ou moins).
Il existe un grand nombre de sites web qui couvrent les besoins en documents sonores, avec un large éventail de choix. Cependant, il se pourrait que vous soyez réellement amené à lire cet article ou ce livre que vous avez trouvé sur le Web au format PDF ou HTML et pourtant, il n'y en a probablement aucune version sonore disponible (encore). Je vais vous présenter quelques scripts qui vous permettront de convertir tous vos textes préférés en fichiers audio compressés prêts à être téléchargés et appréciés sur votre lecteur portatif. Commençons !
ps2ascii (PS et PDF), provenant du paquetage de la bibliothèque ghostscript ;
Lynx ;
text2wave de Festival ;
L'encodeur MP3 lame (nous encoderons en MP3 puisque c'est le format le plus largement répandu dans les lecteurs).
La plupart de ces outils sont conditionnés sous forme de paquetages dans les principales distributions Linux. Une fois installés tous les paquetages indiqués ci-dessus, nous pouvons entrer dans le vif du sujet. Nous commencerons par le format le plus courant pour les livres électroniques : Adobe® PDF.
#!/bin/sh - chunks=200 if [ "$#" == 0 ]; then echo "Usage : $0 [-a author] [-t title] [-l lines] <fichier ps ou pdf>" exit 1 fi while getopts "a:t:l:" option do case "$option" in a)author="$OPTARG";; t)title="$OPTARG";; l)chunks="$OPTARG";; esac done shift $((OPTIND-1)) ps2ascii $@ | split -l $chunks - tmpsplit count=1 for i in `ls tmpsplit*` do text2wave $i | lame --ta "${author:-psmp3}" --tt "$count ${title:-psmp3}" \ --tl "${title:-psmp3}" --tn "$count" --tg Speech --preset mw-us \ - abook${count}.mp3 count=`expr $count + 1` done rm tmpsplit* |
Tout d'abord, ps2ascii convertit le fichier PDF ou Postscript en texte simple. Ce texte est ensuite scindé en blocs de lignes $chunks. Vous pourriez être amené à ajuster cette valeur, puisque scinder le livre en plus de 255 fichiers pourrait affecter le fonctionnement de certains lecteurs (la balise id3v1 du nombre de pistes ne pouvant dépasser 255). Ensuite, chaque bloc est traité par text2wave et le flux sonore résultant est envoyé directement à lame via un tube. L'encodage est effectué selon le préréglage mw-us, qui correspond à un mode mono, avec un débit binaire disponible moyen (ABR, Available Bit Rate) de 40 kb/s pour une fréquence de 16 kHz. Cela devrait être suffisant, puisque Festival produit en sortie une voix échantillonnée à 16 kHz par défaut. Vous pouvez la laisser telle quelle, à moins que vous n'employiez un synthétiseur vocal avec un taux d'échantillonage différent. Consultez lame --preset help pour avoir les paramètres optimaux pour les différents taux d'échantillonnage.
Quand vous saisissez le nom de l'artiste ou le titre, n'oubliez pas de mettre la chaîne de caractères entre guillemets si elle comporte des espaces. Par exemple :
ps2mp3 -a "Voici l'auteur" -t "Voici le titre" mon.pdf |
Voyons maintenant comment convertir en un fichier audio depuis le format le plus courant : HTML.
#!/bin/sh - #Nécessite lynx, festival et lame if [ "$#" == 0 ]; then echo "Usage : echo $0 [-a author] [-t title] <html file1> <html file2> ..." exit 1 fi while getopts "a:t:" option do case "$option" in a)author="$OPTARG";; t)title="$OPTARG";; esac done shift $((OPTIND-1)) count=1 for htmlfile in $@ do section=`expr match "${htmlfile##*/}" '\(.*\)\.htm'` lynx -dump -nolist $htmlfile | text2wave - | lame --ta "${author:-html2mp3}" \ --tt "$count. ${section:-html2mp3}" --tl "${title:-html2mp3}" " \ --tn "$count" --tg Speech --preset mw-us - ${section}.mp3 #rm /tmp/est_* count=`expr $count + 1` done |
La première partie du script, jusqu'à la ligne 16, concerne l'extraction des paramètres optionnels sur la ligne de commande. À partir de la ligne 19, nous allons effectuer une boucle sur la liste de tous les fichiers HTML, les arguments restants étant fournis à la ligne de commande. À la ligne 21, ${htmlfile##*/} extrait tout jusque, et y compris, le dernier caractère / — ce qui est utile si nous employons des URL ou un chemin d'accès vers les répertoires — ainsi, seul le nom de fichier demeure. Ensuite, comme l'expression régulière \(.*\)\.htm s'occupe de l'extension du fichier, ainsi la variable section ne contient que la racine du fichier. Elle servira à baliser et nommer les fichiers MP3 obtenus.
La ligne 22 constitue réellement le cœur du script : tout d'abord, lynx prend un fichier HTML comme entrée et en dépose le texte dans la sortie standard (stdout). Cette sortie est redirigée vers text2wave et convertie en un flux encodée en WAV, qui est ensuite redirigé vers lame pour être encodé selon le préréglage mw-us et balisé en id3 avec le genre d'expression, le titre et l'auteur.
Notez que le script peut aussi prendre des URL en arguments, puisqu'ils sont directement envoyés à lynx.
Ce script html2mp3 sera d'une grande utilité pour notre prochaine étape, qui consistera à convertir du CHM en MP3.
Les fichiers CHM sont un format propriétaire développé par Microsoft©, mais pour l'essentiel, ce ne sont juste des fichiers compilés en HTML avec un index et une table des matières réunis en un fichier. Leur emploi au format de livre électronique n'est certainement pas aussi répandu que le HTML ou le PDF, mais comme vous le verrez, il est assez simple de les convertir en fichiers audio une fois que vous avez les outils adéquats.
#!/bin/sh - #Nécessite archmage et html2mp3 if [ "$#" == 0 ]; then echo "Usage :" echo " $0 <fichier chm> [-a author] [-t title] <fichier1 html> <fichier2 html> ..." exit 1 fi while getopts "a:t:" o do case "$o" in a)author="$OPTARG";; t)title="$OPTARG";; esac done shift $((OPTIND-1)) archmage $1 tmpchm find tmpchm -name "*.htm*" -exec html2mp3 -a "$author" -t "$title" {} \; rm -fr tmpchm |
archmage est un script reposant sur Python, qui extrait des fichiers HTML à partir de CHM. Vous devrez avoir installé Python pour l'exécuter.
Contrairement à ps2mp3, chm2mp3 n'exige pas de décision arbitraire à propos de l'endroit ou scinder le livre : chaque page compilée dans le fichier au format CHM devient son propre fichier audio. Il suffit d'extraire ces pages avec archmage et les convertir avec html2mp3.
Nous employons la commande find pour rechercher récursivement des fichiers HTML dans le livre au format CHM que nous avons extrait, puisque les fichiers HTML sont parfois stockés dans des sous-répertoires à l'intérieur du document CHM. Ensuite, pour chaque fichier HTML trouvé, nous appelons html2mp3.
Souvenez-vous que l'encodage de plusieurs douzaines de pages « à partir du texte vers la parole », puis vers le format MP3 peut prendre un certain temps. Toutefois, vous n'avez pas besoin d'encoder un livre entier pour commencer à le télécharger et à l'écouter sur votre lecteur portatif.