Améliorer la réactivité de Shotcut en supprimant les vignettes de la timeline

alt

Mise à jour 29/02/2016 : suite à l'écriture de cet article, le développeur de Shotcut a intégré l'affichage des vignettes en tant qu'option dans la version 16.02. Cependant, si vous désirez comprendre pourquoi j'ai fait cette proposition, vous pouvez lire tout de même la suite.

A bas la vignette !

Ne voyez pas en ce sous-titre racoleur une volonté perfide de manifester mon mécontentement devant un retour possible de la vignette automobile, mais une manière de redonner au logiciel de montage libre Shotcut, un bon coup dans les fesses en ce qui concerne la réactivité de sa timeline.

Depuis quelques années, on assiste à une recrudescence, voir une résurrection, de logiciels libres dédiés au montage. Je retiendrai notamment :

  • Lightworks : la grosse artillerie venue de Hollywood
  • Cinelerra : qu'on croyait enterré mais qui revient avec un tout nouveau site, des nouveaux icônes et un trailer avec la musique de Titanic (je suis encore sous le choc)
  • Shotcut : je vais y revenir
  • OpenShot : qui au moment où j'écris ces lignes vient d'annoncer la sortie de la version 2.0 tant attendue (en tout cas par moi), car multiplateformes !
  • Kdenlive : un des premiers du genre, qui continue d'évoluer, sous Linux uniquement.

Je reviens donc sur Shotcut. Ayant initialement obtenu un BTS Audiovisuel option Montage au BTS de Saint-Quentin (la Picardie en Force !), c'est donc avec ma casquette de monteur que je vais vous donner mon avis sur ce logiciel :

Les bons et mauvais cotés de Shotcut

Shotcut est multiplateforme (Linux / Windows / Mac), ce qui est assez rare pour ce type de logiciel. Il est clairement incomplet car il lui manque encore pas mal de trucs assez basiques, comme la possibilité de bouger à la souris plusieurs clips en même temps (mais on peut les bouger via le mode Insert et/ou Ripple). Pourtant à coté de ça, on trouve des fonctions d’étalonnages 3 voies et de chroma-keying accélérées par le GPU et donc temps réel ! C'est à se demander qui décide des priorités d'implémentations (comme c'est souvent le cas dans les logiciels libres).

Un des points forts de Shotcut est aussi sont modules d'encodage intégré, qui n'a rien à envier à ce que propose un Adobe Media Encoder. J'irai même jusqu'à dire qu'il permet parfois certaines choses que AME ne permet pas (comme l'encodage par Quantizer, par exemple). Basé sur FFMPEG, il est capable de sortir des fichiers dont l'optimisation qualité/poids peut vraiment être travaillé, si tant est qu'on s'en donne la peine et qu'on soit prêt à avoir quelques maux de têtes.

Bref, Shotcut n'est clairement pas le meilleur logiciel de montage libre pour monter un documentaire de 52 minutes, mais il a sa place pour certaines applications, notamment sur des projets de montage cours.

Modularité et paquet de nouilles

Un autre point important concernant Shotcut est sa plus ou moins grande stabilité et réactivité en fonction des plateformes qui le fond tourner. Mais une des raisons de ces crashs fréquents et l'asynchronisme des processus auxquels il fait appel. Shotcut est avant tout un "Front-End", c'est à dire une façade faisant tourner en arrière-plan tout un tas d'autres logiciels fournis avec l'installeur sous forme de libraires. On y trouve :

  • frei0r-1 : pour les effets graphiques/vidéos, notamment ceux utilisant le GPU
  • ladspa : pour la gestion de l'audio
  • mlt : pour l'extraction de blocs vidéo et audio
  • qt5 / qml : pour l'interface

A chaque fois que vous cliquez sur un bouton, que vous bougez un clip, que vous en supprimez un, Shotcut appelle une ou plusieurs de ces applications, attend leurs réponses et agit en conséquence. Mais parfois, si l'une des librairies met du temps à répondre, les autres doivent l'attendre et la communication entre ces éléments commence à ressembler à un sac de nouilles après avoir éternué devant la casserole.

