Cadence vidéo sur PC

De NoFrag
Aller à : navigation, rechercher

Si vous utilisez un PC pour lire des vidéos et que vous voulez lire des films/séries dans de bonnes conditions (c'est-à-dire sans aucune saccade d'aucune sorte), vous devriez lire cette page.

Cet article est à jour vis-à-vis de l'état de l'art en avril 2018

TL;DR[modifier]

Si vous n'avez pas le temps ou l'envie de rentrer dans les détails, suivez cette procédure simple pour obtenir d'excellents résultats dans la majorité des cas :

  1. Utilisez un lecteur vidéo DirectShow, tel que MPC-HC par exemple.
  2. Installez madVR et configurez votre lecteur pour l'utiliser.
  3. Dans les options de madVR, activez la fonctionnalité appelée "Smooth Motion".
  4. Vous êtes paré !

Voir aussi la section recommandations.

Les problèmes à résoudre[modifier]

Il y en a deux, qui sont assez proches mais peuvent être traités de manière plus ou moins indépendante. Notez qu'il faut éliminer les deux problèmes simultanément pour obtenir un résultat acceptable, et qu'une solution pour l'un n'est pas forcément une solution pour l'autre.

Telecine judder (saccades continues - 24p@60Hz, "3:2 pull down")[modifier]

Le framerate normal d'une série TV ou d'un film est ~23.976 FPS (24/1.001 précisément), soit une frame toutes les ~41.7 millisecondes.

La fréquence de rafraîchissement par défaut d'un PC est de 60 Hz, soit une frame toutes les ~16.7 millisecondes.

