Convertir ses vidéos avec Linux

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

13 réflexions sur « Convertir ses vidéos avec Linux »

  1. Hello
    J’ai trop de mal à le faire foncitonner ce plugin…
    Mes vidéo, je les encodées en 2 secondes, mais là, pour le plugin flash, je sèche.
    Voilà mon code:

    Tu vois qqchose de mal?

  2. bon, on voit pas mon code dans le commentaire… p’tet normal point de vue sécurité(?) ou propreté (on va dire). Le revoici, en pas propre du tout:
    < ob ject type=”application/x-shockwave-flash” data=”http://www.galadroit.com/images/FlowPlayer.swf” width=”320? height=”263? id=”FlowPlayer”>
    < p aram name=”allowScriptAccess” value=”sameDomain”/>
    < param name=”movie” value=”http://www.galadroit.com/images/FlowPlayer.swf”/>
    < param name=”quality” value=”high”/>
    < param name=”scale” value=”noScale”/>
    < param name=”wmode” value=”transparent”/>
    < param name=”flashvars” value=”baseURL=http://www.galadroit.com/images&videoFile=GalaDroit2005hq.flv&autoPlay=false&loop=false&autoBuffering=false&splashImageFile=http://www.galadroit.com/images/GalaDroit2005.jpg”/>
    < / object>

  3. yes ça marche!
    Les quotes étaient penchées (??), et mon flv n’avait pas de son. Heuresement que tu l’as passé dans ta moulinette, sinon ça aurait pas été prêt à temps.

    Cimer albert!

  4. Bonjour,

    J’aurai besoin d’un peu d’aide car la tout fonctionne mais je n’ai pas de sons :s

    Pourtant la compression and co ce fait bien avec le sont donc je capte pas trop :s

    Une idée ?

    Stream #0.0: Video: flv, yuv420p, 320×240, q=2-31, 200 kb/s, 25.00 fps(c)
    Stream #0.1: Audio: mp3, 22050 Hz, stereo, 32 kb/s
    Stream mapping:
    Stream #0.0 -> #0.0
    Stream #0.1 -> #0.1
    Press [q] to stop encoding
    frame= 3426 q=3.7 Lsize= 4264kB time=137.0 bitrate= 254.9kbits/s
    video:3590kB audio:536kB global headers:0kB muxing overhead 3.337885%

    Pourtant y a rien …
    http://ik59157.ikexpress.com/

    Merci de votre aide !!!

  5. bonjour,

    je n’arrive pas à faire en sorte que ffmpeg encode le son de mes vidéos avi. je suis sous ubuntu edgy ?

    quelqu’un peut-il m’aider ?

    Par exple :

    frame= 4796 q=2.0 Lsize= 9254kB time=319.7 bitrate= 237.1kbits/s
    video:9179kB audio:0kB global headers:0kB muxing overhead 0.818159%

    d’avance merci

  6. Comme cet article m’a bien été utile, j’apporte ma contribution :
    d’abord on peut avec epiphany sous debian (dsans doute sous ubuntu) utiliser FLOVER qui permet de récupérer les flv super simplement mais un peu chiant à mettre en place)
    puis utiliser la manip du message mais quicomporte des erreurs, et donc voici le code fonctionnel pour le html
    script actualisé
    <object type= »application/x-shockwave-flash » data= »http://www/xxxxxx/flowplayer/FlowPlayer.swf » width= »425″ height= »335″ id= »FlowPlayer »>
    </object>

  7. Comme cet article m’a bien été utile, j’apporte ma contribution :
    d’abord on peut avec epiphany sous debian (dsans doute sous ubuntu) utiliser FLOVER qui permet de récupérer les flv super simplement mais un peu chiant à mettre en place)
    puis utiliser la manip du message mais quicomporte des erreurs, et donc voici le code fonctionnel pour le html
    script actualisé
    <object type= »application/x-shockwave-flash » data= »http://www/xxxxxx/flowplayer/FlowPlayer.swf » width= »425″ height= »335″ id= »FlowPlayer »>
    < param name= »allowScriptAccess » value= »sameDomain »>
    <param name= »movie » value= »http://www/xxxxxx/flowplayer/FlowPlayer.swf »>
    <param name= »allowFullScreen » value= »true »>
    <param name= »quality » value= »high »>
    <param name= »scale » value= »noScale »>
    <param name= »wmode » value= »transparent »>

    <param name= »flashvars » value= »config={playList: [ { url: ‘http://www/xxxxxx.flv’ } ], fullScreenScriptURL: ‘http://www/xxxxxx/flowplayer/fullscreen.js’ }] »>
    </object>

  8. bonjour, et merci pour cette précision (je n’ai pas encore testé le bout de code que tu as posté, mais il est possible que celui que j’ai donné à l’origine ne soit pas parfait…)
    Pour ce qui est de FLOVER, c’est outil semble bien différent de ce que je décris : il permet de récupérer des videos des sites youtube et consorts, ce qui n’était pas le but de ma manoeuvre…(convertir vidéos perso en flv)
    Je garde l’URL de cet outil sous le coude, sait on jamais !
    Merci à bientôt !

  9. Bonsoir Anthony,

    Suite aux messages précedents, et dans le même cas que M1N05, j’aurais besoin de ton aide pour faire fonctionner ce tres beau plugin dans joomla 1.5.
    Lorsque j’essaye d’integrer le code que tu as donné sur ton blog, rien à faire, il n’y a point de lecteur.
    A tout hasard, j’ai fait une simple page html avec notepad, et meme là, rien. Firefox me dit simplement qu’il lui manque des plugins (le dernier flash est en place pourtant).
    Je te joins le code de la page html d’exercice au cas ou tu aurais 5 mns à me consacrer. Ce doit surement etre 3 fois rien, mais ne connaissant rien au html, php, java etc, etc, j’ai un peu de mal…
    ***********

    Flowplayer Test

    ******************
    Le répertoire du site est http://localhost/test.
    Le html est à la racine du site ainsi que le lecteur.
    Le répertoire « html » qui contient 6 fichiers est également à la racine.
    Le fichier flash est dans /images/stories/videos.
    Le flv est final.flv.

    D’avance merci à toi pour ton aide.

    Stéphane.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *