Table des matières

Cette page rassemble les informations concernant le montage et l’encodage des vidéos de Toulibre.

Les vidéos sont capturées à l’aide d’un caméscope, et l’objectif est de les diffuser sur Internet dans un format ouvert, si possible dans une bonne qualité pour une taille pas trop grosse. Il faut :

L’encodage en général

Évidemment, le plus dur c’est le montage et l’encodage. On peut le faire avec des logiciels de montage vidéo non-linéaire tels que KDEenLive, mais depuis qu’on utilise un caméscope HD, les captures 1080i font tout ramer et c’est compliqué. Ainsi, certains préféreront le faire en ligne de commande. Vu que le montage est tout simple, c’est possible avec des outils tels que ffmpeg et mkvmerge.

Quels que soient les logiciels utilisés pour monter et encoder la vidéo, il faut avoir quelques bases en encodage : savoir ce qu’est un codec, un conteneur, un filtre vidéo, le (dé)muxage… Pour ce qui est des vidéos de Toulibre en particulier, voici quelques trucs à savoir.

Fusionner les rushs

Le caméscope ne peut pas enregistrer de fichiers de plus de 2 Go. Ce qui fait qu’une seule prise sera divisée en plusieurs parties. Or, le découpage de ces fichiers ne s’aligne pas sur les keyframes. Ainsi, si on essaie de lire le deuxième fichier résultant du découpage par le caméscope, vu qu’il ne commencera pas par une keyframe, les premières images ne pourront être décodées complètement et contiendront des tas d’erreurs. Et ce jusqu’à ce que le décodeur rencontre une keyframe et puisse faire un décodage complet des images.

Bref, avant de faire un quelconque traitement des rushs, il faut les fusionner. Le format MPEG-TS produit par le caméscope est un flux, il dont très flexible et on peut concaténer les morceaux à l’aide de cat. Par exemple : cat 000001.MTS 000002.MTS 000003.MTS > all.mts

Entrelacement

La vidéo capturée par le caméscope est entrelacée. Il est nécessaire de la désentrelacer avant de l’encoder (mais souvent le logiciel d’encodage fera à la fois le désentrelacement et l’encodage, comme il faut). Autrement, le codec essaiera d’encoder des images pleines de combing et le résultat sera très moche.

Format et codec ouvert

En tant qu’association de promotion du Libre, nous nous devons de diffuser des fichiers dont le conteneur et le codec sont dans des format ouverts. Dans ce domaine, le WebM offre de loin la meilleure qualité.

Traitement du bruit vidéo

La capture d’une source analogique (image filmée) introduit plus ou moins de bruit vidéo (noise). Plus l’image est sombre, et plus on aura de bruit. Pour remédier à ça, on peut utiliser un filtre de débruitage (denoise). L’inconvéniant du débruitage est qu’on pert des détails (ça peut par exemple manger du texte écrit en petit sur le diaporama). Trop de débruitage introduit du color banding, il faut donc le doser avec précaution. L’avantage du débruitage est une vidéo plus nette, plus agréable à regarder, et plus facile à compresser par le codec.

Le filtre hqdn3d présent dans mplayer/mencoder et ffmpeg fonctionne bien. Il est bien documenté dans la page de manuel d’mplayer (il faut regarder à denoise3d). Je ne m’y connais pas dans ce domaine et je connais pas la signification des paramètres de hqdn3d, mais j’ai effectué pas mal de tests sur la vidéo de la conférence d’Enlightenment. Les paramètres par défaut (hqdn3d=4:3:6:4.5) laissaient des trainées derrière les mouvements. Avec hqdn3d=4:3:6:0, le résultat semble être identique mais sans ces trainées. Si je veux diminuer ou augmenter le débruitage, je baisse ou j’augmente tous les paramètres d’un même facteur (par exemple hqdn3d=3:2.25:4.5:0). Ça semble bien fonctionner aussi.

Montage et encodage en ligne de commande

Voici une solution pour monter et encoder en ligne de commande (il y en a certainement beaucoup d’autres). Le but est de minimiser le plus possible les interventions humaines, et d’automatiser au maximum à l’aide de scripts. Mais tout n’est pas réalisable automatiquement.

Objectif et étapes

Le but est d’arriver à une vidéo qui ressemble à ceci :

Vidéo ←image d’intro→ ←vidéo→
Audio silence ←son son→

Les « ← » représentent des fondus de début, et les « → » des fondus de fin.

Pour ce faire, on va :

Tout ceci nous fait beaucoup de lignes de commandes à taper avec beaucoup de paramètres. Pour simplifier ce processus, j’ai créé un outil de chaîne de traitement nommé encoc.sh.

encoc.sh

Description

