Sous-titres se désynchronisent progressivement avec VLC

Bonjour a tous,

Lorsque je lis une vidéo avec VLC, les sous-titres se décalent progressivement (et de plus en plus) par rapport a la vidéo.
J’ai essaye sur un autre ordinateur, c’est pareil.

J’ai vu sur internet que c’est un problème de FPS. J’ai un peu du mal a comprendre. Dans le fichier SRT (sous-titre), ce sont des temps. Est-ce que cela veut dire que VLC lit la vidéo trop rapidement par rapport a la vitesse normale (ma vidéo est en 25FPS)?
Y a-t-il un moyen de régler le problème dans VLC sans devoir utiliser des logiciels pour modifier les sous-titres ?

Merci d’avance de votre aide :slight_smile:

Bonjour,

Tu as vu sur le Net que ton pb vient des fps, mais ce n’est pas très clair pour toi ?

Je pense que ce que tu as vu voulait dire que ta vidéo (et le son) est encodée avec une certaine cadence, mais que tes sous-titres sont encodés à une autre cadence.
C’est le cas par exemple quand la vidéo (et le son) vient d’un BD (donc en 24 i/s) et que les sous-titres viennent d’un DVD (donc en 25 i/s).
Dans ce cas, forcément, les sous-titres sont bien synchronisés au début mais se décalent de plus en plus au fur et à mesure qu’on avance dans le film.

Une solution est de ne surtout pas toucher le flux vidéo ni les flux audios, mais de modifier le flux des sous-titres.
Si c’est un fichier MKV, tu peux utiliser mkvtoolnix pour ça.

Merci pour ta réponse Jacky67

J’ai oublie de préciser que les sous-titres sont contenus dans un fichier séparé (un fichier en .srt). Dans ce type de fichier, très simple, il y a simplement une balise de temps et le contenu du sous-titre. Exemple:

89
00:10:22,227 --> 00:10:24,127
Texte sous titre

90
00:10:24,229 --> 00:10:26,424
<i>Texte sous-titre en italique</i>

Donc je ne comprends pas pourquoi les FPS de le vidéo ont une influence. Que la vidéo soit en 24, 25, 30 ou 60 FPS, 10 secondes sont toujours 10 secondes.

Ben oui, 10" c’est toujours 10", et c’est bien ça le problème. :wink:

Si la vidéo est en 24 i/s et que les sous-titres sont en 25 i/s, tu as un décalage d’une image à chaque seconde. Donc au bout de 24 ou 25" tu as un décalage d’une seconde entre l’image et les sous-titres.

C’est pourquoi il faut modifier le timing des sous-titres pour le faire correspondre à celui des images.

Tu avais bien dit dès ton premier message que tes sous-titres étaient dans un fichier .srt.
Soit tu les laisses en fichier séparé et donc tu modifies le timing avec un soft fait pour cela, soit tu les intègres dans le fichier contenant la vidéo et l’audio et tu en profites pour créer un fichier .mkv contenant tout et synchronisé.

y a pas de compte d’image par seconde pour les sous-titres.
Le problème de timing se poserait avec une vidéo enregistrée à 24ips mais lue à 25 par exemple. Dans ce cas on perdrais également la synchro a/v (l’audio est aussi calé sur le temps, pas les images).

le problème de timing du sous-titre est très souvent dû au fait que le fichier srt est adaptée à une autre version de ta vidéo.

VLC a une fonction d’accélération de la lecture, il sait également accélérer le son sans changer les tonalités, donc je suppose qu’il sais également adapter le timing des sous-titres en fonction, mais peut être qu’il faudrait y jeter un oeil par acquis de conscience.

Merci pour vos réponses.

Lithium tu dis “vidéo enregistrée à 24ips mais lue à 25”, ce qui veut donc dire que VLC ne lit pas la vidéo à la bonne vitesse ? C’est quand même fou que VLC ne lise pas la vidéo à la bonne vitesse.

Il y a en effet une option pour changer la vitesse de lecture de la vidéo, mais l’incrémentation est de +/- 0.1 (x0.8 x0.9 x1 x1.1 x1.2 …), ce qui est trop. Et je n’ai pas trouvé comment avoir des incréments plus petit. Et je n’ai pas non plus trouver comment adapter le timing des sous-titres (la seule possibilité est d’avancer/reculer d’une période fixe)

Le problème de modifier le timing des sous-titres dans VLC lors de la lecture, c’est qu’il faudra le refaire à chaque fois.

Pour moi, LA solution est MKVtoolnix. Mais j’ai déjà expliqué pourquoi et ce qu’il faut faire.
Maintenant c’est à toi de voir.

Il est probable que la bonne valeur du coefficient à appliquer au timing des sous-titres soit de 0,9504… ou de 0,96.

ou sinon de trouver les bons sous titres correspondant à ce fichier là :wink:

C’était un exemple et dans ce cas la faute ne reviens pas au lecteur de média mais au média lui-même (méta-données fausses ou absentes).

:open_mouth: Je me rends compte que je n’avais pas lu ton premier message jusque là et j’ai donc répondu à côté… :frowning:

Il faut regarder dans les outils de VLC.
Je ne me rappelle plus très bien, mais au niveau des sous-titres tu dois pouvoir modifier le retard (décalage constant) positif ou négatif, et le coefficient temporel (décalage linéaire).

