Compresser efficacement une vidéo avec ffmpeg et Blender

Si vous utilisez Blender pour faire du montage vidéo sur Linux, vous avez sûrement été très déçus par la qualité et la taille des vidéos exportées en H264 avec ffmpeg, couleurs ternes, mauvaise précision des animations, taille gigantesque si comparée à la qualité … Ceci est du aux réglages par défaut de ffmpeg par blender, et le plus drôle c’est qu’on ne peut presque rien changer à ces paramètres.

Cet article fait suite à celui-ci ou je cherchais justement les différences entre les réglages du codec H264 entre 2 vidéos.

La solution utilisée

Un Frame Serveur

Comme on ne peut pas toucher directement aux paramètres de ffmpeg dans Blender une solution consiste à faire un frameserver avec Blender puis écrire un programme qui ira chercher les images générées et lancera ffmpeg avec les bons réglages afin de reconstituer la vidéo sans perdre de qualité.

Faire un frameserver avec Blender

 

On crée un Frame server puis on le lance en cliquant sur le bouton « animation » comme si on lançait un encodage normal. À ce moment si tout ce passe correctement Blender crée le serveur sur localhost port 8080. Vous devriez y accéder en entrant http://127.0.0.1:8080 dans un navigateur Internet.

Accès au frameserver via un navigateur

 

Si vous voyer une page comme ça c’est que le serveur est démarré.

On accède aux informations sur la vidéo via http://127.0.0.1:8080/info.txt on a notamment le nombre de frame (images) de la vidéo. Puis on accède séquentiellement aux images par http://127.0.0.1:8080/images/ppm/1.ppm puis 2 etc. Quand je dis séquentiellement c’est que les images sont générées une seule fois et dans l’ordre. Notons que les images sont non compressées et dans un format non destructeur donc une image de 1920×1080 fait 6.2Mo

L’audio

C’est bien beau tout ça mais une image ça ne contient pas d’audio, il faut donc générer séparément. Blender permet ça simplement.

Exporter l’audio séparément

 

Choisir le format pour l’audio

 

Problématique

Une vidéo en NTSC fait 30 images par secondes, donc à raison de 6.2Mo l’image ça nous donne plus de 11Go par minutes de vidéo, ce qui est beaucoup. De plus il est évident qu’on ne va pas télécharger les milliers d’images à la main ce serait juste une perte de temps colossale.

J’ai donc écrit un petit programme en Python3 qui fait ça pour moi. Il est disponible sur Github

Fonctionnement

Le programme va se connecter sur le Frameserver et télécharger 10 secondes de vidéo (300 images) puis il va encoder ces 10 secondes supprimer les images et faire les 10 secondes suivantes et ainsi de suite. À la fin il y aura plein de petites vidéos de 10 secondes et le programme en fera une seule.

Pour le lancer il faut simplement faire

python3 encode_video.py

Il est aussi possible de passer l’audio (en mp3) directement

python3 encode_video.py --audio <audio_file>

À voir sur Github pour les évolutions du logiciel.

Conclusion

Voila j’allais pas me laisse faire par Blender non plus 😊

En attendant que le logiciel de montage vidéo olive-editor soit complètement fonctionnel, Blender est (à ma connaissance) le seul logiciel de montage vidéo réellement efficace sur Linux. Donc ça valait le coup de prendre un peu de temps pour avoir des vidéos de qualité en sortie ou tout du moins pouvoir gérer finement les réglages de ffmpeg afin d’avoir exactement ce qu’on désire.

Olivier Munier

Depuis ma plus tendre enfance j'ai toujours été attiré par les domaines techniques et les appareils électroniques. Très vite je me suis intéressé à l'informatique et j'ai eu mon premier PC en 1992. Au début des années 2000, j'ai découvert Linux et le monde des logiciels libres et open source. Assez vite j'ai décidé de me spécialiser sur ce vaste monde afin de devenir un expert. Titulaire d'un master en Informatique, mes compétences couvrent un très large éventail, notamment l'administration système et réseau Linux, la virtualisation et la programmation C, Shell et surtout Python. Sur ce site je partage mes connaissances, réalisations et avis sur tout un tas de domaines mais particulièrement l'informatique, l'électronique et la geekitude.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *