Artisan Numérique

/vintage/zaurus/ Encoder une vidéo pour le Zaurus

Même si j'avoue sérieusement regretter l'absence de la magic touch "Harrisson Ford", je reste, comme pas mal de monde, un grand fan de la bi-trilogie Star Wars. Mais comme chacun le sais, point n'est prévue de suite, c'est bel et bien fini... Et bien non ! Il y a une suite, ou plutôt un épisode qui s'intercale avant le troisième volet totalement inédit et pour cause, il s'agit d'un film amateur...

Je vous entends d'ici et il vrai que même si les épisodes de Star Trek tournés à la Ed Wood ne manque pas de charme, cela ne mérite pas non plus des oscars. Mais là, le résultat est absolument bleufant. Amateur ou pas, avec 3 ans de tournages et "seulement" 20.000$ de budjets, cette équipe a produit un film d'une qualité tout simplement inimaginables. Et même si le jeu fait de temps à autre sourire, vous serez vite embarqués dans cette épisode 2 1/2 tout neuf, alias "Star Wars, Revelations". Et tout y est, totalement, gratuit : le film en ISO DVD, les affiches, les jaquettes et même l'album de la bande originale... Un vrai bonheur !

Maintenant voilà, vous avez surement envie d'embarquer cela dans le métro, sur votre Zaurus. Il va valoir donc convertir cette vidéo au format DVD en quelque chose que le petit CPU de la bête puisse digérer sans problème. Et pas question que cela rame, les poursuites stellaires en seraient totalement gâchées !

Un peu de théorie

Le Zaurus a deux possibilités de stockage, une SD à un débit max de 1 mo/s et la CF à 3mo/s. Il faut donc que la lecture de notre fichier vidéo ne dépasse pas ces limites sous peine de bloquer.

Dans une vidéo, la compression du son et de l'image est exprimé en kbps (kilo bit par secondes). Si l'on prends la SD comme limite, il faut donc que l'audio et la vidéo ne dépasse pas 7000 kbps. Autant dir que l'on a de la marge et que la SD ou la CF du Zaurus ne seront pas un problème ici. Nous n'allons cependant pas utiliser toute la bande passante disponible de la SD car il ne fait pas oublier que plus la SD (et la CF) travaille, plus le CPU est occupé. Un bon compromis que j'ai trouvé est une bande audio à 96kbps et vidéo à 500kbps. A ce débit, la décompression et lecture d'une vidéo prends environ 40% du CPU avec mplayer (en utilisant l'option -vo null pour ne rien afficher, seulement décoder). Reste donc 60% pour l'affichage.

Un autre aspect de la lecture d'une vidéo à prendre en compte est.. l'affichage. En effet, pour le C1000, c'est le CPU qui gère l'écran (à contrario des modèles 7/8XX qui avaient une puce dédiées). Hors le processeur du SL-C1000 est bien incapable de prendre en charge une image qui change 25 fois par secondes en 640X480 avec seulement 60% de puissance disponible. La solution pour une lecture fluide est donc de réduire la résolution de la vidéo à 320x240. Ainsi, en basculant l'affichage du Zaurus dans la même résolution (Fn+2 ou xrandr 1 en ligne de commande), nous aurons quatre fois moins de points à animer tout en étant en plein écran. Certes, nous y perdons en définition mais bon, c'est un Zaurus, pas un home cinéma !

Encodage

Pour encoder nous allons utiliser mencoder sous linux. Il est disponible sous toutes les distribution et fonctionne conjointement avec mplayer. Prenons l'exemple donc de l'encodage de "Revelations". Nous avons une image iso qu'il va faloir d'abord monter :

rootmkdir dvd
rootmount revelations.iso dvd -o loop

Nous allons ensuite déterminer la piste à encoder :

gastonlsdvd -a dvd

Bon, il s'agit de la pise n°9 (40 minutes). Nous voyons au passage que la bande audio est à l'id 128 et le sous titre d'id 0. Muni de ces informations nous allons faire une première passe d'encodage :

gastonrm frameno.avi *.log
gastonmencoder  -oac mp3lame -lameopts preset=96 -aid 128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=500:vpass=1 -vop scale=320:240 -sws 9 -noaspect -aid 128 -af volume=20:1 -endpos 00:00:10 -dvd-device ../test dvd://9 -o /dev/null

Cette première passe encode notre DVD "pour de faux", histoire de réunir des statistiques qui vont permettre l'encodage réelle de qualité. Ici j'ajoute un filtre audio pour forcir le volume un peu faible du Zaurus (-af volume=20:1), et j'opère un redimensionement de l'image d'origine (720x540) version une résolution qui rentre dans du 320x240, soit 320 x 540 / 720 = 240. Une fois la première passe effectuée, un fichier frameno.avi a été généré, il va service à l'encodage réel qui consiste à reprendre la même ligne en ajoutant un nom de fichier de sortie :

gastonmencoder  -oac mp3lame -lameopts preset=96 -aid 128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=500:vpass=1 -vop scale=320:240 -sws 9 -noaspect -aid 128 -af volume=20:1 -endpos 00:00:10 -dvd-device ../test dvd://9 -o revelations-zaurus.avi

Au bout d'un temps, la vidéo est prête. Il suffit de la transférer sur le Zaurus et de la lire avec mplayer :

gastonxrandr 1
gastonmplayer /mnt/card/revelations-zaurus.avi

Pressez la touche f pour passer en plein écran et attraper les pop-corns.

Ajout des sous-titres

Les sous-titres du dvd peuvent être encodés avec la vidéo mais pour que cela soit plus sympa à lire, on va décaller l'image vers le haut pour qu'ils s'affiche dans la bande noire, il faut pour cela ajouter remplacer les paramètres -vop par :

-vop scale=320:235,expand=0:-50:0:0

et rajouter le sous-titre avec l'option

-sid 0

Et voilà, maintenant vous avez une vidéo parfaite (du moins à mon goût) qui ne saccade pas.