web-dev-qa-db-fra.com

Extraire "Un de 10 images" "dans une vidéo utilisant VLC ou FFMPEG

J'essaie d'extraire "exactement 1 trame de chaque cadres de 10" d'une vidéo (c'est-à-dire extraire 1, laissez 9 répétition) à des fins scientifiques. La vidéo est de 105 images, 3,5 secondes, 29,97fps (H.264, .MOV, produite par Nikon D3100).

J'ai le téléchargé ici .

Vlc

La commande ci-dessous devrait produire 10 images, mais elle ne produit que 6 images. J'ai essayé différents ratios de scène et aucun d'entre eux ne produit un nombre correct de cadres (même près de corriger).

vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit

Est-ce que quelqu'un voudrait me dire quel est le problème?

Ffmpeg

FFMPEG ne semble pas avoir une commande exactement à mon objectif. La commande ci-dessous extrait 3 images de chaque seconde, mais comme le FPS n'est pas exactement 30 (plutôt 2.97), cela ne produira pas de résultats corrects pour moi.

En outre, même FFMPEG ne donne pas le nombre correct de cadres avec même cette commande. Pour 3,5 secondes de la vidéo que j'attends au plus 10 images, mais ce que je reçois, c'est 12 images!

ffmpeg -i 1.mov -y -an -sameq  -r 3 -f image2 -vcodec mjpeg %03d.jpg 

Comment puis-je réaliser ce que je veux?

12
wmac

L'aspect le plus important de votre question est le fait que la vidéo utilise 29,97 images par seconde, pas 30. Pesky NTSC.

Quoi qu'il en soit, je pense que ce serait plus facile de simplement extraire chaque image, puis retirez ceux dont vous n'avez pas besoin:

ffmpeg -i 1.mov -y -f image2 -c:v mjpeg %03d.jpg

Ensuite, supprimez ceux dont vous n'avez pas besoin. Puisque chaque dixième cadre se terminera par un 1.jpg, nous pouvons simplement prendre tous les autres ...

find . -maxdepth 1 -not -iname "*1.jpg"

... et une fois que vous êtes sûr que ce sont ceux que vous souhaitez supprimer:

find . -maxdepth 1 -not -iname "*1.jpg" -exec rm '{}' \;

Si vous pouvez utiliser mencoder, vous pouvez essayer l'option framestep, comme expliqué dans la documentation , comme framestep=10 dans ton cas. Personnellement, je ne pouvais pas l'installer/l'essayer cependant.

4
slhck

Si vous deviez d'abord convertir la vidéo en une série d'images RGB24 brutes RGB24 ou RGB32, vous pouvez peut-être obtenir le bon nombre de cadres car dans la forme originale, il semble inclure des types de trame inhabituels qui peuvent ne pas être des images du tout ?? ?

Dans les disques laser d'origine, la vidéo entière était composée d'une série d'images avec des numéros individuels de 1 à 100 000 ou plus, et comme c'est vraiment le moyen correct d'établir une base de référence pour les futures conversions ou manipulations.

L'industrie a changé pour cette idée de compression étrange simplement pour réduire les sommes d'argent et pour corrompre de véritables formes scientifiques de numéros de manutention.

Vous devez d'abord extraire n'importe quel audio en tant que fichier d'ondes afin de ne pas perdre entièrement du son. Il semble que FFMPEG met de l'identification d'informations d'identification dans chaque image extraite, car si vous essayez de corder des images de cordes à partir de ceux qui viennent d'extraire, et vous mélangez d'autres images à partir d'autres sources avec la même extension, FFMPEG ignorera les images que vous avez essayées dans le milieu de tout .

Avec le format de disque laser, la fréquence de trame est simplement dictée par le taux que vous présentez les images séquentielles et non contrôlées de quelque manière que ce soit par les images elles-mêmes.

FFMPEG peut prendre une leçon de la science au lieu de l'art pour une manipulation appropriée et une affichage d'images de tout type. Ou peut-être l'ensemble de l'industrie AV elle-même. L'industrie doit vraiment améliorer les capacités du matériel et utiliser des données brutes nécessitant beaucoup de mémoire/de stockage. Rien ne bat les données brutes pour la précision et la précision.

0
Aluetta