Le royaume de Eric Buist >> Informatique >> Quelques-unes de mes recherches personnelles
Me contacter Plan du site
<< Passer de Windows Vista à Windows XP Capture de contenu depuis Internet GRUB et l'UEFI: peuvent-ils être réunis? >>

Capture de contenu depuis Internet

Qu'ont en commun YouTube, SHOUTcast et GrooveShark? Ils fournissent une impressionnante quantité de contenu mais découragent le stockage de ce contenu. En d'autres mots, chaque fois que vous voulez revoir cette merveilleuse vidéo depuis YouTube, chaque fois que vous souhaitez réentendre ce magnifique morceau de musique depuis GrooveShark, il vous faut le télécharger à nouveau. Ce n'est pas un si gros drame, direz-vous, mais il existe de nombreux cas où conserver une copie du contenu est souhaitable, voire essentiel! En voici quelques-uns, sans être exhaustifs.

Il existe de nombreuses méthodes pour capturer les données audio/vidéo diffusées par un site Web. Certaines sont spécifiques à un site Web donné tandis que d'autres sont génériques mais plus complexes ou coûteuses en temps, en argent ou en qualité du résultat. Sur cette page, nous allons examiner certaines de ces méthodes. Nous traiterons d'abord les cas particuliers pour ensuite nous attaquer aux méthodes génériques susceptibles de fonctionner pour n'importe quel site.

YouTube et la plupart des autres sites de vidéos

Il existe plusieurs méthodes spécialisées pour YouTube, dont ma préférée est KeepVid. C'est un site Web permettant de copier/coller n'importe quelle URL menant à une page affichant une vidéo pour ensuite obtenir un lien permettant le téléchargement de cette vidéo, aussi simple que ça! Et ça fonctionne pour d'autres sites que YouTube. Ainsi, si vous souhaitez télécharger une vidéo diffusée par un site Internet, essayer KeepVid est une première étape facile.

Mais que peut-il se passer avec un site comme KeepVid? Eh bien il peut disparaître, comme ça, du jour au lendemain! Alors existe-t-il une méthode spécifique ne dépendant pas d'une ressource Web? Bon, vous pourriez toujours acheter le logiciel KeepVid si vous avez un ordinateur Windows, mais j'aime beaucoup mieux le petit script youtube-dl. Ce dernier est écrit en Python si bien qu'il devrait fonctionner sous Windows, Linux et Mac. Son utilisation est toute simple: sur une invite de commande, taper youtube-dl <url> et appuyer sur Enter. Bien entendu, il faut remplacer <url> par l'URL contenant la vidéo.

SHOUTcast et la plupart des sites musicaux

SHOUTcast ainsi que certains autre sites comme DI.fm permettent de télécharger un fichier indiquant une adresse à un lecteur multimédia de votre choix, comme Audacious, AIMP, etc. Le lecteur choisi va alors télécharger la musique, la jouer, puis la jeter. Mais rien ne vous empêche de remplacer votre lecteur multimédia préféré par un petit logiciel qui va simplement télécharger le contenu jusqu'à ce que vous l'arrêtiez.

Une première idée est d'utiliser l'outil générique WGet, qui permet de télécharger le contenu depuis n'importe quel serveur Web. Le problème est que WGet va produire un seul gros fichier avec tout le contenu diffusé, mis bout à bout.

Il existe de bien meilleurs outils, comme par exemple StreamRipper, disponible pour Windows et Linux. Ce dernier accepte une adresse fournissant du contenu musical en paramètre et télécharge du contenu depuis cette dernière jusqu'à ce que l'utilisateur le stoppe en utilisant la touche CTRL-C. Le logiciel découpe et nomme automatiquement les pistes audio lorsque c'est possible! C'est donc un moyen très simple de télécharger la musique diffusée sur beaucoup de sites.

GrooveShark

Ce site de musique populaire fait exception à la règle: il ne permet pas de télécharger un fichier permettant d'écouter la musique depuis un logiciel de son choix. Il faut absolument utiliser le lecteur Flash intégré au site.

Trouver une alternative a cette fois demandé passablement de temps. La plus simple est sans aucun doute GrooveDown, qui permet de télécharger n'importe quelle chanson depuis GrooveShark. Le logiciel n'est offert qu'en version Windows, mais WINE permet sans problème de le faire fonctionner sous Linux et sous Mac.

L'utilisation de GrooveDown est très simple: il suffit de rechercher les chansons à télécharger, en entrant du texte ou en parcourant la liste des morceaux populaires, de les ajouter à la liste de téléchargements et de démarrer l'opération. GrooveDown s'occupe du reste!

