7 votes

Réduire la fréquence d'images vidéo sans perdre d'images utiles

J'ai une vidéo d'une caméra de sécurité qui a été enregistrée à l'origine à une faible fréquence d'images, peut-être 15 fps, peut-être 10 fps, peut-être même moins. Elle a depuis été convertie par quelqu'un d'autre à 25 fps (sans changer la durée). Je suppose que des images supplémentaires, en double, ont été ajoutées, et que cela a peut-être aussi légèrement déformé le moment exact où les images originales sont affichées.

Je veux réencoder la vidéo avec ffmpeg à sa fréquence d'images d'origine, sans perdre aucun des éléments de l'image. utile images du mouvement réel. Si je n'utilise que le fps il ne sera pas sélectif quant aux images qu'il conserve, et je suppose qu'en raison d'erreurs d'arrondi, il pourrait finir par conserver certaines des images en double et perdre définitivement des images utiles, ce qui aggraverait la situation. Dans tous les cas, je ne sais pas quel chiffre donner au filtre car je ne sais pas exactement quelle était la fréquence d'images d'origine !

Comment puis-je procéder pour réparer cette vidéo avec ffmpeg ?

ffmpeg -i "orig.mp4" -an -vcodec h264 -vf "fps=???" "fixed.mp4"

8voto

Mike Points 292

J'ai réussi à réparer mon dossier. J'ai trouvé le mpdecimate qui élimine les images dupliquées ou presque dupliquées d'un flux vidéo. J'ai d'abord essayé :

ffmpeg -loglevel debug -i orig.mp4 -an -vf "mpdecimate" test.mp4

J'ai ajouté -loglevel debug pour obtenir plus d'informations pendant le transcodage. L'information montrait ce que mpdecimate faisait avec les cadres, c'est-à-dire beaucoup et beaucoup de ce modèle :

lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:44032 pts_time:3.44 drop_count:1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:44544 pts_time:3.48 drop_count:2
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:45056 pts_time:3.52 drop_count:3
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:45568 pts_time:3.56 drop_count:4
781>=hi keep pts:46080 pts_time:3.6 drop_count:-1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:46592 pts_time:3.64 drop_count:1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:47104 pts_time:3.68 drop_count:2
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:47616 pts_time:3.72 drop_count:3
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:48128 pts_time:3.76 drop_count:4
821>=hi keep pts:48640 pts_time:3.8 drop_count:-1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:49152 pts_time:3.84 drop_count:1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:49664 pts_time:3.88 drop_count:2
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:50176 pts_time:3.92 drop_count:3
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:50688 pts_time:3.96 drop_count:4
793>=hi keep pts:51200 pts_time:4 drop_count:-1

C'est-à-dire qu'il supprimait systématiquement 4 images d'affilée comme des doublons et gardait toutes les 5èmes. Cela montre que le taux d'images original était 1/5ème de ce qu'il est maintenant. J'ai eu de la chance ! Puisque la fréquence actuelle de 25 images par seconde de la vidéo est un multiple de la fréquence d'images d'origine, il ne devrait pas y avoir de problème de désalignement temporel des images conservées et abandonnées. Par conséquent, j'ai retranscodé la vidéo d'origine avec rien de plus complexe que -vf "fps=5" et la sortie semble être bonne. Juste pour être sûr, j'ai fait passer la sortie par l'option mpdecimate et il a détecté toutes les images restantes comme étant "à conserver". Donc le fichier original n'était pas aussi endommagé que je le pensais.

3voto

Gyan Points 29437

Si les images supplémentaires sont des doublons et non des interpolations, la méthode suivante peut fonctionner :

ffmpeg -i orig.mp4 -an -vf "select='gt(scene\,0.001)',setpts=N/(10*TB)" -r 10 fixed.mp4

L'idée est de sélectionner toutes les images qui ne sont pas des doublons de l'image précédente. Ensuite, les PTS sont régénérés selon le taux de sortie spécifié. Il se peut que vous deviez modifier la valeur de la scène à la hausse ou à la baisse pour obtenir le bon filtre de détection. Si la vidéo semble plus rapide ou plus lente que le temps réel, diminuez ou augmentez respectivement le taux (et la valeur du dénominateur de setpts).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X