Question Extrait FFMPEG intra-images I, P, B


Existe-t-il un moyen d'extraire les intra-images et de les conserver telles quelles à partir d'un programme FFMPEG ou similaire? Je sais que vous pouvez extraire des images dans une séquence d'images JPEG en utilisant -f image2. Mais ce sont des images complètes de chacune des images. Je voudrais seulement exporter l'image du changement de mouvement, donc les images P et B ne montreraient que le changement de mouvement en excluant ou en masquant la zone non modifiée des images.

Est-ce possible?

La commande d'exportation de trame de base que j'utilise. Cela me donne des images complètes encadrées de chaque image, au FPS spécifié.

ffmpeg -i input.mp4 -r 12 -an -b 1024k -y -f image2 frame%4d.jpg

J'espère pouvoir exporter les images de sorte que j'ai un dossier d'images où la première image serait une image complète, la prochaine image ne serait que les données d'image où l'image doit être redessinée. Exposer la redondance temporelle entre les deux frames (n'est-ce pas ce que font les frames I, P, B?)


4
2018-06-07 00:27


origine




Réponses:


Pour extraire un type de cadre certin, utilisez le filtre de sélection:

select=eq(pict_type\,<x>)

<x> est l'un des suivants: pict_type (video only) the type of the filtered frame, can assume one of the following values: I, P, B, S, SI, SP, BI

Donc par exemple:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B)[out]' b.frames.mp4

Pour en savoir plus sur le résultat, ajoutez le showinfo filtre:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B),showinfo[out]' b.frames.mp4


5
2018-06-07 05:02



le [in] et [out] n'est pas nécessaire dans le premier exemple. - slhck
Bonne réponse, mais je recommande de fournir des liens vers la documentation officielle de chaque filtre mentionné: select et showinfo. - LordNeckbeard
Bien que cela fonctionne, j'espérais une solution capable d'exporter tous les types de trames, tout en conservant les trames telles qu'elles sont (certaines étant uniquement la zone de l'image qui doit être redessinée, d'autres étant des redessinages complets). - ndmweb
@ndmweb Vous ne pouvez pas exporter un cadre non intra "tel quel". Il n'y a pas d'information d'image valide - un macrobloc / une image P ou B, simplement dit, ne stocke que les différences entre l'image suivante. Je crains que pour faire ce que vous voulez, vous devez envisager de le coder avec MATLAB ou des outils similaires. Au moins, je ne suis au courant d'aucune solution existante. - slhck


Les images P et B ne contiennent généralement pas de nouvelles données d'image pour chacune des zones modifiées. Au contraire, l'image est divisée en macroblocs de différents types. Certains types de macroblocs contiennent de nouvelles données d'image, mais la plupart calculent le contenu sur la base d'autres images de référence et de vecteurs de mouvement.

Pas exactement ce que vous demandiez, mais cela utilisera la couleur pour vous montrer le type de chaque macrobloc:

ffmpeg -debug vis_mb_type -i input.mp4 output.mp4

ou

ffplay -debug vis_mb_type input.mp4

Cela vous montrera également les vecteurs de mouvement:

ffplay -debug vis_mb_type -vismv 7 input.mp4

4
2018-06-08 02:15



Belle info à avoir, ne serait-ce que pour comprendre qu'une trame entière ne doit pas seulement être constituée de macroblocs intra-codés. - slhck