c’est pas dans Outils --> Synchronisation de piste (dans une video VLC) ?

Voilà, c’est ce dont je parlais.
C’est bien dans les outils. :wink:

J’ai fait un test. Je change la valeur de “Vitesse des sous-titre” mais ça ne fait rien :frowning:

J’ai également fait une comparaison. Le même film, un avec lequel les sous-titres sont synchronisés, et un autre les sous-titres se décalent progressivement. Si je lance les 2 films en même temps, je vois un décalage des images apparaître petit à petit. Le problème ne vient donc pas des sous titres mais de la vitesse de lecture.
Mon film avec les bon sous-titre est en 23.98 fps, le mauvais en 25 fps.
Est-ce que c’est un bug de VLC ? Quelque soit le nombre d’image par seconde, le film devrait aller à la même vitesse, non ? Qu’est-ce qui peut cause cette lecture à une vitesse différente ?

C’est exactement ce que je t’ai expliqué dans ma première réponse.

C’est donc que tes sous-titres sont en 23,976 (environ) images par seconde, donc qu’ils sont issus d’un BD.
En revanche ta vidéo (et les bandes son) est en 25 i/s, donc issue d’un DVD.

Autrement dit, c’est l’inverse de ce que j’avais supposé, car généralement on prend la meilleure image possible (donc un BD plutôt qu’un DVD) et on prend les sous-titres qu’on trouve (donc issus d’un DVD par exemple).

Et toi, pour parcourir une distance donnée, quel que soit le nombre de kilomètres par heure, tu mets le même temps ? :wink:

Un film a un certain nombre d’images, donc si tu le joues à 24 i/s (sa vitesse originelle en général), il aura une certaine durée.
Si tu le joues à 23,976 i/s (environ), il durera un tout petit peu plus longtemps.
Si tu le joues à 25 i/s, il durera moins longtemps.

Je croyais que le fps modifiait également le nombre d’image total.
C’est à dire que pour un même film (par exemple 10 secondes), ce film contenait 250 images en 25 fps, et 240 images en 24 fps. Donc au final les films vont à la même vitesse. Ai-je tord ?

Toi tu me dis que les 2 versions de films contiennent 250 images, et donc que le film durera 10 secondes en 25 fps et 10.42 secondes en 24 fps. C’est ça ?
C’est quand même étonnant comme fonctionnement. J’ai toujours cru que le nombre d’image contenues était adapté au fps pour que la durée du film soit toujours la même.

Et du coup pourquoi l’option “Vitesse des sous-titres” dans VLC n’a pas d’influence sur mes sous-titres ?

c’est même plus vicieux que ça, les films de cinéma sont en 24 i/s, ceux de la télé en 25 i/s

Le “fps” c’est le nombre d’images par seconde (en admettant que le “f” soit ici pour "frame). C’est juste une valeur chiffrée.
Si tu changes cette valeur, la vidéo sera lue à une vitesse différente, mais ça ne modifiera en rien le nombre d’images encodées dans ton fichier.

Ne pas confondre avec le transcodage d’un film cinéma (donc 24 i/s) en vidéo DVD (donc 25 i/s), où la on peut utiliser un “3:2 pulldown”, me semble-t-il.

Oui, c’est ce que je dis. Et c’est ce que je t’ai expliqué plus haut : à chaque seconde tu as un décalage d’une image.

Cela est valable pour les deux fichiers que tu as et ça explique le décalage.
Toutefois, ce n’est pas toujours vrai. Parfois lors du transcodage pour faire un DVD il peut y avoir un 3:2 pulldown, me semble-t-il, afin d’essayer de garder la même durée. Mais ce n’est pas du tout le cas avec tes deux fichiers.

Je vais essayer de résumer, mais je me goure tout le temps entre avance et retard… comme quand on change d’heure je ne sais jamais si on recule ou si on avance et si du coup on va dormir une heure de plus ou de moins…

Ton fichier contenant le flux vidéo et les flux audio est issu d’un fichier vidéo en 25 i/s.
Ton fichier contenant les sous-titres est issu d’un fichier vidéo en 24 i/s.
Quand tu vas lire tes deux fichiers en même temps, le fichier vidéo sera lu à 25 i/s. Et le fichier de sous-titres sera lu selon le timing inscrit dans ledit fichier, ce qui correspond à un timing de 24 i/s. D’où le décalage.

Ton fichier en 25 i/s (le fichier vidéo) sera plus court que le fichier en 24 i/s (le fichier de sous-titres), donc pour les synchroniser le plus simple est de diminuer la durée du fichier de sous-titres.
Pour cela tu modifies le timing de ton fichier de sous-titres en appliquant un coefficient aux valeurs de temps inscrites dans le fichier de sous-titres.

Tes sous-titres sont en 24 i/s et tu veux les passer en 25 i/s, c’est là que je me trompe tout le temps… mais je dirais qu’il faut multiplier chaque valeur de temps inscrite dans ton fichier de sous-titres par 24/25 = 0,96 afin d’avoir un timing plus court.
Le coefficient à utiliser dans VLC ou dans le logiciel de modification des sous-titres serait donc 0,96.