Modifier la luminosité d'une vidéo dans avconv (ffmpeg)
14 Aug 2012Pour partager des vidéos capturées par mon appareil photo, je les convertissais jusqu’alors en Ogg/Theora grâce à ffmpeg2theora. Ce format (contrairement au H264) est libre et lisible nativement par Firefox, y compris par la version mobile.
Mais j’envisage depuis longtemps de passer à WebM (le format libéré par Google il y a un peu plus de deux ans), plus performant, lui aussi lu nativement par Firefox (et par d’autres). Pour cela, je vais utiliser avconv.
avconv
Qu’est-ce qu’avconv ? Le meilleur moyen de le savoir est d’exécuter ffmpeg
sans arguments :
$ ffmpeg
…
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
EDIT : En fait, c’est plus compliqué que ça.
J’ai précisé ffmpeg dans le titre du billet car je pense que c’est encore sous ce nom que l’outil est le plus connu. Le contenu de ce billet s’applique aussi bien à ffmpeg qu’à avconv.
Filtres
Il m’arrive d’avoir besoin d’appliquer des filtres très simples : typiquement,
augmenter la luminosité d’une vidéo. ffmpeg2theora
permet de le faire
directement grâce à l’option
-B
.
Mais on a beau chercher dans man avconv
, on ne trouve rien.
frei0r
C’est là qu’intervient le projet frei0r. Il s’agit d’une API permettant
d’appliquer des filtres vidéo que chaque application pourra utiliser. Et ça
tombe bien, l’application avconv
peut l’utiliser si elle a été compilée avec
l’option --enable-frei0r
.
La bonne nouvelle, c’est que la version distribuée par Debian wheezy est compilée avec cette option. La mauvaise, c’est que celle fournie dans Ubuntu 12.04 ne l’est pas.
frei0r a besoin de plugins permettant d’appliquer les filtres. Il est
nécessaire pour cela d’installer frei0r-plugins
:
sudo apt-get install frei0r-plugins
avconv + frei0r
La syntaxe pour utiliser frei0r dans avconv est la suivante :
-vf frei0r=<filter_name>[{:|=}<param1>:<param2>:...:<paramN>]
Mais comment connaître les filter_name
s disponibles et leurs paramètres ? Je
n’ai trouvé aucune documentation à ce sujet. J’ai donc consulté les
sources.
À partir de là, on comprend facilement que la luminosité est modifiée par le
filtre brightness comportant un paramètre de type double
(voir notamment la fonction f0r_get_param_info
) compris entre 0
(sombre) et
1
(clair) (0.5
étant la luminosité de la vidéo d’origine).
En respectant la syntaxe, cela donne par exemple :
avconv -i video.mts -s 640x360 -ac 1 -q:a 2 -b:v 600k \
-vf frei0r=brightness:0.6 output.webm
Il existe plein d’autres filtres. Par exemple pour le contraste, c’est contrast0r :
-vf frei0r=contrast0r:0.4
Pour les combiner, il suffit de concaténer plusieurs blocs -vf
:
-vf frei0r=brightness:0.6,frei0r=contrast0r:0.4
Conclusion
Malgré les apparences, avconv permet, pour peu qu’il soit compilé avec l’option-qui-va-bien, d’encoder des vidéos en modifiant la luminosité, le contraste, et d’appliquer bien d’autres filtres… ce qui est très pratique.
juste parce que ca m’intriguait:
http://stackoverflow.com/questions/9477115/who-can-tell-me-the-difference-and-relation-between-ffmpeg-libav-and-avconv