FFMpeg2Theora, guide par l’exemple

Date: 30/03/2010 | Catégories: Open-source,Video,Web | Tags: ,,

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.

Installation des outils OGG/Theora* sous Ubuntu

Afin de disposer de la dernière version des logiciels et codecs Theroa/Vorbis, il faut ajouter le dépôt PPA suivant à votre installation GNU/Linux Ubuntu:

[shell]

sudo add-apt-repository ppa:theora

sudo aptitude update

sudo aptitude safe-upgrade

[/shell]

On installe ensuite les logiciels:

[shell]

sudo aptitude install ffmpeg2theora oggvideotools

[/shell]

Conversion avec les paramètres standards

Nous allons convertir une vidéo dont le format/codec video/codec audio est lisibles par FFMpeg. Pour illustrer mon exemple, j'ai récupéré sur le site HD-Trailer des bandes annonces HD 1080p au format MOV/H.264/AAC.

[shell]

ffmpeg2theora robinhood_trlr_01_1080p_dl.mov

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'robinhood_trlr_01_1080p_dl.mov':
Duration: 00:01:32.60, start: 0.000000, bitrate: 6515 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1920x1080, 23.98 tbr, 2397 tbn, 4794 tbc
Stream #0.1(eng): Audio: aac, 48000 Hz, 2 channels, s16

0:01:32.60 audio: 72kbps video: 3282kbps, time elapsed: 00:08:55

[/shell]

On se retrouve avec un fichier OGG (.ogv) dont la taille est inférieure à la source...

  • Taille du fichier MP4 (H.264): 75.4 Mo
  • Taille du fichier OGG (Theora): 38.8 Mo

... mais la qualité aussi (perte de grains et de couleurs):


H.264 / Scène en mouvement / Theora


H.264 / Scène en mouvement (zoom) / Theora


H.264 / Scène statique / Theora


H.264 / Scène statique (zoom) / Theora

Conversion avec les paramètres hautes qualités

[shell]

ffmpeg2theora -v 8 --optimize robinhood_trlr_01_1080p_dl.mov -o robinhood_trlr_01_1080p_dl-best.ogv

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'robinhood_trlr_01_1080p_dl.mov':
Duration: 00:01:32.60, start: 0.000000, bitrate: 6515 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1920x1080, 23.98 tbr, 2397 tbn, 4794 tbc
Stream #0.1(eng): Audio: aac, 48000 Hz, 2 channels, s16
0:01:32.60 audio: 72kbps video: 5479kbps, time elapsed: 00:10:07

[/shell]

On se retrouve avec un fichier OGG (robinhood_trlr_01_1080p_dl-best.ogv) dont la taille se rapproche de la version H.264.:

  • Taille du fichier MP4 (H.264): 75.4 Mo
  • Taille du fichier OGG (Theora) standard: 38.8 Mo
  • Taille du fichier OGG (Theora) haute qualité: 64.2 Mo

L'amélioration est flagrante sur les scènes statiques:


Theora standard / Scène statique (zoom) / Theora haute qualité

par contre les scènes dynamiques sont moins bien traitées en terme de qualité:


Theora standard / Scène en mouvement (zoom) / Theora haute qualité

Utilisation des paramètres pré-définis

FFMpeg2Theora propose une série de paramètres pré-définis pour un encodage rapide (jusqu'à la qualité DVD). La liste de ces paramètres est la suivante (pour la version 0.25):

[shell]

preview        Video: 320x240 if fps ~ 30, 384x288 otherwise
Quality 6
Audio: Max 2 channels - Quality 1

pro            Video: 720x480 if fps ~ 30, 720x576 otherwise
Quality 8
Audio: Max 2 channels - Quality 3

videobin       Video: 512x288 for 16:9 material, 448x336 for 4:3 material
Bitrate 600kbs
Audio: Max 2 channels - Quality 3

padma          Video: 640x360 for 16:9 material, 640x480 for 4:3 material
Quality 6
Audio: Max 2 channels - Quality 3

padma-stream   Video: 128x72 for 16:9 material, 128x96 for 4:3 material
Audio: mono quality -1

[/shell]

Ainsi pour encoder une vidéo dans une qualité "preview", il faut saisir la commande suivante:

[shell]

ffmpeg2theora -p preview robinhood_trlr_01_1080p_dl.mov -o robinhood_trlr_01_1080p_dl-preview.ogv

[/shell]

On a le résultat suivant (si votre navigateur est compatible avec le tag HTML et Theora, sinon...):

Ajout des metadatas (metatags)

Ces tags permettent d'ajouter des informations complémentaires à la vidéo ou au fichier audio:

  • --artist : Nom de l'artiste / Réalisateur
  • --title : Titre
  • --date : Date
  • --location : Lieu
  • --organization : Nom du studio
  • --copyright : Copyright
  • --license : Licence
  • --contact : Lien URL

Extraction de la piste audio

Pour encoder seulement la piste audio (au format OGA/VORBIS), on utilisera la commande suivante:

[shell]
ffmpeg2theora --novideo -a 6 robinhood_trlr_01_1080p_dl.mov -o robinhood_trlr_01_1080p_dl.oga
[/shell]

Extraction des informations d'un fichier OGG

Pour ceux qui veulent faire un portail de présentation des vidéos/audios ainsi généré, l'option --info peut apporter des informations intéressantes à mettre en avant. De plus, le format utilisé est JSON:

[shell]

ffmpeg2theora --info robinhood_trlr_01_1080p_dl-best.ogv

{
"duration": 92.586670,
"bitrate": 5546.651855,
"video": [{
"codec": "theora",
"pixel_format": "yuv420p",
"width": 1920,
"height": 1080,
"framerate": "24000:1001",
"id": 1
}],
"audio": [{
"codec": "vorbis",
"samplerate": 48000,
"channels": 2,
"bitrate": 80.000000,
"id": 2
}],
"oshash": "95e2e14221474db5",
"path": "robinhood_trlr_01_1080p_dl-best.ogv",
"size": 64193258
}

[/shell]

Autres outils

D'autres outils pour manipuler les fichiers OGG sont disponibles:

  • 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 durée d'une vidéo ou d'un fichier audio (en ms).
  • oggResize: permet de changer les caractéristiques des flux audio/video d'un fichier OGG (résolution, fréquence, débit, logo en sur-impression).
  • oggSilence: Permet de créer un fichier audio vide (silence) au format Vorbis d'une taille donnée.
  • oggThumb: Génère un vignette (.JPG) à partir d'un fichier vidéo (.OGG)
  • oggSlideshow: Génère une vidéo de type slide-show (avec des effets de transitions) à par d'une liste d'images.

Pour ce dernier logiciel, voici la ligne de commande qui m'a permis de créer simplement un slide-show video de mes fonds d'écrans (avec un effet Ken Burns - kb):

[shell]

oggSlideshow -f 24 -l 5 -s 350x225 -o slideshow-desktop.ogv -t kb ~/images/desktop/*.jpg

[/shell]

et le résultat final:

Conclusion

Nous avons dans ce billet présenté quelques exemples de manipulation de vidéo au format libre (OGG/Theora). En espérant que ce format s'impose rapidement...

Partager ce billet