Enregistrement ne démarre pas avec une I-frame

Des bugs, où ça ?
r0lZ
Messages : 110
Enregistré le : 03 févr. 2011, 14:15
Carte Tuner : Asus My Cinema PS3-100/PTS/FM/AV/RC (PCI) et Genius TVGo DVB-T03 (USB)
Êtes-vous un robot ? : Je ne suis pas un robot

Enregistrement ne démarre pas avec une I-frame

Message par r0lZ »

Bon, je sais, je fouille partout, mais j'ai encore trouvé ce que je considère comme un bug, ou plutôt un problème assez important.

Le problème est que l'enregistrement ne commence pas systématiquement par une I-frame. Ça signifie que le premier GOP est souvent incomplet, ce qui a deux inconvénients majeurs.

Les viewers montrent des images incomplètes et très laides au démarrage du film, et comme les GOPS en TNT font en général environ 1 seconde, on a souvent vraiment le temps de voir ces images dégradées. C'est dommage, mais jusque là, ce n'est pas vraiment grave.

L'autre problème, plus grave, c'est avec la plupart des programmes d'édition de la vidéo. Certains, comme VideoReDo, s'en sortent très bien et suppriment le premier GOP incomplet, mais d'autres, comme Womble MPEG Video Wizard DVD, le conserve, et ça le fait réagir très bizarrement! (Il montre n'importe quoi pendant la durée de ce GOP, et a même du mal à retomber sur ses pattes pendant le GOP suivant!)

De plus, si on se contente de démultiplexer les flux élémentaires avec un programme qui n'est pas spécifiquement destiné à corriger ce genre de problème, on se ramasse un fichier MPV qui n'est pas accepté par la plupart des muxeurs (dont muxman, qui ne laisse passer aucune erreur).

Je trouve qu'il est très dommage qu'un fichier, qui par ailleurs peut ne contenir aucune partie endommagée, doive être traité avec un programme externe seulement pour corriger ce problème.

Est-il possible de faire en sorte de commencer l'enregistrement à partir du premier GOP valide (donc avec une I-frame)?

Je me doute que ce n'est probablement pas simple quand on enregistre tout le multiplex en TS, car les flux vidéos ont probablement des GOPs commençant à des moments différents, mais je suppose que ça doit être possible lorsqu'on enregistre une seule chaîne à la fois, en TS ou en PS. Et quand on enregistre tout le multiplex, c'est forcément pour le retraiter par après, donc ce problème a moins d'importance.

Pour info, j'ai découvert ce problème, car je voulais écrire un petit programme pour convertir les fichiers projet de VideoReDo (.Vprj) en un format compréhensible par Womble, de manière à pouvoir utiliser l'excellent GUI de VideoReDo pour marquer les parties à couper, et utiliser ensuite Womble pour faire le boulot, car il est possible d'ajouter des transitions, des fondus, etc..., impossibles à faire avec VideoReDo. Mais l'abominable GUI de Womble le rend à peu près inutilisable pour marquer les parties à couper. J'ai galéré longtemps, car je ne comprenais pas pourquoi il y avait systématiquement un décalage dans les Nos de frames. J'ai fini par comprendre qu'il correspond exactement à la longueur du premier GOP incomplet. Malheureusement, je ne sais pas comment compter le nombre de frames du premier GOP, et donc mon programme est à peu près inutilisable. Si quelqu'un peu m'aider sur ce point, ça me tirerait une grosse épine du pied. Mais la solution la plus clean serait d'éviter d'avoir ce GOP buggé dans le fichier original.

(Je n'ai pas encore vérifié si CheckMPEGwithPVAS souffre d'un problème similaire, mais je suppose que oui. Ça expliquerait aussi quelques imprécisions de ce programme.)

Qu'en pensez-vous?
r0lZ
Win7 x64 SP1, Asus My Cinema PS3-100 (PCI) et Genius TVGo DVB-T03 (USB), émetteur TNT de Wavre (Belgique)
Gingko
Administrateur du site et développeur
Messages : 2063
Enregistré le : 05 août 2007, 12:57
Carte Tuner : August DVB-T210 USB + divers autres
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Pantin (IDF, 93)

Re: Enregistrement ne démarre pas avec une I-frame

Message par Gingko »

r0lZ a écrit :Bon, je sais, je fouille partout, mais j'ai encore trouvé ce que je considère comme un bug, ou plutôt un problème assez important.

Le problème est que l'enregistrement ne commence pas systématiquement par une I-frame. Ça signifie que le premier GOP est souvent incomplet, ce qui a deux inconvénients majeurs.

Les viewers montrent des images incomplètes et très laides au démarrage du film, et comme les GOPS en TNT font en général environ 1 seconde, on a souvent vraiment le temps de voir ces images dégradées. C'est dommage, mais jusque là, ce n'est pas vraiment grave.

L'autre problème, plus grave, c'est avec la plupart des programmes d'édition de la vidéo. Certains, comme VideoReDo, s'en sortent très bien et suppriment le premier GOP incomplet, mais d'autres, comme Womble MPEG Video Wizard DVD, le conserve, et ça le fait réagir très bizarrement! (Il montre n'importe quoi pendant la durée de ce GOP, et a même du mal à retomber sur ses pattes pendant le GOP suivant!)

De plus, si on se contente de démultiplexer les flux élémentaires avec un programme qui n'est pas spécifiquement destiné à corriger ce genre de problème, on se ramasse un fichier MPV qui n'est pas accepté par la plupart des muxeurs (dont muxman, qui ne laisse passer aucune erreur).

Je trouve qu'il est très dommage qu'un fichier, qui par ailleurs peut ne contenir aucune partie endommagée, doive être traité avec un programme externe seulement pour corriger ce problème.

Est-il possible de faire en sorte de commencer l'enregistrement à partir du premier GOP valide (donc avec une I-frame)?

Je me doute que ce n'est probablement pas simple quand on enregistre tout le multiplex en TS, car les flux vidéos ont probablement des GOPs commençant à des moments différents, mais je suppose que ça doit être possible lorsqu'on enregistre une seule chaîne à la fois, en TS ou en PS. Et quand on enregistre tout le multiplex, c'est forcément pour le retraiter par après, donc ce problème a moins d'importance.

Pour info, j'ai découvert ce problème, car je voulais écrire un petit programme pour convertir les fichiers projet de VideoReDo (.Vprj) en un format compréhensible par Womble, de manière à pouvoir utiliser l'excellent GUI de VideoReDo pour marquer les parties à couper, et utiliser ensuite Womble pour faire le boulot, car il est possible d'ajouter des transitions, des fondus, etc..., impossibles à faire avec VideoReDo. Mais l'abominable GUI de Womble le rend à peu près inutilisable pour marquer les parties à couper. J'ai galéré longtemps, car je ne comprenais pas pourquoi il y avait systématiquement un décalage dans les Nos de frames. J'ai fini par comprendre qu'il correspond exactement à la longueur du premier GOP incomplet. Malheureusement, je ne sais pas comment compter le nombre de frames du premier GOP, et donc mon programme est à peu près inutilisable. Si quelqu'un peu m'aider sur ce point, ça me tirerait une grosse épine du pied. Mais la solution la plus clean serait d'éviter d'avoir ce GOP buggé dans le fichier original.

(Je n'ai pas encore vérifié si CheckMPEGwithPVAS souffre d'un problème similaire, mais je suppose que oui. Ça expliquerait aussi quelques imprécisions de ce programme.)
Bonjour,

Il est possible qu'une version ultérieure démarre effectivement les enregistrements sur une trame I (en tout cas en enregistrement PS, parce qu'en TS, il n'est pas vraiment envisagé ni probablement souhaitable d'analyser le contenu du flux). Disons que c'est un souci que j'ai commencé à étudier dans un développement que j'ai plus ou moins en cours, mais qui progresse irrégulièrement, étant constamment interrompu.

