Catégories
Gstreamer Open-source Planet-libre Video

Scripts de transcodage de vidéos

Il existe de nombreux logiciels pour transcoder (WIKI) une vidéo d’un format vers un autre. On peut notamment citer Transmageddon, Handbrake, VLC… Néanmoins, votre distribution GNU/Linux intègre le framework GStreamer permettant d’effectuer ces taches de transcodage directement en ligne de commande et sans installer de logiciel supplémentaire. En dehors du fait que c’est un bon exercice pour comprendre le fonctionnement de ce fabuleux framework, c’est également un moyen simple d’intégrer ce transcodage dans des scripts automatisés (par exemple, transcoder toutes les vidéos déposées dans un répertoire dans un format unique).

Nous allons dans ce billet voir comment effectuer ce transcodage dans trois formats « standard » (industriellement parlant…):

  • MP4 avec codec vidéo H.264 et codec audio AAC
  • OGG avec codec vidéo Theora et codec audio Vorbis
  • WEBM avec codec vidéo VP8 et codec audio Vorbis

Installation des plugins GStreamer

L’installation standard de GStreamer n’inclue pas la prise en charge de tout les codecs vidéos et audios. Afin de remédier à ça, je vous conseille d’installer « la totale » avec les commandes suivantes:

wget https://raw.github.com/nicolargo/ubuntupostinstall/master/gstreamerinstall.sh

chmod a+x ./gstreamerinstall.sh

sudo ./gstreamerinstall.sh

rm ./gstreamerinstall

Ces commandes vont récupérer un script maison qui va installer le PPA de l’équipe de développement de GStreamer, puis installer les paquets GStreamer.

Un peu de pipeline

Je donnerai en fin d’article un lien vers trois scripts shell qui vont automatiser les phases de transcodage. Cependant, nous allons dans ce paragraphe voir comment faire un transcodage à la main en utilisant la commande gst-launch.

Pour illustrer notre exemple, prenons une vidéo au format .MOV (H.264 + AAC) que l’on soughaite convertir dans un format plus « libre », c’est à dire WEBM (VP8 + VORBIS). La pipeline (ligne de commande) correspondante est la suivante:

gst-launch -t filesrc location=source.mov ! progressreport ! decodebin name=decoder \

decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \

webmmux name=muxer \

decoder. ! queue ! ffmpegcolorspace ! vp8enc ! queue ! \

muxer. muxer. ! queue ! filesink location=destination.webm

La première ligne (filesrc location=source.mov ! progressreport ! decodebin name=decoder \) permet de charger le fichier source au format .MOV et de décoder les pistes audio et vidéo.

La seconde ligne (decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \) prend la piste audio du fichier source et la transcode au format VORBIS.

La troisième ligne (webmmux name=muxer \) précise que l’on utilisera un conteneur multimédia de destination de type Webm.

La quatrième ligne (decoder. ! queue ! ffmpegcolorspace ! vp8enc ! queue ! \) prend la piste vidéo du fichier source et la transcode au format VP8.

Enfin la dernière ligne (muxer. muxer. ! queue ! filesink location=destination.webm) prend les pistes audio et vidéo transcodées puis génère le fichier destination au format .WEBM.

Des scripts ! Des scripts !

« C’est bien beau la théorie mais moi je veux juste faire rapidement un transcodage… »…

Ok Michel, voici trois script shell permettant de faire un transcodage de n’importe quel type de vidéo vers un des formats suivants:

Pour les utiliser, il faut dans un premier temps les rendre executable avec la commande:

chmod a+x *encoder.sh

L’utilisation est des plus simple. Exemple de transcodage en MP4:

./mp4encoder.sh Inception-1080p.mov

Exemple de transcodage en OGG:

./oggencoder.sh Inception-1080p.mov

Exemple de transcodage en WEBM:

./webmencoder.sh Inception-1080p.mov

Et si je veux modifier les paramètres de transcodage ?

Ben c’est possible Miche, Nicolargo a pensé à toi. Il suffit d’éditer le script puis de mettre les paramètres dans la variable AUDIO_ENCODER_PARAMETERS pour le codec audio et VIDEO_ENCODER_PARAMETERS pour le codec vidéo.

Par exemple pour modifier le script webmencoder.sh afin d’encoder avec une qualité vidéo supérieure, il faut éditer le fichier et modifier la ligne suivante:

VIDEO_ENCODER_PARAMETERS= »quality=7 speed=2″

Pour avoir la liste des paramètres pour un codec (par exemple pour l’encodeur VP8 ; vp8enc), il faut saisir la commande suivante:

gst-inspect vp8enc

Conclusion

C’est à vous de jouer pour intégrer ces scripts dans vos processus d’automatisation de transcodage de vidéo/audio !

Catégories
Gstreamer Open-source Video Web

MyScreenCast, comment faire du screencast avec GStreamer

Je ne sais pas vous mais je n’arrive pas à trouver LE logiciel de screencast libre ultime pour mon PC Linux. J’ai essayé Istanbul (le résultat est très mauvais sur ma distribution Ubuntu 10.04), XVidCap (pas d’enregistrement du son) et même VLC (un peu usine à gaz pour ce besoin)… Seul RecordMyDesktop sort du lot bien que son interface graphique d’administration (gtk-recordmydesktop) ne soit pas des plus ergonomique.

Ce billet est donc un appel à la communauté pour développer CE logiciel en question !

Nous allons dans un premier temps donner les bases techniques permettant de faire un screencast à partir du framework GStreamer (fourni en standard sous Linux). Puis donner dans les grandes largeurs les spécifications DU logiciel.

On commence par la fin: le résultat

Voici le screencast obtenu (format libre OGV – Theora/Vorbis – hébergé sur blip.tv): si votre navigateur est compatible…

Sinon vous pouvez toujours consulter la vidéo en ligne sur Blip.tv ou sur Vimeo (codec H.264/AAC)

Les fichiers générés sont au format HD 720p et ont une taille d’environ 11 Mo pour le format M4V et 13 Mo pour le format OGV.

Screencast avec GStreamer en ligne de commande

On commence par vérifier que l’on dispose bien du plugin gstreamer istximagesrc:

[cc]

gst-inspect istximagesrc

version 0.2.2

[/cc]

Si ce n’est pas le cas, il suffit d’installer le package Istanbul qui inclue ce plugin:

[cc]

sudo aptitude install istanbul

[/cc]

Aller, une fois ces menus préparatifs passés,  on commence par lancer un capture vidéo de l’écran et sonore en utilisant la ligne de commande GStreamer (pipeline) suivante:

[cc]

gst-launch avimux name=mux ! filesink location=screencast.avi \
alsasink ! audioconvert ! queue ! mux. \
istximagesrc name=videosource use-damage=false ! video/x-raw-rgb,framerate=10/1 \
! ffmpegcolorspace ! queue ! videorate ! ffmpegcolorspace ! videoscale method=1 \
! video/x-raw-yuv,width=1152,height=720,framerate=10/1 ! mux.

[/cc]

Cette commande va capturer l’écran à 10 images par secondes (istximagesrc), le son (alsasink) et mixer le tout (sans compression mais avec une redimensionnement de la vidéo au format 720p) dans un fichier temporaire au format AVI. Ce fichier aura une taille très importante mais c’est juste une étape temporaire avant la compression.

Pour cette compression j’utilise deux pipelines permettant de générer des screencasts au format libre OGV (Theora/Vorbis) et propriétaire M4V (H.264/AAC), comme cela, tous les navigateurs sont heureux:

[cc]

gst-launch filesrc location=screencast.avi ! decodebin name= »decode » \
decode. ! videoparse format=1 width=1152 height=720 framerate=10/1 \
! queue ! ffmpegcolorspace ! theoraenc ! queue ! \
oggmux name=mux ! filesink location=screencast.ogv \
decode. ! queue ! audioconvert ! vorbisenc ! queue ! mux.

gst-launch filesrc location=screencast.avi ! decodebin name= »decode » \
decode. ! videoparse format=1 width=1152 height=720 framerate=10/1 \
! queue ! ffmpegcolorspace ! x264enc pass=4 quantizer=23 threads=0 ! queue ! \
ffmux_mp4 name=mux ! filesink location=screencast.m4v \
decode. ! queue ! audioconvert ! faac tns=true ! queue ! mux.

[/cc]

Un script qui fait tout…

Comme je suis un bon loulou, voici un script shell qui automatise

  1. le lancement de votre Webcam pour avoir une incrustation de votre image dans le screencast
  2. le lancement de la capture video de l’écran + capture audio (après un délais de 3 secondes histoire de refaire son nœud de cravate)
  3. (on arrête la capture en faisant un CTRL-C dans la fenêtre)
  4. la compression du screencast dans un fichier screencast-dateetheure.ogv (codec Theora/Vorbis)
  5. la compression du screencast dans un fichier screencast-dateetheure.m4v (codec H.264/AAC)
  6. la suppression du fichier temporaire

A télécharger ici: https://raw.github.com/nicolargo/myscreencast/master/myscreencast.sh

Vous pouvez éditer le fichier et notamment la configuration suivante:

[cc]

### Variables à ajuster selon votre configuration
AUDIODEVICE= »alsasrc »
WEBCAMDEVICE= »/dev/video0″
WEBCAMHEIGHT= »240″
OUTPUTHEIGHT= »720″
OUTPUTFPS= »10″
### Fin des variables à ajuster

[/cc]

… en attendant LE programme ultime

qui devra reprendre en gros les étapes de mon script mais en ajoutant:

  • une interface graphique
  • le choix d’une portion de l’écran à capturer
  • le choix d’une application (fenêtre) à capturer
  • le choix de la source audio (mixage possible avec la librairie Jack)
  • paramétrage fin des codecs audio et video
Catégories
Musique Open-source

Tester son installation audio Hi-Fi

J’aime la musique, elle m’accompagne tout au long de la journée. Quelle soit rock, pop, classique, électronique peut importe… tant que le son est bon ! Nous sommes à un tournant au niveau des supports de diffusion de la musique au grand public. Le bon vieux CD laisse petit à petit sa place aux fichiers informatiques. Au revoir support physique et bienvenue au monde dématérialisé ou les frontières en terme de qualité sont repoussées aux limites de nos oreilles.

Nous allons voir dans ce billet quels sont les impacts de cette petite révolution sur le rendu final en nous focalisant sur des logiciels et des formats libre.

Catégories
Open-source Video Web

FFMpeg2Theora, guide par l’exemple

Une des évolution les plus discutée de la 5em version du langage HTML est le support des balises <video> et <audio>. Ces dernières permettent d’insérer et de jouer une vidéo et/ou une musique directement dans une page du navigateur, sans nécessité d’installer de logiciel ni de codec externes. Devant la non décision du W3C de ne pas imposer les codecs dans la norme HTML5, les éditeurs de navigateur internet on fait des choix stratégiques/techniques (OGG/Theora/Vorbis pour les codecs libres ou MP4/H.264/AAC pour les codecs propriétaires).

Video/Audio		FF	Opera	Chrome	Safari	iPhone	Android
OGG/Theora/Vorbis	✓	✓	✓	·	·	·
MP4/H.264/AAC   	·	·	✓	✓	✓	✓

Nous allons dans ce billet nous focalisé sur l’utilisation du logiciel ffmpeg2thera pour générer des vidéos au format libre OGG/Theora/Vorbis.

Catégories
Image Open-source Video

Création de thumbnail à partir d’un fichier OGV/OGG

Le codec vidéo libre Theroa devient de plus en plus performant (notamment dans sa version 1.1). Le conteneur libre correspondant (l’équivalent du .AVI) est .OGV ou .OGG est facilement intégrable dans une page Web en utilisant le tag video du langage HTML5. Nous allons dans ce billet voir comment générer en ligne de commande une image (thumbnail) de prévisualisation d’un fichier OGV/OGG.

Installation des OGG Video Tools

Ces dans cette trousse à outils d’utilitaires pour fichiers OGV/OGG que nous allons trouver le logiciel oggThumb qui va nous permettre d’extraire une image d’un fichier vidéo. Voici la procédure d’installation à suivre sous Ubuntu:

[shell]sudo aptitude install libgd2-xpm-dev
wget https://launchpad.net/~theora/+archive/ppa/+build/1202657/+files/oggvideotools_0.8-0ubuntu1_i386.deb
dpkg -i  oggvideotools_0.8-0ubuntu1_i386.deb[/shell]

