Diffusez vos vidéos HD en H264 sur le web !

Depuis la version 9 (update 3) de flash, le plugin propriétaire présent sur 98% des navigateurs internet, il est possible de lire des fichiers vidéos non plus seulement au format maison .flv (un dérivé de h263) mais aussi au standard H264, codec vidéo très performant !
Je vous propose de vous même encoder vos vidéos au format H264, à l’aide d’outils libres, ffmpeg en l’occurrence, et d’ensuite les diffuser sur internet via un lecteur de vidéo au format flash, qu’il vous suffira d’insérer dans vos pages web !
(à vous de voir après si vous préférez laisser la diffusion de vos vidéos à une régie publicitaire comme youtube et consorts !)
Je me sers de cette procédure pour diffuser des vidéos issues de mon camescope Sony HDR-HC7E en haute définition (1440 PAR 1.33 x 1080 entrelacé) dans une résolution correcte : 960x540p
Dans tout ce tutorial, le ‘%’ correspond à l’invite de commande de mon shell.

Installation de FFMPEG du dépôt subversion sur Ubuntu Gutsy 7.10 : (aussi testé sur Ubuntu Feisty 7.04)

Dans un premier temps :
%sudo apt-get build-dep ffmpeg
Selon le man de « apt-get », « Avec la commande build-dep, apt-get installe ou supprime des paquets dans le but de satisfaire les dépendances de construction d’un paquet source. »
Ensuite, installons les librairies multipmédias nécessaires et aussi Subversion, car nous allons avoir besoin de récupérer la toute dernière version de ffmpeg :
%sudo apt-get install liblame-dev libfaad2-dev libfaac-dev libxvidcore4-dev liba52-0.7.4 liba52-0.7.4-dev libx264-dev libdts-dev checkinstall build-essential subversion
On récupèrele code source de ffmpeg par svn :
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
Il est temps de compiler ffmpeg, pour cela, rendons nous dans le répertoire du ffmpeg récemment récupéré :
%cd ffmpeg
Au cas où vous avez déjà compilé : (sinon çà fait pas de mal)
%make distclean
on configure :
%./configure --enable-gpl --enable-pp --enable-libvorbis --enable-libtheora --enable-liba52 --enable-libdc1394 --enable-libgsm --enable-libmp3lame --enable-libfaad --enable-libfaac --enable-libxvid --enable-pthreads --enable-libx264
et on compile :
make
Ça prend un peu de temps, mais au bout, vous obtiendrez dans votre répertoire un ffmpeg compilé avec le support de h264 (entre autres encodeurs).
Vous pourriez l’installer avec sudo checkinstall et sudo make install, mais je préfère le garder à part de /usr/bin au cas où un jour je veuille utiliser le ffmpeg de ma distrib)
Tant que nous sommes à la compilation, compilons qt-faststart (j’explique peu après à quoi sert qt-faststart : déplacer les entêtes, les metadata, au début du fichier video):
Compiler qt-faststart.c

gcc -O3 -g -Wdeclaration-after-statement -Wall -Wno-switch -I -I$REP_SVN_FFMPEG/ffmpeg -I$REP_SVN_FFMPEG/ffmpeg/libavutil -I$REP_SVN_FFMPEG/ffmpeg/libavcodec -I$REP_SVN_FFMPEG/ffmpeg/libavformat -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE $REP_SVN_FFMPEG/ffmpeg/tools/qt-faststart.c -o qt-faststart

en remplaçant $REP_SVN_FFMPEG par le chemin complet du répertoire du ffmpeg récupéré par svn.
Et voilà, fini pour l’installation ! place à l’utilisation !

Encodage du fichier video en H264

En remplaçant $REP_SVN_FFMPEG par le chemin complet du répertoire du ffmpeg récupéré par svn,

$REP_SVN_FFMPEG/ffmpeg/ffmpeg -i ma_video.m2t -vcodec libx264 -b 800k -ab 128k -s 960×540 -deinterlace ma_video.mov

cà peut être (très, 5fps) long …

Déplacement de l’entête MOOV ATOM au début du fichier

Malheureusement, si vous laissez la vidéo obtenue telle quelle, avant de pouvoir la visionner, vous serez obligé de la télécharger en entier; car les métadata du fichier, MOOV ATOM, sont placées à la fin du fichier, et non au début.
C’est alors que qt-faststart rentre en scène :

$REP_SVN_FFMPEG/ffmpeg/tools/qt-faststart ma_video.mov ma_video_fast.mov

Pour diffuser votre vidéo sur le web, vous pouvez utiliser la dernière version de FlowPlayer, et consulter mon article à son sujet ! (j’essaierai de le mettre plus à jour prochainement !)

Bonne diffusion !

Références :
How to encode in H264 for web broadcasting
La mailing list du site officiel de FFMPEG
La communauté de FlowPLayer à propos de H264