Comme la fréquence de rafraîchissement est plus élevée que le framerate, le lecteur vidéo sur le PC (ou le framebuffer du GPU, selon les cas) va compenser en répétant des frames, de telle sorte que la vitesse de lecture soit correcte. (Si c'était le contraire - un cas très rare - on compenserait en éliminant des frames.) En pratique, et en simplifiant un peu, le comportement consiste à envoyer la frame suivante au GPU lorsque le temps indiqué par l'horloge dépasse la marque temporelle (le timestamp) de la frame en question. Par exemple, la troisième frame d'une vidéo à 24 FPS commence à ~124.9 ms, donc dès que l'horloge affiche ~124.9 ms depuis le début de la lecture, on envoie la frame au GPU, qui l'affichera au rafraîchissement suivant.

Si la fréquence de rafraîchissement est égale au framerate (24 Hz), alors le comportement décrit ci-dessus va simplement afficher une frame par rafraîchissement. (C'est le comportement d'un lecteur Blu-ray de salon, par exemple.) Dans ce cas le problème décrit dans cette section ne s'applique pas.

Si la fréquence de rafraîchissement est un multiple du framerate (par exemple : 48, 72, 96, 120, 144 Hz), alors le comportement décrit ci-dessus a pour effet de répéter chaque frame un certain nombre de fois (respectivement : 2, 3, 4, 5, ou 6 fois) de manière constante et régulière. Là encore le problème ne se pose pas.

Par contre, si vous êtes en 60 Hz comme l'immense majorité des gens, alors ce n'est pas si simple, car 60 n'est pas un multiple de 24. Il faudrait répéter chaque frame 2.5 fois, mais ça n'a pas de sens. Au lieu de ça, le comportement décrit ci-dessus va avoir le résultat suivant : la première frame va être répétée 3 fois, puis la frame suivante 2 fois, puis la frame suivante 3 fois, etc. (Ce processus est souvent appelé "3:2 pull down", mais ce terme n'est pas tout à fait correct ici car le flux n'est pas entrelacé.) Par exemple, une série de frames 24 FPS "A B C D E" va être convertie en 60 FPS sous la forme "AAA BB CCC DD EEE".

Ce comportement est correct dans la mesure où il permet à la vidéo d'être lue à la bonne vitesse. Mais cette approche présente un gros problème : la vidéo finale une fois convertie ne respecte pas la cadence d'origine. Normalement, dans la vidéo 24 FPS d'origine, chaque frame est affichée pendant ~41 ms. Mais dans la vidéo 60 FPS finale, ce n'est pas le cas : une frame sur deux est affichée pendant ~50 ms, tandis que l'autre est affichée pendant ~33 ms. C'est une dégradation - la vidéo parait saccadée car le rythme de présentation des frames est incorrect. Il s'agit du "Telecine judder". La documentation de mpv propose une autre présentation de ce phénomène.

Un objet qui bouge de manière constante à l'écran, par exemple, donnera l'impression de tressauter au lieu de présenter un mouvement constant, doux et fluide. L'effet n'est pas catastrophique parce que la cadence reste plus ou moins régulière (dans le sens où la procession 3:2:3:2, elle, reste constante), mais néanmoins visible dans certaines scènes, en particulier lorsque les objets sont nets et la caméra est en mouvement. Un générique défilant peut également servir d'exemple. Un œil initié qui sait ce qu'il cherche peut remarquer le problème après seulement quelques secondes de lecture, en fonction du contenu.

Cette cadence 3:2 apparaît lorsqu'on lit une vidéo 24p à 60 Hz. Dans d'autres cas, comme 25p à 60 Hz (qui n'est pas rare en dehors des films/séries) ou 24p à 50 Hz, un phénomène similaire apparaît mais la cadence n'est pas la même ; elle est généralement pire et les saccades sont bien plus visibles.

Horloge désynchronisée (discontinuités)[modifier]

Dans un appareil dédié à la vidéo, tel qu'un lecteur Blu-ray de salon, la cadence de lecture est sous le contrôle d'un seul et unique signal d'horloge. Lors de la lecture d'une vidéo à 24 FPS, ce signal d'horloge donne le « top » toutes les ~41.7 ms pour envoyer la frame suivante.

Le son d'une vidéo est typiquement échantillonné à 48 kHz. Dans l'exemple d'un lecteur dédié, la cadence sonore est gérée par le même signal d'horloge. Cet arrangement garantit que la vidéo et le son progressent à la même vitesse. Il y aura précisément 2002 échantillons audio entre chaque frame (48000 / 23.976), parce que la vidéo et le son sont régis par le même « top ». Ils avancent de manière parfaitement synchronisée. (Ou, du moins, s'il y a décalage il sera constant.)

Le Seigneur des PC : les Deux Horloges[modifier]

Fort malheureusement, dans le cas d'un PC, la situation est plus compliquée. Un PC dispose d'un certain nombre de signaux d'horloge divers et variés : le CPU bien sûr, mais également l'horloge de la sortie du GPU (qui contrôle le rafraîchissement vidéo) et l'horloge de la sortie son (qui contrôle la vitesse de la sortie audio).

Dans un monde parfait, ces horloges seraient parfaitement précises - une fréquence de rafraîchissement « nominale » de 60 Hz a pour effet d'envoyer très précisément 60 images par seconde à l'écran, et une fréquence d’échantillonnage audio « nominale » de 48 kHz a pour effet d'envoyer très précisément 48000 échantillons audio via la sortie (analogique ou numérique). Mais nous ne vivons pas dans un monde parfait, les composants électroniques ont leurs limites, et une horloge censée débiter du 60 Hz pourrait en réalité débiter 59.99 Hz, ou bien 60.01 Hz. Même chose pour l'horloge audio.

Pour l'horloge vidéo, il y a un problème supplémentaire lié à la configuration. Les paramètres standards (CVT) pour du 1080p24 (~23.9760 Hz) nécessitent une pixel clock de ~74.1759 MHz. Mais en pratique le GPU n'acceptera pas une configuration aussi fine ; la pixel clock n'est ajustable que par paliers de 0.01 MHz. (Sous Linux la situation est meilleure : le serveur X.Org offre des paliers de 0.001 MHz.) Du coup, on se retrouve forcé de régler la pixel clock à 74.1700 MHz (fréquence de rafraîchissement ~23.9741 Hz, une déviation de ~0.007%) ou à 74.1800 MHz (fréquence de rafraîchissement ~23.9773 Hz, une déviation de ~0.005%). L'horloge audio, elle, n'accepte que précisément 48000 Hz et rien d'autre.

Si il n'y avait qu'une seule horloge, comme dans un appareil dédié, une telle déviation ne serait pas un problème. Après tout, il s'agit là de déviations minimes - de l'ordre de 0.01%, soit moins d'une seconde sur un film de 2 heures. La vidéo sera lue trop vite ou trop lentement, mais la différence est imperceptible. À moins que vous ne vérifiez la longueur du film chronomètre en main (et de bons réflexes), vous ne remarquerez rien.

En revanche, si les horloges audio et vidéo sont séparées et indépendantes, comme dans un PC, le lecteur vidéo va faire face à un gros problème : si une des deux horloges est seulement 0.01% plus lente que l'autre, alors au bout de seulement ~17 minutes, l'audio sera décalé de ~100 ms par rapport à la vidéo !

Audio ou vidéo : It's Time To Choose[modifier]

Cela est bien sûr inacceptable, donc le lecteur vidéo va devoir choisir une des deux horloges et « imposer » sa cadence au reste du système. Le problème, c'est qu'il n'est pas possible dans un PC de choisir quel signal d'horloge est utilisé pour gouverner la fréquence de rafraîchissement vidéo ou la sortie audio. Du coup, le lecteur vidéo se retrouve face à un choix cornélien :

  • Si le lecteur choisit de suivre l'horloge vidéo, alors la sortie audio va débiter plus vite que le lecteur ne lui fournit le son (buffer underrun), ou bien se retrouver en trop-plein de données parce que le lecteur lui fournit le son trop vite (buffer overflow). Dans les deux cas, cela produit des discontinuités audio (craquements) fort désagréables.
  • Si le lecteur choisit de suivre l'horloge audio, alors la sortie vidéo va se retrouver à répéter une frame parce que lecteur ne lui a pas fourni la frame suivante à temps pour le rafraîchissement (frame repeat), ou bien une frame va passer à la trappe parce que le lecteur est déjà passé à la suivante avant que la précédente n'ait été affichée pour le temps prévu (frame drop). Dans les deux cas, la cadence va souffrir et une saccade va apparaître.

C'est choisir entre la peste et le choléra. En pratique, tous les lecteurs (du moins dans leur configuration par défaut) optent pour la seconde option : le son est parfait, mais la vidéo sera potentiellement saccadée. C'est un choix judicieux, parce qu'une saccade peut parfois passer inaperçue s'il n'y a pas trop de mouvement ; un craquement audio est beaucoup plus difficile à cacher en comparaison. Mais soyons clairs : le problème reste entier, et le résultat est inacceptable pour un vidéophile qui se respecte.

Quelles conséquences ?[modifier]

La gravité du problème dépend de la différence de vitesse (déviation) entre les horloges audio et vidéo. Cette différence est plus ou moins imprévisible et dépend du matériel utilisé. (Elle peut même varier en fonction de la température.) Théoriquement, pour quelqu'un de chanceux elle peut être tellement faible qu'elle ne pose pas de vrai problème, mais ça revient à gagner la loterie.

En pratique, la déviation peut être de l'ordre de 0.01%. Avec cette valeur d'exemple, et une fréquence rafraîchissement de 60 Hz, le décalage entre l'audio et la vidéo atteindra la durée d'une frame (~16.6 ms) au bout de ~3 minutes ; on aura donc une discontinuité vidéo (saccade) toutes les ~3 minutes pour compenser. À 24 Hz, une frame dure ~41.7 ms ; on aura donc une discontinuité toutes les ~7 minutes. Une partie de ces discontinuités passeront inaperçues parce qu'elles se produiront lors de scènes avec peu ou pas de mouvement. Les autres seront visibles.

Ce problème peut paraître moins grave que le problème du telecine judder décrit plus haut, mais ce n'est pas le cas ; en réalité, le résultat visuel peut parfois être pire. En effet, le telecine judder a au moins le bon goût de présenter une cadence relativement régulière avec un motif constant auquel on peut tenter de s'habituer ; ces discontinuités ponctuelles, en revanche, agissent par surprise et sont donc particulièrement remarquables. Bien sûr, ces deux problèmes étant relativement indépendants, il est tout à fait possible de se retrouver avec les deux problèmes à la fois : une mauvaise cadence qui par dessus le marché souffre de discontinuités ponctuelles. C'est même la situation par défaut pour un PC standard, non configuré spécialement pour la lecture vidéo.

Plus la fréquence de rafraîchissement est basse, moins les discontinuités sont fréquentes, mais plus elles durent longtemps (parce que l'intervalle entre deux frames est plus élevé), donc au final le résultat n'est pas forcément meilleur ou pire. Cela dit, à 24 Hz, une discontinuité est tellement longue et flagrante qu'elle peut à elle seule ruiner l'immersion dans une scène à fort mouvement.

Questions ouvertes[modifier]

  • Si la fréquence de rafraîchissement est très élevée (120 Hz ou plus), alors les discontinuités deviennent très fréquentes mais également très courtes. Logiquement, il devrait y avoir un seuil à partir duquel les discontinuités deviennent tellement fréquentes et tellement courtes qu'elles ne sont plus remarquables. Ce seuil est-il atteint à 120 Hz ? 144 Hz ? 200 Hz ?

Les solutions[modifier]

Utiliser 24 Hz au lieu de 60 Hz[modifier]

Il est très facile d'éliminer le problème du Telecine judder : sous Windows, dans les propriétés de votre moniteur, choisissez 24 Hz (ou plutôt 23 - voir ci-dessous) au lieu de 60 Hz.

Cependant, notez bien que cette solution ne fera rien pour éliminer le problème des horloges. En fait, elle peut même l'empirer, parce que les discontinuités, bien que moins fréquentes, seront plus longues donc plus sévères.

Par ailleurs, certains écrans ne supportent pas une fréquence de rafraîchissement de 24 Hz, en particulier les moniteurs PC. Pire : certains écrans accepteront un tel signal mais sont incapables de faire du "vrai" 24 Hz - ils appliqueront un 3:2 pulldown en interne, ce qui nous ramène à la case départ. Les écrans capables de produire du "vrai" 24 Hz sont désignés par la mention "Judder-Free 24p" sur Rtings.

Certains logiciels vidéo, en particulier madVR, sont capables de passer l'écran dans un mode donné (par exemple 24 Hz) automatiquement lorsque la lecture commence, et de repasser en mode « normal » (par exemple 60 Hz) lorsque la lecture est terminée. Cette fonctionnalité est particulièrement pratique lorsque le PC est également utilisé pour autre chose que de la lecture vidéo, ou pour lire des vidéos de framerates différents.

Le piège du 24.000 Hz vs. 23.976 Hz[modifier]

Une erreur typique de débutant consiste à régler la fréquence de rafraîchissement sur 24.000 Hz (ou 60.000 Hz), au lieu de 23.976 Hz (ou 59.940 Hz). Mais l'horloge audio, elle, est toujours configurée pour 48000 Hz - pas 48048 Hz. Cela revient donc à faire tourner l'horloge vidéo légèrement trop vite par rapport à l'horloge audio… et on retombe sur le problème ci-dessus.

La différence entre 24.000 Hz et 23.976 Hz peut paraître ridicule, mais rendez-vous compte qu'il s'agit d'une déviation de 0.1% - une discontinuité toutes les 42 secondes ! Un excellent moyen de transformer un film en festival des saccades.

Faites attention à ça lorsque vous choisissez une fréquence de rafraîchissement. En fonction du matériel utilisé, Windows vous donne parfois le choix entre "23 Hz" et "24 Hz", ou entre "59 Hz" et "60 Hz". De manière assez obscure, ces fréquences correspondent à 23.976, 24.000, 59.940, et 60.000 Hz, respectivement.

Encore une fois, gardez bien en tête que même si votre fréquence de rafraîchissement nominale est correcte, cela ne veut pas dire que vos horloges audio et vidéo seront parfaitement synchronisées pour autant (voir ci-dessus). Cela diminue la fréquence des discontinuités, mais il faut utiliser une solution plus sophistiquée parmi celles décrites ci-dessous pour les éliminer totalement.

Utiliser un multiple de 24 Hz (48/72/96/120/144) au lieu de 60 Hz[modifier]

Une variante de la solution précédente.

Certains écrans ne supportent pas 24 Hz, mais supportent 50 Hz (le framerate de la TV en Europe). Dans ce cas il y a fort à parier que l'écran acceptera 48 Hz, puisque c'est suffisamment proche de 50 Hz (dans les 5% de tolérance permise par le standard VESA DMT). Attention, comme dans la solution précédente rien ne garantit que l'écran produira du "vrai" 48 Hz dans ce cas : méfiez-vous. Aussi, comme 48 Hz n'est pas une fréquence standard, il vous faudra la créer manuellement à l'aide d'un logiciel adéquat, tel que l'assistant de madVR ou l'outil intégré aux drivers nVidia ("résolutions personnalisées").

Et bien sûr, n'oublions pas que beaucoup d'écrans PC "gaming" supportent des fréquences très élevées, telles que 120 ou 144 Hz. Coup de bol, il s'agit de multiples de 24 ! Par ailleurs, avec une fréquence aussi élevée les discontinuités liées aux différences d'horloge deviennent tellement courtes qu'elles pourraient potentiellement devenir indistinguables (corrigeant ainsi les deux problèmes à la fois), mais ça reste à démontrer.

Encore une fois, n'oubliez pas qu'il faut choisir ~47.952, ~119.880 ou ~143.856 Hz, pas les chiffres ronds.

À noter qu'en utilisant un multiple le signal est moins « propre » qu'en 24 Hz parce que chaque frame est répétée plusieurs fois. Normalement ça ne devrait faire aucune différence, mais certains algorithmes temporels utilisés dans certaines TVs (par exemple, motion interpolation ou, plus inquiétant, des caractéristiques ayant trait au stutter) peuvent théoriquement donner des résultats non optimaux avec un tel signal.

Écran capable de détecter 24p@60 Hz (inverse telecine)[modifier]

Certains TV et projecteurs sont capables de détecter une cadence 3:2 dans le signal d'entrée. Si un tel motif est détecté, l'écran passera automatiquement en 24p et sautera les frames dupliquées, éliminant ainsi le telecine judder de manière transparente.

Malheureusement, cette solution souffre d'un certain nombre de contraintes :

  • Il faut disposer d'un écran proposant cette fonctionnalité. Ils sont désignés par la mention "Judder-Free 24p via 60p" sur Rtings. Cette fonctionnalité semble être apparue en 2017 sur les TVs, et n'est généralement pas proposée sur les moniteurs PC.
  • Cette approche ne fonctionnera probablement pas si l'écran est en mode "low input lag", "gaming" ou "PC", car ces modes ont tendance à désactiver ce genre de traitement pour gagner en latence et/ou « pureté ».
  • La fiabilité de cette solution dépend beaucoup de la qualité du traitement interne effectué par l'écran. Un algorithme mal branlé peut causer des discontinuités supplémentaires.
  • Il peut y avoir des implications concernant la qualité d'image, en fonction des traitements effectués par l'écran.
  • Il est impossible d'utiliser madVR dans ce cas, car il ne permet pas d'obtenir une cadence stable en 24p@60Hz pour le moment.

Pour plus d'informations sur cette solution, vous pouvez lire les discussions sur le forum NoFrag et le forum madVR.

À l'instar des solutions précédentes, cette solution ne fait rien pour résoudre le problème des horloges. Assurez-vous au moins de choisir ~59.940 Hz, pas 60 Hz, pour diminuer la fréquence des discontinuités.

Note : cette solution n'a rien à voir avec l'option "inverse telecine" des drivers nVidia, qui n'a aucune importance et n'a aucun effet en pratique.

Ajuster la vitesse audio (ReClock)[modifier]

Dans la section sur le problème des horloges, il est expliqué que le lecteur vidéo choisit d'utiliser l'horloge audio, pas l'horloge vidéo, car débiter l'audio à la mauvaise vitesse produit des discontinuités audio audibles (craquements).

Pour éviter ces discontinuités, on peut essayer de caler l'horloge audio sur l'horloge vidéo. Par exemple, si l'horloge vidéo avance 0.01% plus vite que l'horloge audio, alors on pourrait demander à la sortie son de tourner à 48004.8 Hz au lieu de 48000 Hz.

En pratique ce n'est pas aussi simple (48004.8 Hz n'est pas une fréquence standard et sera refusée par le driver son), mais il est par contre tout à fait possible d'effectuer un traitement sur la bande sonore pour l'accélérer ou la ralentir tout en gardant la même fréquence d’échantillonnage ; cette opération s'appelle le "sample rate conversion" (SRC), ou "resampling". Normalement cette opération est utilisée pour changer la fréquence d’échantillonnage sans changer la vitesse de lecture, mais ça marche aussi dans le sens inverse - changer la vitesse de lecture sans changer la fréquence d’échantillonnage.

Notons qu'une telle solution est uniquement capable d'éliminer le problème des horloges ; elle n'élimine pas le telecine judder. Elle peut cependant être combinée avec une des solutions ci-dessus pour arriver à une solution complète. Par ailleurs, cette solution est utilisable avec une fréquence « ronde » (par exemple 24.000 Hz au lieu de 23.976 Hz), car la déviation de 0.1% induite par cette erreur est compensée également ; il reste néanmoins plus propre de choisir la bonne fréquence nominale.

Cette solution peut potentiellement dégrader la qualité audio de deux manières, toutes deux bénignes :

  • L'algorithme de SRC lui-même peut dégrader la qualité. En pratique, les algorithmes modernes ne produisent pas de dégradation audible.
  • Le changement de vitesse lui-même modifie la hauteur des notes, mais cela est imperceptible en-deça de 0.2%, un chiffre nettement supérieur à la déviation qu'on cherche à corriger.
    • Pour les paranos, il est possible de compenser la différence de hauteur (time stretching), mais ce traitement supplémentaire est overkill et peut causer plus de mal que de bien.

Limitation notoire de cette solution : elle est incompatible avec le bitstreaming, c'est-à-dire le décodage de l'audio en aval du PC (par exemple sur un ampli 5.1). En effet, pour pouvoir appliquer un traitement (SRC) sur l'audio, il faut le décoder d'abord. En pratique ce n'est un problème que si le bitstreaming est une nécessité pour vous, ce qui n'est pas une situation courante - vous n'avez pas à vous en soucier sauf cas très précis comme envoyer du Dolby Digital/DTS à travers une liaison S/PDIF, ou pour exploiter des formats dernier cri tels que Dolby Atmos ou DTS-X.

En pratique[modifier]

Il est possible d'effectuer cette correction manuellement en mesurant la déviation d'horloge, puis en appliquant un filtre SRC adéquat sur la bande son de la vidéo. Ce serait incroyablement laborieux ; heureusement, des logiciels existent pour effectuer ce traitement à la volée.

Au début de la lecture, le logiciel prend quelques secondes pour mesurer la vitesse des horloges audio et vidéo. Une fois la déviation déterminée avec une précision suffisante, le logiciel prend le contrôle de l'horloge pour ajuster la vitesse de lecture audio, et applique un filtre SRC pour éliminer les discontinuités audio qui seraient causées par le changement de vitesse.

  • ReClock est la référence dans ce domaine ; il s'agit du logiciel le plus vieux (première version sortie en 2002 !) et le plus connu. Il peut s'intégrer avec n'importe quel lecteur vidéo compatible DirectShow, par exemple MPC-HC, et en particulier est compatible avec PowerDVD.
    • Bémols : le développement de ReClock est plus ou moins abandonné, il n'est pas compatible avec un lecteur vidéo 64-bit, et il peut parfois avoir des difficultés à estimer la vitesse de l'horloge vidéo.
  • VideoClock est une fonctionnalité intégrée au lecteur (payant) JRiver MediaCenter.
  • Rate-Tuner est une extension pour le lecteur vidéo MPDN.
  • mpv (et dérivés tels que SMPlayer) propose l'option video-sync qui implémente cette fonctionnalité (valeur display-resample).
  • Potplayer semble inclure cette fonctionnalité en standard. [1] [2]

Frame blending (Smooth Motion)[modifier]

Souvenez-vous du principe de fonctionnement d'un moteur de rendu vidéo : on envoie une frame au GPU au point temporel adéquat, et le GPU se charge ensuite de délivrer cette frame au rafraîchissement suivant. Ce comportement peut donner lieu à des frame repeats indésirables si la sortie vidéo rafraîchit plus vite que le framerate de la vidéo, à cause du telecine judder ou du problème des horloges.

Madshi, l'auteur de l'excellent moteur de rendu vidéo madVR, a inventé une solution innovante à ce problème, qu'il a baptisé "Smooth Motion" : au lieu de laisser le GPU répéter une frame, on lui envoie une frame supplémentaire qui est une moyenne (mix/blend) de la frame précédente et de la frame suivante. Par exemple, dans le cas du telecine judder, au lieu d'envoyer la cadence "AAA BB CCC DD", on envoie la cadence "AA X BB CC Y DD", où X est une frame artificielle constituée à 50/50 de A et B, et Y est une frame artificielle constituée à 50/50 de C et D. On remarque que chaque frame est répétée "2.5" fois (le .5 correspondant au blend), au lieu de 2:3:2:3 fois. La documentation de mpv propose une autre présentation de cette solution.

Le même procédé est utilisé pour « adoucir » une discontinuité due à l'horloge : au lieu de répéter ou retirer une frame, on peut la fusionner à la place. Cette solution peut donc être utilisée pour résoudre les deux problèmes simultanément. En fait, l'algorithme se contrefout de savoir si un frame repeat ou un frame drop est causé par du 3:2 pulldown ou une discontinuité : dans les deux cas il fusionnera mécaniquement les frames sans chercher à comprendre. Cela en fait une solution très flexible et très générique, tout en étant très simple d'utilisation.

L'objection évidente à ce genre de traitement est qu'il altère la vidéo. Notons cependant qu'il ne faut pas confondre ce traitement avec du motion interpolation, qui n'a quasiment rien à voir : ici on ne cherche pas à calculer des vecteurs de mouvement et à reconstituer des frames intermédiaires, au lieu de ça on génère simplement du flou de mouvement pour « gommer » le problème. En particulier, le frame blending, contrairement à l'interpolation, ne peut pas donner à la vidéo une apparence plus "fluide" (soap opera effect) que la vidéo d'origine - le rendu reste authentique et conforme à la référence cinéma.

Pour obtenir les meilleurs résultats, il faut que les frames "blendées" soient affichées pendant le moins de temps possible, pour éviter que le spectateur ne puisse voir la supercherie. Il faut donc utiliser la fréquence de rafraîchissement la plus haute possible. En particulier, et de manière contre-intuitive, il est recommandé de rester en 60 Hz (ou plus) si Smooth Motion est utilisé, même si le contenu est en 24p (!). Utiliser Smooth Motion en 24 Hz est une mauvaise idée parce qu'une frame "blendée" restera à l'écran pendant beaucoup plus de temps. Par ailleurs, la précision de la fréquence de rafraîchissement n'est pas primordiale parce que Smooth Motion gommera toute discontinuité liée à l'horloge vidéo de toute façon.

De manière surprenante et remarquable, Smooth Motion en 24p@60Hz est capable de produire un résultat peu ou prou indistinguable du 24p « natif ». Il semblerait que ces frames "blendées" soient capables de berner l'œil humain de manière très efficace. En fait, il est même théoriquement possible d'obtenir un résultat plus "doux" que du 24p "sample and hold" natif parce que le flou de mouvement ainsi créé a tendance à renforcer l'impression de fluidité (une technique similaire est utilisée dans beaucoup de jeux vidéo). L'impression finale semble néanmoins varier selon les individus et l'écran utilisé.

Dans tous les cas, le flou créé par cette technique aura forcément tendance à diminuer la netteté de l'image dans les mouvements. Cela dit, dans le cas de contenu 24p les mouvements sont rarement nets en premier lieu, en raison des contraintes intrinsèques du format.

Smooth Motion est la seule vraie solution utilisable avec un écran qui n'accepte que du 60 Hz, ce qui inclut notamment certains moniteurs PC et en particulier les laptops. Dans le cas d'une TV ou d'un projecteur, gardez en tête que les algorithmes de traitement temporel intégrés à l'écran (motion interpolation, etc.) n'apprécieront pas forcément de se retrouver avec des frames blendées en entrée.

Il s'agit également de la seule solution qui est capable de s'adapter de manière transparente et automatique à toutes les situations mêmes les plus exotiques, comme les vidéos à framerate inhabituel (par exemple 25p), voire les (très rares) vidéos à framerate variable. C'est une solution idéale si vous regardez des contenus de formats très divers.

En pratique[modifier]

Il est théoriquement possible de traiter la vidéo à l'avance pour appliquer le frame blending, mais ce serait incroyablement laborieux. Heureusement, certains moteurs de rendu vidéo proposent de faire ce traitement à la volée :

  • L'excellent madVR propose l'option "Smooth Motion". madVR nécessite l'utilisation d'un lecteur vidéo compatible DirectShow, tel que MPC-HC.
  • Le lecteur vidéo MPDN semble proposer une option similaire appellée "Fluid Motion".
  • mpv (et dérivés tels que SMPlayer) propose l'option interpolation qui implémente cette fonctionnalité. La technique utilisée semble être subtilement différente (convolution) comparé à la solution classique (smoothmotion).

Ajustement avancé de la fréquence de rafraîchissement (Custom Mode)[modifier]

On a vu plus haut une solution consistant à ajuster la vitesse de lecture audio pour se caler sur la vitesse de l'horloge vidéo. En théorie, on pourrait faire le contraire : ajuster la fréquence de rafraîchissement vidéo pour se caler sur l'horloge audio. En effet, les drivers GPU modernes permettent (du moins en théorie) de créer des « résolutions personnalisées » avec des fréquences de rafraîchissement arbitraires.

En réalité, si on cherche à implémenter une telle solution de manière « naïve », on va se heurter à un problème qui a déjà été mentionné précédemment : il est impossible de personnaliser la fréquence de rafraîchissement de manière suffisamment fine. En pratique il y a une différence de l'ordre de 0.01% entre deux configurations adjacentes (par exemple, entre 23.9741 Hz et 23.9773 Hz), ce qui n'est pas suffisamment « fin » pour obtenir un résultat acceptable - on se retrouve avec une discontinuité toutes les quelques minutes. Idéalement, pour avoir une chance d'éviter toute discontinuité en 24 Hz dans un film de 2 heures, il faut pouvoir ajuster la fréquence de rafraîchissement par paliers extrêmement fins, de l'ordre de 0.0005% (5 ppm).

La fréquence de rafraîchissement est dérivée directement de la "pixel clock", qui est le signal d'horloge principal de la sortie vidéo. C'est cette pixel clock qui nous limite, car elle n'est ajustable que par paliers de 0.01 MHz. Mais Madshi (oui, encore lui), a trouvé un moyen de « tricher » : en plus de la pixel clock, il est également possible de « jouer » avec d'autres paramètres de la sortie vidéo qui ont également une influence sur la fréquence de rafraîchissement finale. En particulier le "back porch" horizontal et vertical, qui sont des paramètres extrêmement techniques (et pas particulièrement utiles en temps normal) et qui ont trait aux intervalles de temps laissés « blancs » entre chaque ligne et chaque frame qui est envoyée à l'écran. En exploitant ces paramètres exotiques, on obtient plus de contrôle sur la fréquence de rafraîchissement finale, à tel point qu'il devient possible de l'ajuster de manière suffisamment fine pour résoudre notre problème. Cette solution est désignée sous le terme "Custom Modes".

En théorie, personne n'est censé modifier ces paramètres avancés - ils sont codifiés dans le standard VESA "Coordinated Video Timings". Pour cette raison, un écran n'appréciera pas forcément de tels ajustements, et il n'y a aucune garantie qu'il acceptera un signal ainsi modifié. Ces problèmes de compatibilité dépendent du matériel utilisé et sont plus ou moins imprévisibles ; il faut faire le test pour vérifier. C'est le principal inconvénient de cette technique.

Notons que, strictement parlant, cette solution est uniquement capable d'éliminer le problème des horloges ; elle n'élimine pas le telecine judder. Cela dit, il est évidemment possible de faire d'une pierre deux coups et d'éliminer les deux à la fois en ajustant une fréquence de rafraîchissement qui est déjà proche de 24 Hz (ou d'un multiple) au départ, à supposer que l'écran est compatible avec une telle fréquence.

Rappellons également que contrairement à d'autres solutions comme ReClock ou Smooth Motion, cette approche n'a pas une précision infinie : elle peut réduire fortement la probabilité qu'une discontinuité va apparaître pendant la lecture d'une vidéo, mais elle ne peut pas réduire cette probabilité à zéro.

En pratique[modifier]

Contrairement à d'autres solutions décrites dans ce document, il n'est pas possible de faire ces ajustements à la volée au début ou au cours de la lecture vidéo, car les drivers GPU ne sont pas conçus pour changer ces paramètres à la volée de manière transparente.

Il faut donc configurer ces "custom modes" à l'avance. Fort heureusement, madVR propose un « assistant » pour vous aider à les générer ; en particulier, il est capable de mesurer la déviation d'horloge pour vous et de vous aider à trouver le bon mode, tout en vous prévenant de potentiels problèmes de compatibilité. La procédure reste tout de même relativement laborieuse. Pour plus d'informations, référez-vous au tutoriel de Madshi.

Une fois un "custom mode" adéquat généré pour une fréquence donnée (par exemple, 23.976 Hz), il suffit de l'activer avant de lire une vidéo pour profiter d'une lecture sans discontinuités. Bien que l'assistant de création fasse partie de madVR, en théorie un mode généré de cette manière peut être utilisé dans n'importe quelle application, y compris n'importe quel lecteur vidéo. Par exemple, cette solution peut être utilisée pour corriger la sortie d'une application type Netflix. Cela contraste avec d'autres solutions qui nécessitent de la « coopération » de la part du lecteur vidéo pour fonctionner.

En plus de potentiels problèmes de compatibilité avec les écrans, et la configuration assez laborieuse, il peut également y avoir des problèmes de stabilité : comme ces "custom modes" sont statiques, ils ne s'adaptent pas automatiquement à des changements qui peuvent avoir un impact potentiel sur la vitesse des horloges audio et vidéo, tels qu'un changement de matériel (notamment un changement de sortie son) ou même des écarts de température (!). Cela dit, dans le cas spécifique où l'audio et la vidéo sont au final contrôlés par le même signal d'horloge (par exemple, les deux passent par la même sortie HDMI), la relation entre les deux horloges devrait rester fixe et le "custom mode" ainsi généré devrait en principe être parfaitement stable.

Enfin, les drivers GPU ont tendance à poser des problèmes supplémentaires en raison du cas d'utilisation bizarre et exotique, qui a la fâcheuse tendance à soulever des bugs latents. Par exemple il n'est pas rare de voir des gens se plaindre que les drivers refusent d'appliquer un custom mode sans raison apparente, ou que les modes sont effacés de manière intempestive.

Sous Linux le support des "custom modes" est meilleur : X.Org les supporte nativement, et la pixel clock est réglable par paliers de 0.001 MHz (contre 0.01 MHz sous Windows). Cela implique cependant de modifier manuellement la configuration du serveur X.

Recommandations[modifier]

  • Si votre écran ne supporte pas du « vrai » 24p, alors le frame blending est votre seule et unique option.
  • Si vous voulez une solution qui fonctionne avec n'importe quel lecteur vidéo (Netflix, etc.), alors un custom mode en 24 Hz (ou un multiple) est votre seule et unique option.

Si vous n'êtes pas contraint par les cas ci-dessus, alors :

  • Si votre ordinateur est à usage mixte, et en particulier si votre écran est un moniteur de PC ou un laptop, ou que vous ne voulez pas vous prendre la tête, restez en 60 Hz (ou plus) et utilisez la solution du frame blending. Cette solution est très simple, ne nécessite pas de changer de mode et donnera des résultats très corrects dans tous les cas.
  • S'il s'agit d'un HTPC dédié connecté à une TV ou un vidéoprojecteur, et que vous voulez les meilleurs résultats possibles, alors un custom mode (en 24 Hz) est probablement la meilleure option, car elle produit un signal 24 Hz parfaitement propre pour votre TV/projecteur. La méthode de l'ajustement audio est également une bonne approche.

Récapitulatif des solutions[modifier]

Problèmes résolus[modifier]

24 Hz Multiple de 24 Hz Inverse telecine Ajustement audio Frame blending Custom mode
Telecine judder X X X X
Discontinuités X X X

Combinaisons possibles[modifier]

24 Hz Multiple de 24 Hz Inverse telecine Ajustement audio Frame blending Custom mode
24 Hz X X
Multiple de 24 Hz X X
Inverse telecine X X
Ajustement audio X X X
Frame blending
Custom mode X X X

Résumé global[modifier]

Dans le cas des solutions "Ajustement audio", et "Custom mode", il est supposé que la fréquence de rafraîchissement nominale est approximativement correcte (voir ligne « fréquence de rafraîchissement utilisée »).

Sans Inverse Telecine Avec Inverse Telecine
60Hz (cas par défaut) 24 Hz Multiple de 24 Hz Ajustement audio Frame blending Custom mode 60Hz (cas par défaut) Ajustement audio Custom mode
Résultat final
Qualité du rendu vidéo Très mauvais Mauvais Mauvais Excellent Bon/excellent Excellent Mauvais Excellent Excellent
Qualité du rendu audio Parfait Parfait Parfait Excellent Parfait Parfait Parfait Excellent Parfait
Cadence
Telecine judder Mauvais Parfait Parfait Parfait Excellent Parfait Parfait Parfait Parfait
Discontinuités Très fréquentes,
visibles
Fréquentes,
très visibles
Fréquentes,
visibles
Très rares,
très visibles
Très fréquentes,
invisibles
Rares,
très visibles
Très fréquentes,
très visibles
Très rares,
très visibles
Rares,
très visibles
Netteté des mouvements Parfait Parfait Parfait Parfait Bon/excellent Parfait Parfait Parfait Parfait
Compatibilité
Nécessite un écran capable de détecter 24p@60Hz Non Non Non Non Non Non Oui Oui Oui
Empêche l'utilisation de modes
"low input lag", "gaming", "PC"
Non Non Non Non Non Non Oui Oui Oui
Nécessite un écran supportant 24 Hz
(ou un multiple)
Non Oui Oui Oui Non Oui Non Non Non
Prend des libertés avec les normes CVT Non Non Non Non Non Oui Non Non Oui
Peut interférer avec du traitement temporel
effectué par l'écran
Oui Non Non Non Oui Non Non Non Non
Support par les drivers GPU Parfait Excellent Moyen Excellent Parfait Mauvais Parfait Parfait Mauvais
Nécessite un logiciel de lecture spécifique
(madVR, MPDN, mpv, etc.)
Non Non Non Oui Oui Non Non Oui Non
Nécessite de décoder l'audio côté PC
(pas de bitstreaming)
Non Non Non Oui Non Non Non Oui Non
Divers
Fréquence de rafraîchissement utilisée ~60 Hz 23.976 Hz N*23.976 Hz ~24 Hz ~60+ Hz ~24 Hz ~60 Hz ~60 Hz ~60 Hz
Simplicité de mise en place Rien à faire Très facile Facile Facile Facile Laborieux Rien à faire Facile Laborieux
Stabilité de la configuration Parfait Parfait Parfait Parfait Parfait Moyen Parfait Parfait Moyen