GrooveDown crée automatiquement un répertoire pour chaque artiste et un fichier pour chaque chanson. Cela peut poser des difficultés lors du téléchargement de chansons de plusieurs artistes différents lorsque vient le temps de les insérer toutes dans une liste de lecture. Pour remédier à ce problème, j'utilise souvent la commande find . -type f -name \*.mp3 -exec mv {} . \;. Cette dernière recherche tous les fichiers MP3 des sous-répertoires et les déplace vers le répertoire courant. Une façon possible de procéder sous Windows serait d'utiliser la fonction de recherche pour retrouver la liste des fichiers MP3, les sélectionner tous et effectuer un copier/coller vers un autre répertoire.

Le seul problème est que GrooveDown ne permet pas d'entendre les chansons avant leur téléchargement ou de construire la liste de téléchargement à partir d'une liste de lecture. GrooveDown ne permet pas non plus de télécharger les chansons d'une station de radio. Cela rend moins agréable l'exploration musicale, la recherche de nouveaux morceaux. Il faut avoir une idée de ce qu'on cherche.

Méthode générale 1: la capture audio/visuelle

Cette méthode relativement simple permet de capter les images et les sons diffusés par n'importe quel site Web. En fait, elle fonctionne pour toute application. L'idée est d'enregistrer les images et les sons produits par votre ordinateur.

Sous Windows, le logiciel CamStudio permet d'enregistrer l'image et le son, à condition de le jumeler avec ffdshow pour bénéficier d'un codec MPEG plutôt que le codec spécifique de CamStudio. Sous Linux, il est possible d'obtenir des résultats semblables avec RecordMyDesktop, mais il faut souvent par la suite convertir le fichier résultant en utilisant HandBrake ou tout autre outil similaire afin de le rendre exploitable par les lecteurs multimédia courants.

Pour capter le son avec cette technique ou encore pour enregistrer le son uniquement, il faut configurer la source audio sur l'entrée Wave, ce qui n'est pas possible pour toutes les puces sonores. Le wiki de Audacity explique comment procéder pour Windows, Linux et Mac.

Il existe certains logiciels payants spécialisés qui appliquent cette idée, comme par exemple Streaming Audio Capture. Ce dernier enregistre automatiquement le son produit par les applications et peut le convertir dans le format de votre choix. Par contre, comme je ne l'ai jamais essayé, je ne pourrais pas dire si la qualité du résultat est bonne et si les fichiers sont correctement nommés automatiquement.

Cette stratégie a peu d'avantages, à mon avis, à part peut-être la simplicité et la possibilité de convertir le résultat dans le format de votre choix. Elle comporte en contrepartie beaucoup d'inconvénients:

Méthode générale 2: la capture de flux

Il existe une méthode beaucoup plus flexible et puissante pour enregistrer du contenu venant d'Internet: la capture de paquets suivie de la reconstruction de flux. Tout le contenu passe sous les yeux du système d'exploitation, alors il suffit d'installer un petit logiciel pour l'attraper et le sauvegarder quelque part.

L'idée est certes simple, mais son application ne l'est pas vraiment, pas tout à fait en tout cas. En effet, il existe plusieurs logiciels permettant d'accomplir cette tâche, mais tous ne sont pas égaux. Jusqu'à présent, je n'ai trouvé aucun outil parfaitement adéquat.

D'abord, il y a des logiciels qui feront peut-être le travail très simplement, mais sous Windows seulement et pendant trente jours! On compte dans cette catégorie Internet Download Manager et Replay Media Catcher. C'est surtout ces produits que les forums vont vous suggérer et ils n'iront pas plus loin que ça. Il faut dire que ces produits font plus que capter le contenu; ils peuvent le convertir vers d'autres formats et fournir des aides à la recherche. Mais à ces questions, je réponds sans hésiter HandBrake et Google, respectivement. Peut-on obtenir un logiciel gratuit et portable en abandonnant les fonctionnalités annexes? J'ai eu bien peur que non, mais j'ai fini par trouver!

D'abord, il y a Wireshark. Ce logiciel se concentre principalement sur la capture et l'analyse de paquets sur le réseau. Il peut par contre reconstituer des séquences de paquets résultant de la transmission d'un fichier audio ou vidéo. Le flux de données peut être récupéré et sauvegardé vers un fichier. Malheureusement, il faut procéder manuellement pour chaque fichier à sauvegarder. Le logiciel impose plusieurs étapes parfois longues pour traiter un seul fichier. Cela rend la technique laborieuse à appliquer et très propice aux erreurs. Une fois même, le logiciel s'est fermé tout seul, d'un coup sec, tandis que je tentais de récupérer les fichiers, et je perdis alors toute ma séance de téléchargements! Par cette mésaventure, j'ai appris qu'il valait mieux arrêter la capture et enregistrer le résultat dans un fichier PCAP avant d'entreprendre son analyse.

