Archive for the ‘video’ Category

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

Jeudi, mars 20th, 2008

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 : 960×540p
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

Monter un serveur FTP sur son système de fichiers avec FUSE et CurlFTPfs

Vendredi, mars 9th, 2007

FUSE et CurlFTPfs, pourquoi faire ?

Je suis désormais abonné chez Free (le seul FAI à proposer l’IP fixe à un coût modéré) et après avoir installé et initialisé ma Freebox HD (boîtier qui permet de regarder/enregistrer la télé entre autres), j’ai voulu transférer des fichiers sur son disque dur afin de pouvoir les visionner sur la télé…
J’ai alors utilisé Konqueror et me suis dirigé vers :
ftp://freebox@hd1.freebox.fr/Disque dur/Video
J’ai ainsi pu transférer mes fichiers par simple copier/coller…
Mais comment faire aussi simple, voire même plus simple, pour transférer d’une machine qui n’a pas d’interface graphique (juste un shell) vers la Freebox HD ?
Tout simplement en montant la freebox comme un système de fichier en utilisant FUSE et CurlFTPfs…

Installation de FUSE et CurlFTPfs et premier montage

Sous Ubuntu installer curlsFTPfs :
#apt-get install curlftpfs
(il peut être utile à cette étape de charger le module fuse : # modprobe fuse)
Il vous installera alors curlftpfs, et fuse-utils, et créera un groupe “fuse”.
Edit : en fait, Ubuntu n’intègre pas le paquet CurlFTPFS, aussi, le meilleur moyen de l’installer est de suivre l’article dédié à CurlFTPfs sur Ubuntu-fr.org. (Merci à Cyril, et la prochaine fois poste un commentaire pour en faire profiter tout le monde !).
Connectez vous alors sous un utilisateur non privilégié et créer un répertoire pour accueillir le montage :
% mkdir freebox
Essayez alors de monter votre freebox sur ce point de montage :
curlftpfs ftp://freebox@hd1.freebox.fr freebox
fuse: failed to exec fusermount: Permission denied

Oups ! vous n’avez pas les droits …Mais souvenez vous, un groupe fuse a été créé !
Avec root, ajoutez l’utilisateur au groupe fuse, et vérifiez :
# usermod -G fuse anthony
Attention, en faisant ceci j’ai supprimé tous les rattachements de groupe de l’utilisateur (ie: il n’appartenait plus qu’au groupe “fuse” pour éviter ceci , veuillez plutôt tapez :
# usermod -a -G fuse anthony

Ceci est plus simple ….
#adduser anthony fuse
# groups anthony
anthony : anthony fuse

OK, pour prendre en compte les changements, relogguez vous de nouveau avec votre utilisateur, et ré essayez !
% curlftpfs ftp://freebox@hd1.freebox.fr freebox
(Si vous avez encore une erreur , avec root, # chmod +x /usr/bin/fusermount)
Vous pouvez alors naviguer dans le disque dur de votre Freebox HD, comme si celui était en local !
% cd freebox/Disque\ dur/Video
~/freebox/Disque dur/Video% cp /home/anthony/fichier.avi ./
~/freebox/Disque dur/Video% ls
fichier.avi

vous pouvez aussi démonter l’attachement de votre freebox :
% fusermount -u /home/anthony/freebox

Automatiser le montage curlftpfs au démarrage de la machine

Pour cela il suffit de rajouter une entrée dans /etc/fstab , comme si on rajoutait une partition de disque ou un partage nfs, avec la ligne suivante :
curlftpfs#freebox@hd1.freebox.fr /home/anthony/freebox fuse allow_other 0 1
En attendant le redémarrage un simple :
#mount /home/anthony/freebox
fera l’affaire et tous les utilisateurs du système peuvent déposer/récupérer des fichiers sur la freebox HD

Liens

Je me suis bien inspiré de cet article :
Article sur FUSE et curlftpfs sur Coagul
d’ailleurs leur article explique comment procéder avec un compte FTP nécessitant un mot de passe.
Liste des montages possibles avec FUSE
La page officielle de CurlFTPfs

Convertir ses vidéos avec Linux

Lundi, septembre 11th, 2006

J’utilise aujourd’hui sur mon ordinateur la distribution Linux Kubuntu (Ubuntu avec le gestionnaire de bureaux KDE) comme système d’exploitation principal, et il m’arrive de vouloir convertir des vidéos dans un tel ou tel format pour pouvoir les visionner sur le web ou sur mon ipod ou encore sur ma platine DVD/DivX.
Heureusement pour moi, Linux regorge de logiciels très puissant de conversion de vidéo.

Les essais suivants ont été réalisés sur une Debian Sarge Stable.

Prérequis :

Vous devez avoir les logiciels et librairies adéquates.
Vous devez installer Mencoder, ffmpeg, et des librairies annexes (les codecs w32, mp3, etc…)
Sur une debian j’ai utilisé les repositories suivants :
/etc/apt/sources.list :

deb http://security.debian.org/ stable/updates main non-free contrib
deb-src http://security.debian.org/ stable/updates main contrib non-free

deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

deb ftp://ftp.debian.org/debian/ sarge main non-free contrib
deb-src ftp://ftp.debian.org/debian/ sarge main non-free contrib

deb http://www.debian-multimedia.org stable main
deb-src http://www.debian-multimedia.org stable main

#apt-get install mencoder ffmpeg w32codecs lame libavcodeccvs51 libavutilcvs49 libdvdread3 libpostproccvs51 libxvidcore4 mplayer-doc

N’hésitez pas à poster en commentaires les sources pour une distribution !

Convertir une video pour la lire sur platine DivX Kiss DP 1500

Le problème :

La platine KISS DP 1500 est un lecteur DVD/DivX (et Xvid) de salon qui a la particularité de pouvoir lire des fichiers videos se situant sur un réseau local (elle dispose d’un port ethernet pour cela). Ainsi pas besoin de graver ses films pour les regarder…
Malheureusement, les formats d’encodage (codecs) MPEG 4 évoluent et le constructeur de ma platine, KISS, n’est pas très sérieux et ne remet plus à jour le firmware de la platine.(d’ailleurs ce n’est pas l’unique problème avec eux, ils ont aussi violé une licence GPL).
Ainsi ma platine ne lit désormais que très peu de fichiers videos…

La solution :
Convertir mes vidéos dans un format qu’elle supporte! (en l’occurence du XviD/MP3 avec un bitrate de 1200 et en 4/3 –> ne change pas l’aspect de l’image)
Avec mencoder :

mencoder fichier_a_convertir.avi -ovc xvid -xvidencopts bitrate=1200 -oac mp3lame -aspect 4:3 -o nom_du_fichier_resultat.avi

Pour “industrialiser” le processus, voici le script shell qui vous permettra de convertir par lots :

if [ -z "$1" ]; then
echo “Usage: $0 list_of_video_files”
exit 1
fi
# video encoding bit rate
V_BITRATE=1200
while [ "$1" ]; do
MENC_OPTS=”-ovc xvid -xvidencopts bitrate=$V_BITRATE -oac mp3lame -aspect 4:3″
mencoder “$1″ $MENC_OPTS -o “`basename $1 .avi`_convertie.avi”
shift
done

Vous pouvez le télécharger en utilisant le lien ci-dessous :
mencoder_video_to_kiss_dp_1500.sh

Pour utiliser ce script, il vous suffit de taper :
sh mencoder_video_to_kiss_dp_1500.sh file1.avi file2.avi ./
Pour convertir les fichiers file1.avi et file2.avi en file1_convertie.avi et file2_convertie.avi (dans le répertoire courant)

Convertir une video pour la lire sur un Ipod Video (5ème génération)

Encore une fois, MEncoder va nous aider à transporter nos vidéos favorites dans notre poche.

Le problème
L’Ipod Video ne supporte qu’un format très limité de formats de vidéos

La solution
Cette simple ligne nous suffira :

ffmpeg -i fichier_d_entre.avi -f mp4 -vcodec mpeg4 -maxrate 1000 -b 700 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac -ab 192 -s 320×240 -aspect 4:3 fichier_de_sortie.mp4

Je l’ai récupéré sur le site suivant :Video Ipod And Linux
Pour “industrialiser” le processus, et laisser tourner la conversion pendant la nuit par exemple, j’ai concocté le petit script shell suivant :

#!/bin/sh
if [ -z "$1" ]; then
echo “Usage: $0 list_of_video_files”
exit 1
fi

while [ "$1" ]; do
FFMPEG_OPTS=”-f mp4 -vcodec mpeg4 -maxrate 1000 -b 700 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac -ab 192 -s 320×240 -aspect 4:3″
ffmpeg -i “$1″ $FFMPEG_OPTS “`basename $1 .avi`.mp4″
shift
done

Vous pouvez le télécharger en utilisant le lien ci-dessous :
ffmpeg_video_to_ipod_video.sh

Pour utiliser ce script, il vous suffit de taper :
sh ffmpeg_video_to_ipod_video.sh file1.avi file2.avi ./
Pour convertir les fichiers file1.avi et file2.avi en file1.mp4 et file2.mp4 (dans le répertoire courant), tout juste prêtes à être transférées sur votre ipod.
A ce propos, j’utilise encore iTunes pour transférer les vidéos, mais des personnes ont déjà réussi avec libgpod et amarok (LE lecteur de musique sous Linux); je reviendrai dessus quand j’aurai réussi ;-)

Convertir une video avec FFMPEG pour la lire sur le web avec un player flash

Le problème
Vous avez tourné un film de quelques minutes et forcément çà prend un peu de place…
Alors oui, avec l’ADSL çà va assez vite à télécharger, encore faut il que la personne qui la télécharge dispose des bons codecs sur son ordinateur…
Et en général, dans la famille, tout le monde ne sait pas installer de nouveaux codecs et/ou installer VLC.
Ou alors il faut encoder en Windows Media (oui mais y’a que sous Windows qu’on trouve les derniers encodeurs) ou encore en Real ou encore Quicktime (en fait c’est pas tout le monde qui les a installés sur son ordinateur..)
Pas de panique ! Macromedia (pardon, Adobe…) avec son Flash propriétaire a compris qu’il pouvait profiter de son parc installé de lecteur Flash (pour mémo, 98% des internautes ont Flash sur leur machine aujourd’hui).
Ainsi les videos au format Flash s’impose sur le Web…
Mais alors pourquoi se fatiguer à les convertir soit même lorsque YouTube, GoogleVideos et consorts ont une super interface super ergonomique pour le faire ?
Et bient tout simplement, pour éviter de passer par un tiers qui prend le temps qui veut pour convertir la vidéo et qui surtout disposera de votre contenu sur ses serveurs (que vous ne contrôlez à priori pas trop)…

La solution
Commençons par convertir la vidéo en flv (format de video de flash)
ffmpeg -i movie.avi -s 320x240 -r 15 -b 250 -ar 22050 -ab 48 movie.flv
Vous remarquerez que la video movie.avi est ici convertie en 324×240 en 15 images/seconde, bitrate video de 250 kbps et le son échantillonné à 22 050Hz au bitrate 48kbps.
Bref, vous pouvez modifier ces paramètres à volonté.
Pour faire bien, nous allons prendre un cliché de la video :
ffmpeg -i movie.avi -f mjpeg -t 0.001 movie.jpg

Pour lire cette vidéo, nous avons besoin d’un lecteur de flv, au format Flash (SWF).
Il existe le lecteur Flash libre FlowPlayer afin de lire ces vidéos.
Pour l’utiliser, une fois qu’il est téléchargé, écrivez ce code dans un fichier HTML en faisant (bien) attention aux chemins :

<object type=”application/x-shockwave-flash” data=”[your site]/FlowPlayer.swf” width=”320″ height=”263″ id=”FlowPlayer”>
<param name=”allowScriptAccess” value=”sameDomain”/>
<param name=”movie” value=”[your site]/FlowPlayer.swf”/>
<param name=”quality” value=”high”/>
<param name=”scale” value=”noScale”/>
<param name=”wmode” value=”transparent”/>
<param name=”flashvars” value=”baseURL=[base URL]&videoFile=movie.flv
&autoPlay=false&loop=false&autoBuffering=false
&splashImageFile=movie.jpg”/>
</object>

Et le tour est joué !!!
Pour parfaire le résultat, vous pouvez aussi ajouter un index à vos vidéos pour pouvoir afficher une barre de défilement.
Vous pouvez alors utiliser l’outil libre FlvTool2, écrit en Ruby.
Il vous faut alors installer ruby sur votre système (sur debian quelques apt-get sur ruby suffisent…) et télécharger la tarball de Flvtool2, l’ouvir avec

tar xvzf flvtool2-1.0.6.tgz

et lire les instructions du README.
Cela étant fait, le rajout de vos index se feront simplement avec la commande :
flvtool2 -U movie.flv
Attention à ce que les noms de fichiers ne soient pas trop longs !!!
Tout ceci est “industrialisé” dans le script shell suivant :

#!/bin/sh
if [ -z "$1" ]; then
echo “Usage: $0 list_of_video_files”
exit 1
fi
while [ "$1" ]; do
ffmpeg -i $1 -s 320×240 -r 15 -b 250 -ar 22050 -ab 48 $1.flv
ffmpeg -i $1 -f mjpeg -t 0.001 $1.jpg
flvtool2 -U $1.flv
shift
done

Ce dernier tutorial sur l’encodage d’une video en flash est une traduction libre de l’article :
Posting Flash Videos with FFmpeg and FlowPlayer
par Scott Yang