Les dessous d'un billet vidéo-illustré

Rédigé par antistress le 21 mars 2010 - 17 commentaires

Qui a t-il a derrière la porte entre-ouverte ?

Le billet précédent est agrémenté d'une petite vidéo. Voici son histoire, ou comment illustrer ses billets de vidéos en utilisant des formats ouverts.

Obtenir le bon fichier vidéo

Récupérer le fichier de la vidéo qui nous intéresse

Au cas présent il s'agit de cette vidéo hébergée sur YouTube et intitulée « Aldo Maccione" la classe" ».
Pour récupérer cette vidéo sous GNU/Linux, il vous suffit d'aller chercher le fichier correspondant dans le répertoire /tmp de votre système une fois la vidéo intégralement chargée dans votre navigateur.

Pour la suite du billet, le fichier aura pour nom « source.flv ».

Réencoder la vidéo en Ogg Theora et la recadrer

Pour réencoder la vidéo dans un format libre, nous allons utiliser le logiciel libre ffmpeg2theora, disponible sous la licence GNU GPL pour systèmes GNU/Linux, MacOS et Windows.

Comme indiqué précédemment, la résolution et le débit de la vidéo sont à choisir en fonction du type de vidéo. Au cas présent j'ai choisi un encodage à débit constant de 300 kbit/s qui est un débit particulièrement faible compte tenu que la séquence est un film de 320x192 pixels mais qui m'a paru – de façon complètement empirique – suffisant en l'espèce si l'on considère que la scène est assez peu animée et que les images composant la vidéo ont finalement assez peu de différences (le principe de base de la compression vidéo consiste à n'enregistrer complètement que quelques images clés appelées « trames I » puis à enregistrer les seules différences entre deux images clés pour composer les images intermédiaires appelées « trames P »).

La séquence présentait des bandes noires horizontales de part et d'autre de l'image qui nuisaient à la bonne intégration de la vidéo dans la page de mon billet. J'ai donc demandé à ffmpeg2theora de supprimer les bords de la vidéo en même temps qu'il la réencodait. L'opération n'est hélas pas automatique, aussi j'ai dû tâtonner pour définir en pixels la taille des bandes à supprimer (cette taille devant par ailleurs être, dans tous les cas, un multiple de deux)

Au final la commande pour réencoder et recadrer la vidéo est la suivante :
ffmpeg2theora -V 300 --croptop 24 --cropbottom 24 source.flv -o fichiertemp.ogg

D'une séquence audio-vidéo de 320x240 pixels encodée dans un format non-libre (en H.264/AVC Video pour la vidéo et MPEG-4 AAC pour l'audio) nommée « source.flv », on passe à une séquence audio-vidéo recadrée en 320x192 pixels dans un format libre (Ogg Theora à débit constant de 300 kbit/s pour la vidéo, et Ogg Vorbis pour l'audio) nommée « fichiertemp.ogg ».

A noter qu'un encodage en deux passes (au lieu d'une comme dans l'exemple ci-dessus), toujours à débit constant, vous permettrait d'optimiser la qualité de la vidéo.

En savoir plus : consulter les commandes pour ffmpeg2theora ici et .

Extraire la portion qui nous intéresse

La séquence téléchargée depuis YouTube et réencodée au format Ogg est en fait une compilation de plusieurs séquences différentes. Nous allons extraire le tronçon qui nous intéresse et qui correspond grosso modo aux huit première secondes.

Nous utiliserons pour cela les Ogg Video Tools (et spécialement l'outil oggCut), un logiciel disponible sous la licence GNU GPL pour systèmes GNU/Linux, MacOS et Windows.

A noter que le tronçonnage va être effectué sans recompression, donc très rapidement et sans perte de qualité. Les indications temporelles sont exprimées en millisecondes. Elles sont toutefois indicatives dans la mesure où le logiciel ne coupera qu'aux endroits des « trames I ».

La commande pour extraire la première séquence de la vidéo est :
oggCut -s 0 -e 8140 fichiertemp.ogg destination.ogg

D'une séquence audio-vidéo de presque trois minutes nommée « fichiertemp.ogg » on ne conserve que le début en un séquence nommée « destination.ogg ».

On obtient ainsi une vidéo de huit secondes dans un format libre, d'une résolution de 300x192 pixels et qui pèse moins que beaucoup d'images sur le web : à peine 348 kio !

En savoir plus : voir les commandes pour les Ogg Video Tools.

Intégrer la vidéo dans la page Web

L'intégration de la vidéo ainsi obtenue dans la page Web se fait au moyen des balises multimédias de HTML5 (un format ouvert).

A noter que la spécification HTML5 permet d'utiliser, au sein de la balise video, l'attribut poster pour spécifier une image à afficher en attendant que l'utilisateur ne lance la vidéo (si vous n'avez pas défini cet attribut alors c'est la première image de la vidéo qui sera affichée par défaut). Firefox 3.6 supporte cette fonctionnalité et il semblerait que ce soit le cas également d'Opera 10.50. En revanche les autres navigateurs compatibles HTML5 remplaceraient automatiquement cette image par la première image de la vidéo.

Sur le billet dont il s'agit, voici ce que vous voyez suivant que l'attribut n'est pas pris en compte (première capture, effectuée sous Firefox 3.5) ou l'est (deuxième capture, sous Firefox 3.6) :


sans prise en compte de l'attribut


avec prise en compte de l'attribut

Pour ma part je bénéficie de mon propre espace d'hébergement pour mon blogue sur le Web (lire ce précédent billet) de sorte qu'il me suffit d'y ajouter les séquences audio/vidéo pour les utiliser sur mon blogue. Sinon il existe des services d'hébergement de vidéos au format Ogg Theora.

Est-ce bien légal tout cela ?

Affirmatif. Quand bien même l'œuvre sur laquelle vous avez jeté votre dévolu n'autoriserait pas expressément et préalablement sa libre utilisation (au moyen d'une licence type Creative Commons), vous êtes autorisé par la loi à en reproduire à de courts extraits (c'est le droit de courte citation, une exception légale aux droits d'auteur).

Conclusion

Si vous avez mis en œuvre les différentes étapes décrites dans ce billet, vous devriez avoir noté différentes choses :

  1. L'encodage en Theora se fait à la vitesse de la lumière : c'est un des encodeurs les plus rapides de sa catégorie (certainement le plus rapide).
  2. La taille du fichier vidéo obtenu est particulièrement réduite : moins de 350 Kio quand même pour une vidéo de huit secondes !
  3. Malgré la vitesse élevée d'encodage et la très petite taille du fichier obtenu, la qualité de la vidéo est tout à fait satisfaisante (alors qu'il s'agit d'un réencodage !)

Qui a dit que Theora n'était pas un codec adapté au Web ?


Mise à jour : ®om me fait remarquer en commentaires que ffmpeg2theora peut tout à fait être paramétré pour n'encoder qu'une partie de la séquence, rendant superflu l'emploi d'oggCut au cas d'espèce. Tout le travail peut donc être réalisé avec une seule commande :
ffmpeg2theora -V 300 --two-pass --croptop 24 --cropbottom 24 -s 0 -e 8.14 source.flv -o destination.ogg


Play Ogg Button

17 commentaires

#1  - ®om a dit :

Merci pour ce billet.

Pour compléter, ffmpeg2theora peut aussi extraire une portion de la vidéo (et ça évite de tout encoder), grâce aux options -s et -e.

Répondre
#2  - olivier a dit :

Comment peux-tu être sûr que les fichiers flash visionnés à travers un navigateur se trouvent dans le dossier /tmp.

Il s'agit en fait d'un « effet de bord » de nspluginwrapper.

Pourquoi utiliser ffmpeg2theora, alors que ffmpeg est capable de convertir la vidéo .flv en .ogg

Répondre
#3  - Saïmon a dit :

pour récupérer les vidéos de youtube et cie (dailymotion, viméo, ...), il y a des outils bien pratiques: youtube-dl et clive en ligne de commande, il y a aussi des gui.

Répondre
#4  - Dd a dit :

Perso j'utilise DownloadHelper, un plug-in de Firefox pour récupérer les vidéos sur beaucoup de sites ;) .

Au pire il y a : http://keepvid.com/

Répondre
#5  - Kurtnoise a dit :

1/ NON, les formats H.264 & AAC ne sont pas fermés. Les specs sont librement accessibles...

2/ "A noter qu'un encodage en deux passes (au lieu d'une comme dans l'exemple ci-dessus), toujours à débit constant, vous permettrait d'optimiser la qualité de la vidéo."
Je vois pas où est l'optimisation ici...tu réencodes déjà une vidéo compressée.

3/ Ta conclusion est totalement fausse.

Répondre
#6  - louiz' a dit :

Euh, oui, c'est légal si on ne prend qu'un court extrait.
Sauf que prendre un extrait d'une vidéo (déjà courte) de youtube, c'est un peu inutile, et personne le fait.
L'intérêt de montrer 8 secondes d'un clip durant 3 minutes et 45 secondes me semble limité.

Sinon, pour héberger la vidéo, on peut aussi utiliser videobin.org (qui se chargera de convertir la vidéo. Mais si on ne veut pas squatter le CPU du server généreusement offert, on peut utiliser ffmpeg -p videobin, pour convertir la vidéo dans le format qui va bien.)

Répondre
#7  - antistress a dit :

@ ®om : ah oui, excellent, merci du tuyau j'étais passé à côté. Je mettrai à jour le billet dès que j'aurai du temps pour refaire des essais (pas ces prochains jours malheureusement j'ai un autre billet sur le feu :-/ )

@ olivier : je trouve que ffmpeg2theora est une très bonne interface en ligne de commandes (CLI) à ffmpeg

@ Kurtnoise : 1/ en effet il faut lire « non libre » (à cause des brevets - cf mes billets sur Mono) plutôt que « fermé » : je corrige, merci.
2/ La 2è passe permet théoriquement un gain en qualité. Après ça dépend en effet des cas. Au cas d'espèce je me suis pas cassé la nenette avec une 2è passe.
3/ Précise ta pensée STP

@ louiz' : je parlais d'un extrait du film qui est protégé par le droit d'auteur, pas d'un extrait de la séquence YouTube. L'idée c'est que HTML5 rend possible l'utilisation de vidéos pour illustrer des billets comme on le fait avec des images, des émoticônes ou des clip-arts. Si chacun illustre ses sentiments par de courts extraits vidéos ça créée une base de vidéos réutilisables (en interne : je peux réutiliser facilement cette vidéo pour illustrer un même sentiment dans un prochain billet ; en externe : je peux réutiliser la vidéo préparée par un autre qui peut réutiliser les miennes).

Répondre
#8  - Kurtnoise a dit :

@antistress:

1/ il faut lire « non libre » [à cause des brevets..]
Désolé, mais cela contribue toujours à la confusion. D'ailleurs, je ne vois pas bien le lien entre (non-)libre et l'histoire des brevets.

Pour info, il existe un compresseur libre issu de la norme AVC (x264), de même qu'un décodeur (lavc) se basant sur la norme standard. Sans les 2 plus accessibles à l'heure d'aujourd'hui pour le grand public.

2/ Nan, le but d'une seconde passe est de respecter une taille précise en sortie.

3/ Simplement, tu maîtrises très mal le sujet. Tu pars d'une simple observation sur un sample de 8s (???) pour tirer des commentaires non vérifiés.

Tout cela me semble très léger...

Répondre
#9  - antistress a dit :

@ Kurtnoise : 1/ une technologie couverte par des brevets n'est pas libre d'utilisation dans les pays qui reconnaissent les brevets. Donc même si le code est 1° ouvert et 2° original et soumis par son auteur à une licence libre, le logiciel n'est pas libre pour autant faute de donner les quatre libertés à son utilisateur.
2/ non pas seulement, cf http://lists.xiph.org/pipermail/theora/2010-March/003581.html
3/ Je suis d'accord avec toi avec une petite nuance : ce n'est pas parceque je n'ai pas suivi une méthodologie rigoureuse au cas présent que le résultat est nécessairement faux pour autant ! Il reste que les techniques mises en œuvre par Theora pour l'encodage demandent de moins grandes ressources comparé à H264. Quant au constat que j'ai fait (et ce n'est pas la 1re fois que j'encode une vidéo) il est partagé ( http://lists.xiph.org/pipermail/theora-dev/2010-February/004078.html & http://hacks.mozilla.org/2009/06/open-video-codecs-and-quality/comment-page-1/#comment-320 ). Je reconnais que l'on manque de comparaisons fiables sur la qualité et le temps d'encodage des différents codecs en lice : si tu me démontres que j'ai tort bien sûr je m'inclinerai ;-) En tout cas je suis ravi des performances de Theora en ce qui me concerne :-)

Répondre
#10  - Kurtnoise a dit :

@antistress:

1/ Et ? il manque la suite...D'ailleurs, il n'y a jamais eu de preuves certifiées que le Theora est 'patent-free'

2/ Et tu penses qu'en citant un extrait de ML tu arriveras à me convaincre ? Il m'en faut plus que ça. J'ai quand même près de 12 ans de compression vidéo derrière moi, donc la théorie je commence à la connaître. Si tu veux atteindre une certaine qualité, mieux vaut utiliser le mode 1 passe. Période...

3/ Tu penses pas que c'est biaisé ? Tu me cites des comparaisons de fanboys de Xiph. Pourquoi pas celle-ci [1] alors ?

[1] http://x264dev.multimedia.cx/?p=102

Répondre
#11  - Maps a dit :

Salut antistress,

Merci pour ce tuto bien sympa. Ça fait un moment que j'attends d'avoir les moyens de m'y intéresser, et c'est désormais le cas. J'en profite pour échanger quelques questionnements et commentaires :

- La balise video ne supporte pas les fichiers .ogv ? J'ai testé le même fichier avec les extensions .ogg et .ogv, et il semblerait que seul le 2e soit passé (ou alors je suis vraiment à côté de la plaque). Est-ce que c'est spécifique au navigateur ?

- Pour tout ce qui est encodage et bidouillage de séquences, je conseille PiTiVi, qui est encore jeune mais fait un superbe boulot !

- Quid de l'attribut 'type' ? Est-ce que c'est spécifique à Firefox ? De manière générale, connais-tu une page qui explique les différents paramètres de cette balise, et comment ils sont implémentés dans les différentes versions des navigateurs ?

Merci d'avance, et bonne continuation !
Maps

Répondre
#12  - Maps a dit :

Question subsidiaire : j'essaye vainement de forcer le préchargement des vidéos avec le paramètre 'preload' sans trop de succès... As-tu une expérience en la matière ?

Avec des vidéos un peu trop lourde, ça devient vite pénible : la lecture va plus vite que le chargement...
Maps

Répondre
#13  - antistress a dit :

@ Maps : Tu as de la doc ici http://libre-ouvert.toile-libre.org/?article16/tests-audio-et-video

Je pense que Ogg/Ogv et Oga passent mais comme le FSF fait campagne sur le Ogg ça me semble plus cohérent de tout mettre en Ogg sinon les gens vont plus comprendre et ça nuira au message.

PiTiVi je connais un peu pour suivre un peu son développement (kiddo contribue au projet et me tient au courant) ; il utilise GStreamer au lieu de ffmpeg il faut voir si l'encodage Theora est au niveau ; la dernière fois que j'avais fait un essai rapide j'avais préféré ffmpeg2theora (en terme de contrôle et de qualité, même si c'est moins aisé) faudrait que je réessaie.

Type fait partie de la spec HTML5 pour les balises audio/vidéo

Le préchargement j'ai pas testé car je mets que de petites séquences. C'est à manier avec précaution dans le cas où tu as plusieurs séquences sur la même page car ça bouffe la mémoire si tout est chargé en même temps (c'est pour ça que c'est pas actif par défaut).

Répondre
#14  - Maps a dit :

Merci pour la doc (et les liens qui vont bien dedans) !

Pour ogg, je ne savais pas que la FSF faisait campagne en ce sens... Il me semblait pourtant qu'historiquement, les extensions ogv/oga/... étaient justement apparues après ogg pour éliminer les ambiguïtés de ogg...

Au niveau de la qualité de PiTiVi (0.13.3), il m'a paru très correct : je n'ai pas vraiment vu de différence entre le .mov d'origine et l'ogg en sortie (comparatif absolument subjectif où je n'ai pas cherché à aller dans les détails... Disons que le rendu était pour moi identique). Par contre, je n'arrive pas à diminuer la résolution de mes vidéos en gardant le même ratio d'origine (le rendu se fait mais sort avec la même résolution). Peut-être que le bug est résolu depuis (je n'ai pas testé la 0.13.4)...

C'est en partie pour ça que j'essayais le preload. Je me trouve en fait dans le cas d'un billet de blog avec 2 vidéos à la fin, et j'aurais aimé avoir le chargement pendant la lecture du reste du billet (c'est pénible, arrivé aux vidéos, de devoir encore attendre parce que les vidéos sont un peu grosses).

Merci !
Maps

Répondre
#15  - antistress a dit :

@ Maps : regarde le petit logo "play ogg" en bas de l'article...
Pour ton bogue de résolution, kiddo l'a signalé ici https://bugzilla.gnome.org/show_bug.cgi?id=598342

Répondre
#16  - Maps a dit :

Oh, merci pour l'info de l'ogg. En fait, ça leur permet de parler de l'audio et de la vidéo sous la même dénomination, je peux comprendre l'approche (même si je trouve moins perturbant d'avoir 2 extensions pour 2 types de médias différents).

Excellent pour le bogue : même pas le temps de vraiment m'en préoccuper qu'il est déjà résolu ! (me reste plus qu'à installer la 0.13.4...)

Merci antistress !
Maps

Répondre
#17  - antistress a dit :

@ Maps : Pour ogg/oga/ogv, cela dit, ça se discute. Perso j'ai résolu le pb de distinguer mes fichiers audio/audio-vidéo en mettant la résolution derrière le nom du fichier pour les vidéos comme je fais pour mes photos d'ailleurs http://libre-ouvert.toile-libre.org/?static10/toutes-les-sequences-audio-video (en plus, comme pour les images, ça me permet de préciser facilement dans la balise la taille de la vidéo pour que le navigateur construise la page autour pendant le chargement)

Répondre

Fil RSS des commentaires de cet article

Les commentaires sont fermés.