Ceci étant dit, ce n'est pas vraiment simple à faire non plus, parce qu'en fait, pour commencer proprement, il faut retenir effectivement une trame I au début, mais ensuite il faut éliminer les deux ou trois trames B qui suivent (jusqu'à la trame P suivante), car celles-ci sont constituées de la description des différences entre cette trame I et la trame P qui précède (l'ordre de réception des trames n'étant pas tout à fait celui dans lequel elles sont affichées) et dont on ne disposera pas ensuite.

Une terminaison propre pose, elle aussi, quelques soucis du même ordre.

Ceci étant dit, étant aussi utilisateur de VideoRedo, cela ne me pose pas de problèmes majeurs. D'autre part, si votre logiciel Womble MPEG Video Wizard DVD (que je n'ai pas essayé) conserve les séquences incomplètes, il me semble que cela doit vouloir dire qu'il n'est pas capable d'éditer les vidéos non plus (puisque, par définition, éditer une vidéo implique d'être capable d'en couper le début).

Gingko
Gingko
․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․
Tuners utilisés, sur 3 ordis : • USB : August DVB-T210, AverMedia HDTV DVB-T Volar (2×) • PCI : Hauppauge Nova-DT Dual DVB-T • Express Card : AverMedia Digi Express 54
r0lZ
Messages : 110
Enregistré le : 03 févr. 2011, 14:15
Carte Tuner : Asus My Cinema PS3-100/PTS/FM/AV/RC (PCI) et Genius TVGo DVB-T03 (USB)
Êtes-vous un robot ? : Je ne suis pas un robot

Re: Enregistrement ne démarre pas avec une I-frame

Message par r0lZ »

Hum, oui, je ne pensais plus à ces références en arrière dans le GOP précédent (et en fait j'imaginais que c'était proscrit dans les TS, car il faut bien prendre le train en marche). Mais je comprend maintenant pourquoi Womble déconne aussi avec le GOP qui suit. Je sais aussi que fermer un GOP ouvert n'est pas aisé, mais que c'est possible. (Jsoto, le programmeur de VobBlanker le fait très bien, et je peux lui demander son code, si ça peut servir.)

Womble est un soft d'édition de MPEG sans réencodage, et précis à l'image près, exactement comme VideoReDo. Il a ses avantages et ses inconvénients. Outre sa lamentable interface, il a aussi quelques gros bugs, et n'évolue pas beaucoup. Par contre, il est beaucoup plus puissant que VideoRedo, car il permet d'insérer de nombreuses transitions aux endroits des cuts, et de commencer ou finir le film par un fondu (audio et/ou video, de durée configurable), ce qui est bien pratique pour terminer proprement les génériques saccagés par beaucoup de TVs (mais bien sur, il doit réencoder ces parties là.) Il permet aussi de faire des menus de DVD (y comnpris des sous-menus de chapitres), nettement plus sympas que le bête menu bleu de VideoReDo. Pour ce que j'ai pu juger, il a aussi un meilleur encodeur MPEG. Par contre, je déteste l'utiliser, et j'ai donc voulu écrire ce programme pour utiliser le GUI de VideoReDo, puis faire le minimum avec Womble, et l'utiliser pour générer le DVD. Malheureusement, il y a ce foutu décalage entre les deux programmes! Je ne sais pas pourquoi Womble n'enlève pas automatiquement le 1er GOP lors de la lecture, car il est certainement capable de le faire, puisqu'il a une fonction comparable au Quick Stream Fix de VideoReDo. Il est bien entendu possible de virer les premières images manuellement, mais ça ne permet pas de "synchroniser" les deux programmes.

A ce propos, y-aurait-il un moyen relativement simple de compter le nombre de frames du GOP incomplet dans le fichier? Mon domaine étant les fichiers IFO des DVDs, je n'ai pas beaucoup de connaissances sur le format MPEG, à part sur les Nav Packs, spécifiques aux VOBs. :-(
r0lZ
Win7 x64 SP1, Asus My Cinema PS3-100 (PCI) et Genius TVGo DVB-T03 (USB), émetteur TNT de Wavre (Belgique)
Gingko
Administrateur du site et développeur
Messages : 2063
Enregistré le : 05 août 2007, 12:57
Carte Tuner : August DVB-T210 USB + divers autres
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Pantin (IDF, 93)