On vérifie que le logiciel est correctement installé:

[shell]oggThumb -h

usage: oggThumb [options] file1.ogv [ file2.ogv [ file3.ogv […] ] ]

Options:

-t <time1, time2, time3, …>         : create thumbnail from frame at time position time1, time2, time3 second

-f <frameNo1, frameNo2, frameNo3, …>: create thumbnail from frame number frameNo1, frameNo2, frameNo3

-s <width>:<height>                   : resize to given values (if one argument is set to 0, it is calculated to meet the aspect ratio

-o <output format>                    : formats are jpg or png[/shell]

Exemple de création de thumbnail

Nous allons générer une image .jpg à partir d’un fichier .ogv. Pour cela, il faut préciser à quel moment l’extraction doit se faire en utilisant l’option -t (temps en seconde):

[shell]oggThumb -t 20 shutterisland-tlr1r2r_h720p_hq.ogv[/shell]

Cette commande va créer un thumbnail de la vidéo à la 20em seconde. Voici le résultat:

OggThumb exemple

Il est également possible de redimensionner l’image en utilisant l’option -s. Par exemple pour extraire la même thumbnail mais dans un taille plus petite (tout en conservant l’aspect ratio), il faut utiliser la commande:

[shell] oggThumb -t 20 -s 320×0 shutterisland-tlr1r2r_h720p_hq.ogv[/shell]

Voici le résultat:

OggThumb exemple tiny

Il est également possible d’extraire plusieurs images en ajoutant des paramètres à l’option -s (séparé par des ,).

oggThumb -h
usage: oggThumb [options] file1.ogv [ file2.ogv [ file3.ogv […] ] ]
Options:
-t <time1, time2, time3, …>         : create thumbnail from frame at time position time1, time2, time3 second
-f <frameNo1, frameNo2, frameNo3, …>: create thumbnail from frame number frameNo1, frameNo2, frameNo3
-s <width>:<height>                   : resize to given values (if one argument is set to 0, it is calculated to meet the aspect ratio
-o <output format>                    : formats are jpg or png
Catégories
Blog Open-source Video Web

Utiliser le tag video HTML 5 dans WordPress

HTML 5 permet l’insertion de média de type audio ou vidéo directement dans une page HTML sans avoir besoin d’autre chose qu’un navigateur compatible (Firefox 3.5 ou Chromium 4.0 par exemple). A l’heure actuelle, il n’est pas possible de créer des billets utilisant ces tags dans WordPress. Il faut donc passer par un plugin qui va nous permettre de contourner le problème et de nous apporter également un compatibilité avec les navigateurs ne supportant pas la norme HTML 5…

Catégories
Image Open-source

Installation des OggVideoTools sous Ubuntu

Pour ceux qui ne connaissent pas, OggVideoTools est composé des logiciels suivants (en ligne de commande):

  • oggSplit: permet de séparer l’audio et la vidéo d’un fichier en deux fichiers distincts (un fichier par flux).
  • oggJoin: Prend en entré une liste de fichiers OGG (audio au format vorbis et/ou vidéo au format Theroa) et donne en sortie un seul fichier.
  • oggCut: permet de couper un fichier OGG.
  • oggCat: permet de coller les uns à la suite des autres des fichiers OGG.
  • oggDump: Affiche un fichier OGG sous la forme de paquets.
  • oggLength: Affiche la taille d’un fichier OGG (en ms).

Si vous voulez en plus disposer des deux autres utilitaires suivants, Il faut passer par une phase de compilation supplémentaire de la librairie Theora depuis les sources car le paquet Ubuntu (et aussi Debian) comporte un bug.:

  • oggResize: permet de changer les caractéristiques des flux audio/video d’un fichier OGG.
  • oggSilence: Permet de créer un fichier audio vide (silence) au format Vorbis d’une taille donnée.

En attendant que ces petits utilitaires pour manipuler les fichiers audio/video libre basés sur le format libre OGG soit disponibles dans les dépôts Ubuntu (ce qui ne devrait pas tarder…). Voici une petite procédure pour effectuer la compilation depuis les sources.

Compilation des OggVideoTools

Les sources sont hébergées sur le site Sourceforge.

On commence par récupérer les sources de la dernière version disponible (0.7b au moment de l’écriture de ce billet):

wget http://downloads.sourceforge.net/project/oggvideotools/oggvideotools/oggvideotools-0.7b/oggvideotools-0.7b.tar.gz

Puis on lance la compilation (il faut que votre machine dispose des outils de compilation standard: build-essential sous Ubuntu):

./configure
make
sudo make install

Et voili:

# oggLength bigbuckbunny.ogv
596467

# oggSplit bigbuckbunny.ogv
# ls -alF
total 326172
-rw-r–r– 1 labo labo 166825767 2009-08-21 11:26 bigbuckbunny.ogv
-rw-r–r– 1 labo labo 153622630 2009-08-21 16:26 theora_f0678e1.ogg
-rw-r–r– 1 labo labo  13203137 2009-08-21 16:26 vorbis_1fa82364.ogg

Catégories
Open-source Systeme

Modification des metas d’un fichier OGG

En recherchant un moyen simple et modulable (en ligne de commande donc ;)) pour modifier les metas tags des fichiers au format OGG (Theora/vorbis and co), je suis tombé sur le script suivant: tagtheora (sous licence GPL).

Il prend en entrée un fichier OGG et un certain nombre de paramètres comme:tagtheora.png

–title TITLE

–artist ARTIST

–album ALBUM

–license LICENSE

–copyright COPYRIGHT

–date DATE

–location LOCATION

–organization ORGANIZATION

–comment COMMENT

En sortie, on a le même fichier mais avec les metas données fixés.

Installation

Il faut suivre les étapes suivantes (sous Ubuntu):

cd /usr/src/

sudo apt-get install python-mutagen

sudo wget http://open-source.ecchi.ca/source/tagtheora0.2.1.tar.gz

sudo tar zxvf tagtheora0.2.1.tar.gz

cd tagtheora/

sudo cp tagtheora.py /usr/local/bin

Utilisation (exemples)

Pour ajouter un titre dans une vidéo, il suffit de saisir la commande suivante:

tagtheora.py –title « Big Buck bunny » hd-big_buck_bunny.ogg

Pour voir la listes des metats tags d’un fichier, on peut utiliser la commande:

tagtheora.py –show hd-big_buck_bunny.ogg

>>> title: Big Buck bunny

Et voilà, un petit script de plus à garder sous le coude<.p>

Catégories
Open-source

Encodage vidéo Theora facile sous Mac OS X

Theora.org __ main - Theora, video for everyone.jpgVous connaissez sans doute le codec vidéo MPEG-4 issue de la norme ISO du même nom. Et bien il existe une alternative libre à ce codec: Theroa (wiki). Très efficace niveau compression (avec des ratios se rapprochant de MPEG-4), il est bien pris en charge par les lecteurs multimédia libre comme VLC, Mplayer et plus généralement par tout lecteur basé sur FFMpeg.

Simple Theora Encoder est un logiciel open-source sous Mac OS X permettant de compresser simplement une source AVI, MOV ou MP4 dans un format OGG/Theora (OGG étant le conteneur et Theroa le codec Video). Il s’adresse à toutes les personnes allergique à la ligne de commande. En effet, Simple Theora Encoder est juste un interface graphique à l’application ffmpeg2theroa.

L’utilisation est très simple (c’est quand même le but…):

  • on sélectionne la/les vidéo source (bouton « Add… »)
  • on clique sur le bouton « Encode… »
  • on attend (environ 6 minutes pour une vidéo HD de 10 minutes sur mon MacBook Pro)
  • le logiciel générera le ficher .ogg équivalent compressé avec le code Theroa dans le même répertoire que le fichier source

Simple Theora Encoder.jpg

Il est possible d’ajouter des options qui seront envoyées à ffmpeg2theora lors de la compression en cliquant sur le bouton « Edit… », par exemples:

Pour désentrelacer la vidéo source: — deinterlace

Changer la résolution: -x 640 -y 480

Le package Simple Theroa Encoder (téléchargeable ici), inclue l’interface graphique, ainsi que tous les logiciels nécessaires à l’encodage.