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.
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:
sudo add-apt-repository ppa:theora sudo aptitude update sudo aptitude safe-upgrade
On installe ensuite les logiciels:
sudo aptitude install ffmpeg2theora oggvideotools
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.
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
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
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
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):
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
Ainsi pour encoder une vidéo dans une qualité "preview", il faut saisir la commande suivante:
ffmpeg2theora -p preview robinhood_trlr_01_1080p_dl.mov -o robinhood_trlr_01_1080p_dl-preview.ogv
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:
ffmpeg2theora --novideo -a 6 robinhood_trlr_01_1080p_dl.mov -o robinhood_trlr_01_1080p_dl.oga
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:
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 }
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):
oggSlideshow -f 24 -l 5 -s 350x225 -o slideshow-desktop.ogv -t kb ~/images/desktop/*.jpg
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...