Le deuxième candidat, découvert par un ami qui a fait deux stages chez Nuance, là où je travaille, s'appelle Fiddler. Cet outil permet d'enregistrer automatiquement les flux de données reconstitués, en utilisant des noms de fichiers extraits des requêtes HTTP correspondantes. Cela permet en particulier de télécharger l'intégralité des vidéos visualisées lors d'une séance de navigation sur Internet, sans aucun effort! Cela inclut YouTube, Facebook, Grooveshark et peut-être même Netflix, quoique je n'ai jamais expérimenté avec ce dernier puisque je n'y suis pas abonné. Fiddler permet aussi de télécharger à la volée des images. Le problème est que le nom des fichiers n'est pas toujours correct. Par exemple, les MP3 captés depuis GrooveShark portent tous le nom de stream.php. Par chance, Fiddler leur appose un suffixe permettant de télécharger plusieurs fichiers du même nom pendant une séance. Mais le gros problème de Fiddler, c'est qu'il ne fonctionne que sous Windows!

Alors que me reste-t-il, pauvre Linuxien? Eh bien, j'ai bien cru que la réponse était RIEN! Eh non! Il y a TCPFlow! Ce dernier permet de capter les paquets et de reconstituer tous les flux de données transmis par le protocole TCP, à la base de Internet. Le gros problème est que les fichiers produits par TCPFlow portent des noms sans aucun lien avec leur contenu et contiennent des en-têtes HTTP les rendant inutilisables directement.

J'ai cherché plutôt longtemps pour me rendre compte qu'il n'y avait vraiment aucun moyen de venir à bout de ce problème sans me construire un petit script Bash que j'ai appelé extract-audio. Le script permet de rechercher tous les fichiers de la sortie de TCPFlow contenant le texte audio/mpeg et les recopie dans un répertoire. Un second filtre ayant la forme du script Perl strip-http entre alors en jeu, produisant des fichiers sans en-tête HTTP. Pour que ma solution fonctionne, il faut que les deux scripts soient à un endroit désigné par la variable d'environnement PATH.

Cette méthode n'est pas tout à fait satisfaisante, car elle se limite aux fichiers musicaux. Pour la généraliser, j'aurai besoin d'un programme plus élaboré pour traiter la sortie de TCPFlow, voire effectuer une capture de paquets. Mais un tel outil permettrait de supporter une plus large gamme de protocoles, dont FTP utilisé pour le transfert de fichiers, MMS employé pour la diffusion de contenu dans le format Windows Media et peut-être même, on peut bien rêver, HTTPS!

Nommage du contenu capté

C'est bien joli obtenir une centaine de fichiers MP3, mais lorsque leur nom n'est qu'une suite de nombres, ce n'est pas très facile de les retrouver! Nommer les fichiers captés correctement est tout simplement un art! Cela dépend du type de fichier et de la méthode de capture choisie. Je recherche toujours un outil qui permettrait d'adapter la stratégie de nommage des fichiers à des sites spécifiques. En décortiquant la requête HTTP de façon spécifique et en effectuant des requêtes complémentaires, j'estime qu'il serait possible, pour certaines sites communs comme YouTube, Facebook, GrooveShark, etc., de retrouver le nom correspondant à une ressource captée.

En attendant de trouver ce saint Graal, j'ai découvert avec l'aide d'un ami une méthode permettant de retrouver les noms de la plupart des fichiers MP3 captés sur GrooveShark. La clé, c'est le logiciel Picard. D'abord, il faut le configurer, à l'aide de son menu Options, pour renommer les fichiers enregistrés. Ensuite, il faut ajouter le dossier contenant les fichiers à nommer. Si Picard trouver le tag d'un fichier MP3, ce fichier apparaîtra avec son nom correct; il suffit alors de cliquer du bouton droit sur le fichier et sélectionner Enregistrer.

Pour les fichiers sans tags, eh bien Picard propose une option Analyzer permettant de calculer une empreinte du fichier musical. En soumettant cette empreinte sur MusicBrainz, il peut parfois retrouver les informations de la chanson! Cela permet d'étiqueter le fichier et le nommer.

Conclusion

La solution idéale, jusqu'à présent, pour capter le contenu des sites visités, est d'utiliser Fiddler. Sous Linux, il y a certes TCPFlow, mais il faut beaucoup plus de travail pour récupérer le contenu capté. Le nommage demeure un problème important de cette technique.