Encodage de vidéos pour N900 en h264 avec ffmpeg

Nokia N900 communicator/internet tablet

Image via Wikipedia

Le lecteur intégré du n900 est capable de lire plusieurs formats de vidéo dont le plus intéressant est le h264 qui est le plus performant en terme de compression. Le décodage ce fait par la puce DSP ce qui impose des limitations si on veut profiter de l’accélération matérielle et du gain d’autonomie qui en découle.

Le h264 définie plusieurs niveaux de critères de performance des lecteurs. Le n900 est donné comme supportant le niveau baseline 3 mais il se trouve que ce n’est pas vrai. Des vidéos encodées baseline 3 par ffmpeg peuvent ne pas êtres lues par le lecteur intégré du n900. Il vaut mieux se contenter du baseline 2.1.

La baseline n’est pas le seul critère pour la conversion. La taille de l’image en est un autre. En effet la résolution de l’écran du N900 est 800×480. Il est donc inutile de convertir dans une taille supérieure. De plus cette résolution n’est pas multiple de 16 or cela est un critère qui facilite l’encodage. Donc il faut choisir une résolution plus petite mais respectant un facteur 16.

Ffmpeg est un outil en ligne de commande qui permet de convertir des fichiers vidéo. Les options principales sont :

  • -i le fichier d’entrée
  • -acodec le codec pour l’audio, libfaac
  • -vcodec le codec pour la video, libx264

Le choix de la résolution de la vidéo encodée dépend de celle de départ. Nous traitons ici le cas de fichier vidéo issus de la diffusion des chaines de la TNT via l’ADSL. Prenons l’exemple de la diffusion d’une chaine en 16:9 mais en simple définition. L’analyse des informations du flux enregistré (un fichier .ts) fait apparaitre une vidéo 480×576. C’est la résolution de stockage (SAR). Si on affichait l’image telle quelle, elle serait déformée car écrasée par les cotés. L’image s’affiche pourtant correctement dans un lecteur. C’est parce que le fichier contient aussi une information sur le facteur d’écrasement (PAR) qui indique de combien on doit étirer l’image dans chacun des axes pour obtenir la vidéo affichable. Le résultat est une image au format 16:9 (indiquée par la valeur DAR). Le lecteur vidéo est sensé interpréter correctement les informations de DAR et PAR afin d’étirer l’image et lui donner le bon aspect. Notre objectif étant de ne pas perdre de la surface d’image (couper l’image) tout en  maximisant la qualité, nous choisissons de réduire la hauteur à 480 ( résolution de l’écran du N900) et de conserver le SAR i.e réduire proportionnellement la largeur de l’image soit 400 (480*480/576=400). Par chance cette taille d’image est multiple de 16. Finalement une vidéo e 480×576 sera redimensionnée en 400×480.

Il existe malheureusement de nombreuses résolutions de stockage (SAR) et la règle de 3 ne tombe pas toujours pile sur un multiple de 16. Heureusement que ffmpeg modifie automatiquement le PAR afin de conserver le DAR. Donc on peut choisir arbitrairement une résolution d’image de stockage multiple de 16 en prenant en compte les 2 critères

  1. maximisation de la taille pour ne pas trop perdre en information
  2. ne pas dépasser les limites de la résolution de l’écran du N900

En faisant un test sur les chaines de la TNT sur une Freebox, voici ce que l’on obtient (par abus de langage nous appelons SAR la taille de l’image)

Source SAR source DAR SAR encodée
France 2 1440×1080 16:9 640×480
France 3 544×576 16:9 400×480
France 4 480×576 16:9 400×480
France 5 480×576 16:9 400×480
Arte 1440×1080 16:9 640×480
Direct 8 1440×1080 16:9 640×480
La chaîne parlementaire 480×576 16:9 400×480
RTL9 720×576 16:9 592×480
TMC 544×576 16:9 400×480
NRJ 12 1440×1080 16:9 640×480
NT1 544×576 16:9 400×480
DirectStar 720×576 16:9 592×480

La dernière colonne du tableau précédent donne la taille de l’image dans la vidéo encodée. Cette taille est spécifiée par l’option -s dans ffmpeg.

Le codec h264 nécessite un certain nombre de réglage que voici:

  • -vpre baseline définie des réglages pour que la vidéo soit conforme au profil baseline (i.e. pour appareil mobile ou à faible ressource)
  • -vpre hq définie des paramètres pour obtenir une qualité élevé (fixe le niveau 3 du profil baseline ?)
  • -crf 25 indique la qualité de l’image souhaitée  (petite valeur pour meilleur qualité) en contrepartie d’un usage de bande passante (bitrate) variable
  • -maxrate 1000k indique a bande passante (bitrate) maximum. Cela est utile pour limiter la taille de la vidéo et le besoin en bande passante I/O.  1000kbit/s.
  • -bufsize 2000k buffer necessité par l’option -maxrate. 2000kbit.
  • -flags2 -fastpskip permet d’augmenter légèrement la qualité

Non spécifique au h264 mais supporté par tous les processeurs récents :

  • -threads 0 indique d’utiliser les capacités multithread du CPU

Supposons que l’on ait un fichier video (France2.ts)  issu d’un enregistrement de la chaine France 2, voici la commande de conversion
$ ffmpeg -i France2.ts -acodec libfaac -vcodec libx264 -vpre hq -vpre baseline -crf 25 -maxrate 1000k -bufsize 2000k -threads 0 -flags2 -fastpskip -s 640x480 France2.mp4

Au bout d’un temps assez long puisque supérieur à la durée de la vidéo originale (sur un Core2 Duo 2.4 Ghz et 4 Go de mémoire), on obtient un fichier mp3 lisible sur le N900 via le lecteur multimédia intégré.

Cet article, publié dans Application, Paramétrage, est tagué , , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s