Re: Enregistrement ne démarre pas avec une I-frame

Message par Gingko »

r0lZ a écrit :Womble est un soft d'édition de MPEG sans réencodage, et précis à l'image près, exactement comme VideoReDo. Il a ses avantages et ses inconvénients. Outre sa lamentable interface, il a aussi quelques gros bugs, et n'évolue pas beaucoup. Par contre, il est beaucoup plus puissant que VideoRedo, car il permet d'insérer de nombreuses transitions aux endroits des cuts, et de commencer ou finir le film par un fondu (audio et/ou video, de durée configurable), ce qui est bien pratique pour terminer proprement les génériques saccagés par beaucoup de TVs (mais bien sur, il doit réencoder ces parties là.) Il permet aussi de faire des menus de DVD (y comnpris des sous-menus de chapitres), nettement plus sympas que le bête menu bleu de VideoReDo. Pour ce que j'ai pu juger, il a aussi un meilleur encodeur MPEG. Par contre, je déteste l'utiliser, et j'ai donc voulu écrire ce programme pour utiliser le GUI de VideoReDo, puis faire le minimum avec Womble, et l'utiliser pour générer le DVD. Malheureusement, il y a ce foutu décalage entre les deux programmes! Je ne sais pas pourquoi Womble n'enlève pas automatiquement le 1er GOP lors de la lecture, car il est certainement capable de le faire, puisqu'il a une fonction comparable au Quick Stream Fix de VideoReDo. Il est bien entendu possible de virer les premières images manuellement, mais ça ne permet pas de "synchroniser" les deux programmes.
Alors c'est chez eux qu'il faut poster un rapport de bug.
Je viens de regarder, au prix où il vendent leur produit, il me semble qu'on devrait pouvoir réclamer un support technique de ce genre.
r0lZ a écrit :A ce propos, y-aurait-il un moyen relativement simple de compter le nombre de frames du GOP incomplet dans le fichier? Mon domaine étant les fichiers IFO des DVDs, je n'ai pas beaucoup de connaissances sur le format MPEG, à part sur les Nav Packs, spécifiques aux VOBs. :-(
Tout dépend ce que vous appelez « simple ».
Techniquement parlant, il devrait suffire, armé de votre documentation ISO-IEC-13818-2 et de votre logiciel de programmation, de compter les « picture_start_code » qui précèdent le premier « sequence_header_code » présent dans l'enregistrement. :)
Maintenant, s'il s'agit de trouver une application qui fasse déjà ça, je ne sais pas.

Gingko
Gingko
․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․
Tuners utilisés, sur 3 ordis : • USB : August DVB-T210, AverMedia HDTV DVB-T Volar (2×) • PCI : Hauppauge Nova-DT Dual DVB-T • Express Card : AverMedia Digi Express 54
r0lZ
Messages : 110
Enregistré le : 03 févr. 2011, 14:15
Carte Tuner : Asus My Cinema PS3-100/PTS/FM/AV/RC (PCI) et Genius TVGo DVB-T03 (USB)
Êtes-vous un robot ? : Je ne suis pas un robot

Re: Enregistrement ne démarre pas avec une I-frame

Message par r0lZ »

Oui, j'ai oublié de préciser que Womble est cher!
Et je les connais assez pour savoir qu'ils ne feront rien, probablement en arguant que leur programme a la fonction de fix stream qui permet d'éviter ces problèmes. Je me vois mal leur demander de m'aider à me passer de leur GUI! ;-)

Merci pour l'info. Je pense que je trouverai tout ce qu'il me faut sur le site de mpucoder. Je me rappelle avoir lu ces trucs de picure_start_code et sequence_header_code, mais comme je n'en ai jamais eu besoin, j'ai vite fait d'oublier! Je vais voir si je peux me débrouiller avec ça.

Thanks again!
r0lZ
Win7 x64 SP1, Asus My Cinema PS3-100 (PCI) et Genius TVGo DVB-T03 (USB), émetteur TNT de Wavre (Belgique)