Cadence vidéo sur PC
Si vous utilisez un PC pour lire des vidéos et que vous voulez lire des films/séries dans de bonnes conditions, vous devriez lire cette page.
TL;DR
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 :
- Utilisez un lecteur vidéo DirectShow, tel que MPC-HC par exemple.
- Installez madVR et configurez votre lecteur pour l'utiliser.
- Dans les options de madVR, activez la fonctionnalité appelée "Smooth Motion".
- Vous êtes paré !
Les problèmes à résoudre
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")
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".
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.
Horloge désynchronisée (discontinuités)
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
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 (CTA) 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. 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
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çu 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 ?
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.
Le piège du 24 Hz vs. 23.976 Hz
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.
Notez bien 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 pour les éliminer totalement.
Questions ouvertes
- 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 ?
Récapitulatif des solutions
Solutions ne reposant pas sur le support 24p@60Hz de l'écran
Ces solutions sont utilisables sur tout type d'écran, sauf indication contraire dans la section « compatibilité ».
24p@60Hz | 24p@24Hz | Audio resampling (ReClock) |
Frame blending (Smooth Motion) |
Custom mode | ||
---|---|---|---|---|---|---|
Résultat final | ||||||
Qualité du rendu vidéo | Très mauvais | Très mauvais | Excellent | Bon/excellent | Excellent | |
Qualité du rendu audio | Parfait | Parfait | Excellent | Parfait | Parfait | |
Cadence | ||||||
Variance continue | Très mauvais | Parfait | Parfait | Excellent | Parfait | |
Discontinuités | Très fréquentes, visibles |
Très fréquentes, très visibles |
Très rares, très visibles |
Inexistantes | Rares, très visibles | |
Netteté des mouvements | Parfait | Parfait | Parfait | Bon/excellent | Parfait | |
Compatibilité | ||||||
Nécessite un écran supportant 24 Hz (ou un multiple) |
Non | Oui | Oui | Non | Oui | |
Prend des libertés avec les normes DVI/HDMI/DP | Non | Non | Non | Non | Oui | |
Peut interférer avec du post-traitement temporel effectué par l'écran |
Oui | Non | Non | Oui | Non | |
Peut buter contre les limites de HDMI <2.2 (10-bit 2160p@60Hz) |
Oui | Non | Non | Oui | Non | |
Support par les drivers GPU | Parfait | Excellent | Excellent | Parfait | Mauvais | |
Nécessite un lecteur vidéo DirectShow (MPC-HC, etc.) |
Non | Non | Oui | Oui | Non | |
Nécessite de décoder l'audio côté PC (pas de bitstreaming) |
Non | Non | Oui | Non | Non | |
Divers | ||||||
Fréquence de rafraîchissement utilisée | 60 Hz | 24 Hz | 24 Hz | 60 Hz | 24 Hz | |
Simplicité de mise en place | Rien à faire | Très facile | Facile | Facile | Laborieux | |
Stabilité de la configuration | Parfait | Parfait | Parfait | Parfait | Moyen |
Solutions reposant sur le support 24p@60Hz de l'écran
Ces solutions ne sont utilisables que sur un écran supportant ce que Rtings appelle le "Judder-Free 24p via 60p". Elles nécessitent une TV ou projecteur incluant cette fonctionnalité. (Dans le cas d'un moniteur PC, c'est très improbable.) Par ailleurs, toutes les solutions décrites dans cette section souffrent d'un certain nombre de contraintes supplémentaires :
- Ces solutions ne fonctionneront probablement pas si l'écran est en mode "low input lag", "gaming" ou "PC".
- La fiabilité de ces solutions dépend beaucoup de la qualité du traitement interne effectué par l'écran. Le tableau ci-dessous suppose que le comportement de l'écran est totalement fiable.
- Ces solutions peuvent avoir des implications concernant la qualité d'image, en fonction des traitements effectués par l'écran.
- Il est impossible d'utiliser madVR avec ces solutions, car il ne permet pas d'obtenir une cadence stable en 24p@60Hz pour le moment.
Si ces contraintes vous sont inacceptables, vous pouvez vous rabattre sur les solutions de la section précédente.
24p@60Hz | Audio resampling (ReClock) |
Custom mode | ||||
---|---|---|---|---|---|---|
Résultat final | ||||||
Qualité du rendu vidéo | Moyen | Excellent | Excellent | |||
Qualité du rendu audio | Parfait | Excellent | Parfait | |||
Cadence | ||||||
Variance continue | Parfait | Parfait | Parfait | |||
Discontinuités | Très fréquentes, visibles |
Très rares, visibles |
Rares, visibles | |||
Netteté des mouvements | Parfait | Parfait | Parfait | |||
Compatibilité | ||||||
Nécessite un écran supportant 24 Hz (ou un multiple) |
Non | Non | Non | |||
Prend des libertés avec les normes DVI/HDMI/DP | Non | Non | Oui | |||
Peut interférer avec du post-traitement temporel effectué par l'écran |
Non | Non | Non | |||
Peut buter contre les limites de HDMI <2.2 (10-bit 2160p@60Hz) |
Oui | Oui | Oui | |||
Support par les drivers GPU | Parfait | Parfait | Mauvais | |||
Nécessite un lecteur vidéo DirectShow (MPC-HC, etc.) |
Non | Oui | Non | |||
Nécessite de décoder l'audio côté PC (pas de bitstreaming) |
Non | Oui | Non | |||
Divers | ||||||
Fréquence de rafraîchissement utilisée | 60 Hz | 60 Hz | 60 Hz | |||
Simplicité de mise en place | Rien à faire | Facile | Laborieux | |||
Stabilité de la configuration | Parfait | Parfait | Moyen |