Encoc.sh (pour encoding chain) n’est pas un script magique qui va tout faire tout seul : il faut savoir ce qu’on fait. Le but de cet outil est de simplifier l’exécution de toutes ces commandes en se concentrant sur les paramètres qui nous intéressent. Chacune des étapes ci-dessus a été codée dans un script, qui lit un fichier en entrée et en produit un autre en sortie. Tous ces scripts mis bout à bout forment une chaîne d’encodage. Encoc.sh permet d’exécuter chacune des étapes indépendamment et selon une configuration globale donnée. Cette configuration est propre à un « projet », et transversale à toutes les étapes. Elle centralise tous les paramètres utiles, qui pourront ainsi être utilisés dans plusieurs scripts différents (par exemple, une fois la taille de la vidéo inscrite dans la configuration, elle sera utilisée par les scripts de l’image d’intro et d’encodage vidéo).

S’installer encoc.sh

Il est maintenu sous subversion, pour le récupérer tapez :

svn co https://dotsec.fr/svn/encoc encoc

Pour l’avoir dans votre PATH, faites un lien symbolique. Par exemple :

sudo ln -s /là/où/est/le/checkout/encoc/encoc.sh /usr/local/bin/encoc.sh

Utilisation

Pour commencer, il faut se créer un répertoire de travail avec beaucoup d’espace disque, y copier la vidéo source, et concaténer les rushs :

mkdir foobar
cd foobar/
cp /media/caméra/*.MTS .
cat *.MTS > all.mts

Sur le SVN, il y a déjà une chaîne nommée toulibre, conçue pour les conférences des rencontre de Toulibre. Initialisez le répertoire de travail avec :

encoc.sh init /là/où/est/le/checkout/encoc/toulibre/ all.mts

Cela créera un fichier de configuration encoc.config, avec des tas de variables prédéfinies avec des valeurs par défaut. La plupart sont bonnes, mais quelques-unes sont vides et doivent être remplies. On verra plus tard comment.

Maintenant qu’on a notre fichier de configuration qui contient notamment le chemin de la chaîne d’encodage, si on lance encoc.sh depuis ce répertoire il se servira toujours de cette chaîne. En lançant encoc.sh sans paramètres, il affichera en plus de l’aide les scripts disponibles dans la chaîne d’encodage utilisée. On peut obtenir plus d’informations sur un script en particulier en donnant -h suivi du script.

encoc.sh -h audio.extract

Le script audio.extract est tout simple. On peut voir ce qu’il prend en entrée et produit en sortie. Ces fichiers correspondent aux variables $MTS et $AUDIO_TRACK du fichier de configuration encoc.config. On peut les modifier, ce qui peut être utile si ne veut pas suivre à la lettre la chaîne de traitement en utilisant des fichiers alternatifs.

Pour lancer le script, il suffit de taper encoc.sh audio.extract.

Voyons un script un peu plus complexe. Tapez :

encoc.sh -h audio.mix

En plus des fichiers d’entrée et de sortie, ce script utilise d’autres variables de la configuration. Certaines sont requises, d’autres optionnelles. Lorsqu’une variable requise est définie, elle apparaît en vert, sinon elle est en rouge. Pour audio.mix il va nous falloir définir AUDIO_START et AUDIO_END, respectivement le début et la fin de la conférence, en audio.

Pour définir ces variables, il y a deux façons de faire. Soit temporairement, pour tester, en les donnant directement dans la ligne de commande :

encoc.sh AUDIO_START=07:56.8 AUDIO_END=1:04:57 audio.mix

Soit en éditant les variables dans le fichier de configuration. On peut aussi demander à encoc.sh qu’il modifie le fichier de configuration avec les valeurs qu’on lui donne, à l’aide de l’option -w :

encoc.sh -w AUDIO_START=07:56.8 AUDIO_END=1:04:57

Le format des temps est toujours [[[[heures:]minutes:]:secondes]:milisecondes]. En interne encoc.sh converti toujours les temps en secondes, ce qui permet de faire des additions et soustractions, et qui marche pour tous les logiciels. On peut voir la ligne de commande qu’encoc compte lancer avec l’option -p (pretend) :

encoc.sh -p audio.mix

Ceci peut s’avérer très utile si on souhaite modifier la ligne de commande et la lancer soi-même, cependant rien de tout ça ne sera sauvegardé.

L’option -t permet de lancer chaque commande avec time, pour voir combien de temps elle prend.

Avantages

Les avantages à utiliser encoc sont :

Organisation des scripts

Les scripts forment un arbre (inversé) de dépendances qui ressemble à ceci :

upload
 `-mux
    `+-audio.enco
     |  `-audio.mix
     |     `-audio.extract
     +-intro.enco
     |  `-intro.rasterize
     |     `-intro.gensvg
     `-video.enco

Pour une conférence classique

Les paramètres par défaut de la chaîne toulibre correspondent à une conférence classique d’une rencontre Toulibre. Dans chaque étape interviennent des variables de configuration qui peuvent être vues avec -h. Dans ce qui suit on ne détaille que les variables les plus importantes, mais d’autres peuvent être assez utiles.

Le son :

La vidéo :

L’intro :

Le muxage :

L’upload :