Page 1 of 1

Récupération de fichiers MP4

Posted: 20 Mar 2013, 10:34
by cedricc
Bonjour,

Tout d'abord merci Christophe pour Photorec, c'est vraiment efficace !

Voila mon problème. J'ai une camera Gopro qui enregistre 2 flux MP4 en simultanée : un en HD, un en LD. A la fin de l'enregistrement, elle enregistre les HEADERS des fichiers MP4. Donc pour chaque enregistrement, on se retrouve sur la carte SD avec 2 flux entremêlés et les 2 headers MP4 en fin (il peut y avoir un peu de flux du dernier HEADER entre les 2 HEADERS finaux). J'ai trouvé le moyen d'identifier et distinguer les secteurs pour chaque flux (je pense avoir identifié les headers de frame et quelque chose approchant la taille d'une frame, bien plus petite pour le flux LD que le HD... donc je peux détecter si le secteur appartient au fichier LD ou HD)

Je n'ai pas encore téléchargé les sources de PhotoRec, je me posais la question de savoir si la conception initiale de PhotoRec permettrait d'y ajouter des modules (voire d'être un peu modifier en gardant la compatibilité actuelle) pour prendre ces 2 contraintes en compte :
A) 2 fichiers simultanés à récupérer
B) lorsqu'on rencontre un header, trouver le 2eme "à proximité", puis remonter à la fin du précédent fichier (pour faire une deuxième passe et démultipléxer les 2 flux)

Je pense que l'enregistrement des 2 flux est spécifique à la GOPRO, cependant le problème de flux video avec un header positionné après le début des frames doit être courant...

Merci pour toute indication sur cette possibilité, si c'est le cas, je vais me plonger dans les sources (sinon, je vais devoir programmer tout depuis 0, c'est moins drôle)

Re: Récupération de fichiers MP4

Posted: 23 Mar 2013, 19:49
by cgrenier
Oui, il est très fréquent d'avoir les headers après le contenu même de la vidéo. Actuellement, il faut concaténer manuellement les fichiers.

Pour gérer les deux enregistrements en parallèle, cela ne me parait pas évident, mais une possibilité serait peut-etre de
- utiliser une valeur particulière "SKIP" de retour de la fonction data_check_mov() dans src/file_mov.c pour ignorer les blocs correspondant à l'autre fichier
- modifier dans src/phrecn.c le bloc commençant à la ligne 383 pour gérer cette valeur (penser à utiliser fseek pour reculer dans le fichier d'un bloc)