Par conséquent, plus les librairies répondront vite ... et mieux on se sentira !

Et il y a un élément dans Shotcut qui a tendance à fortement cracher dans la casserole, c'est l'extraction de vignettes placées sur chaque début et fin de clip. Pour le coup, c'est MLT qui s'y colle et il doit le faire pour chacun des clips présents à l'écran. Si vous dé-zoomez à mort, vous pouvez facilement vous retrouver avec 50 clips à l'écran, soit 100 vignettes à extraire. Si vous travaillez avec des fichiers de style MP4/H.264 Long GOP (merci les 5D Mark II / Mark III qui pondent parfois des GOP de 128 images, voir plus), vous allez sentir passer la pilule !

alt

J'ai entouré ici en jaune les dites vignettes. Si vous vous déplacez dans la timeline : rebelote, on est reparti pour faire chauffer 5 kilos de pattes. Au final, le soft devient complétement inutilisable.

Bref, même si ça part d'un bon sentiment, il serait sympathique de la part de Shotcut de s'abstenir de faire ces vignettes quand on commence à secouer un paquet de clips en même temps. Malheureusement, aucune option ne permet de supprimer ces appels dans les préférences.

Hackons Shotcut pour le bien de tous

Shotcut étant codé sur une base Qt5 / QML, on peut donc considérer que c'est un soft un peu bâtard, utilisant des bouts de Javascript, des librairies compilés en C++, du QML qui est en fait une sorte de Javascript/CSS déguisé ... bref, un beau patchwork dont nous allons pouvoir tirer avantage ! Avec un peu de chance, l'appel à MLT pour la génération des vignettes sera accessible avec un simple éditeur de texte et auquel cas, on pourra lui mettre un bon coup d'extincteur dans la face, assez facilement !

Quand je parle d'éditeur de texte, je ne parle pas de Wordpad / Notepad sous Windows, qui ont tendance à complétement bousiller l'encodage de vos fichiers rien qu'en les ouvrant. Préférez des éditeurs tels que Notepad++ ou Atom.

Une fois que vous êtes équipé, rendez-vous dans le dossier où est installé Shotcut, puis naviguez jusqu'à :

\Shotcut\share\shotcut\qml\timeline

Vous y trouverez un fichier nommé : Clip.qml

Faites-en une copie avant de le trucider, histoire d'éviter les fausses manips, puis recherchez la déclaration de la fonction imagePath :

function imagePath(time) { ... }

Au moment où j'écris ces lignes, on peut trouver cet appel à la ligne 96 (pour la version 16.01). Il se peut au cours des évolutions de Shotcut que cet appel se déplace.

Supprimez tout le contenu se trouvant entre les accolades, afin de ne garder qu'une déclaration de fonction ne faisant rien :

function imagePath(time) {}

Ainsi, Shotcut ne fera plus d'appel à mltService qui est à l'origine de la génération de vignettes. La réponse sera instantanée et 'image://thumbnail/...' ne sera pas appelé non plus afin de caler cette vignette au début ou à la fin d'un clip.

Sauvez votre fichier et relancez Shotcut. Votre timeline devrait à présent ressembler à ceux-ci :

alt

On peut voir que les vignettes ne sont plus là. Lors de la navigation dans la timeline et l'utilisation fréquente de Split at Playhead via la touche S, voir la suppression d'un clip en mode Ripple via la touche X, vous devriez voir une sacré différence de réactivité (en tout cas, pour moi c'est assez flagrant).

Je pense qu'il est encore possible d'effectuer ce genre de bidouilles à plusieurs endroits dans le logiciel, alors si vous vous sentez l'âme d'un spéléologue du code, n'hésitez pas à m'en faire part dans les commentaires de ce billet.