web-dev-qa-db-fra.com

Comment convertir une vidéo en images?

Comment convertir un fichier vidéo en séquence d'images, par exemple une image toutes les N secondes. Mplayer ou ffmpeg peuvent-ils le faire? J'ai utilisé MPlayer pour récupérer des captures d'écran manuellement, mais j'aimerais automatiser cela pour une longue vidéo.

66
Liam
mplayer -vo jpeg -sstep 5 file.avi

enregistrera une image au format jpeg toutes les 5 secondes.

Cependant, il ne s’arrêtera pas à la fin du fichier, il continuera à produire des copies de la dernière image. Pour éviter cela, recherchez la durée de la vidéo en secondes, en utilisant un autre lecteur ou avec mplayer:

mplayer -vo null -ao null -frames 0 -identify file.avi

et cherchez une ligne du type "ID_LENGTH = 147.00".

Soustrayez 2 de la longueur et utilisez cette valeur pour l'option -endpos. Par exemple, pour une vidéo de 147 secondes:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
27
Liam

C’est très simple avec ffmpeg, et il peut afficher une image toutes les N secondes sans scripts supplémentaires. Pour exporter en tant que séquence d'images, utilisez simplement myimage_%04d.png ou similaire comme sortie. Le bit %0xd est converti en un entier zéro-rempli. x digits long - l'exemple que j'ai donné a pour résultat la sortie sous la forme myimage_0000.png myimage_0001.png etc. Vous pouvez utiliser de nombreux formats d'images fixes, png, jpeg, tga, peu importe (voir ffmpeg -formats pour une liste complète).

Ok, donc pour exporter une séquence d’images, nous pouvons utiliser un format d’image comme sortie avec un nom de fichier séquentiel, mais nous ne voulons pas exporter chaque image. Donc, changez simplement la cadence de la sortie en tout ce que vous voulez en utilisant l'option -r nn est le nombre d'images par seconde. Une image par seconde serait -r 1, une image toutes les quatre secondes serait -r 0.25, une image toutes les dix secondes serait -r 0.1 et ainsi de suite.

Donc pour résumer, voici comment il serait de sauver une image de input.mov toutes les quatre secondes dans output_0000.png, output_0001.png etc .:

ffmpeg -i input.mov -r 0.25 output_%04d.png

Modifiez le% xd en fonction du nombre de chiffres requis, par exemple. si la commande crée plus de 10 000 cadres, remplacez %04d par %05d. Cela fonctionne également pour les fichiers d'entrée qui sont une séquence d'images. Lire plus ici .

Utilisateurs Windows: sur la ligne de commande, utilisez %

exemple: ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png

Dans les scripts CMD et BAT, utilisez %%

exemple: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png

N'utilisez pas un seul % dans les scripts et n'utilisez pas %% dans la ligne de commande. Les deux situations généreront une erreur.

64
stib

Avec ffmpeg , vous pouvez effectuer les opérations suivantes:

ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg

Cette commande génère une miniature JPG de taille 320 × 240 à la 4e seconde de la vidéo. Mettez ceci dans un script qui change l'heure et le nom du fichier et vous avez terminé.

Plus d'infos: Crée une vignette toutes les X secondes de la vidéo

11
Nifle

Si vous recherchez une sorte de fiche de contact et si vous utilisez un système d'exploitation de type Unix, vous pouvez utiliser ce script élaboré, appelé au point Fiche de contact vidéo * NIX , court vcs .

En arrière-plan, il utilise également ffmpeg (par défaut) ou mplayer, ce qui lui permet de gérer de nombreux formats vidéo. Il automatise le processus de capture des images fixes du film et les compose en une image avec un en-tête et un pied de page. Vous pouvez choisir par exemple combien de captures que vous voulez ou les différences de temps entre eux.

Pour un intervalle de 10 minutes, l'invocation est la suivante:

vcs -i 10m input.avi

Vérifiez la liste complète des options de ligne de commande pour d’autres réglages.

Voici un exemple de feuille de contact, tiré de la page d'accueil :

enter image description here

8
mpy

Avec VLC 1.1.0 et les versions ultérieures, vous pouvez utiliser le filtre de scènes vidéo:

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

Ce qui précède enregistre 1 image sur 24 (--scene-ratio = 24), commençant à 00:00:10 et se terminant à 00:00:11.

Je viens de tester et de confirmer que cela fonctionne avec VLC 2.0.3 sur une nouvelle installation de Windows 8 (je n’ai aucun plugin vidéo ou logiciel supplémentaire).

Documentation complète: http://wiki.videolan.org/How_to_create_thumbnails

7
Michael

VirtualDub peut le faire pour vous

File -> Export -> Image sequence

enter image description here

2
Shevek

Vous pouvez aussi essayer ceci

à partir de la ligne de commande VLC ...

vlc "C:\VOTRE\fichier\chemin\fichier.avi" -V image --image-out-prefix = capname --image-out-ratio = 60

fichier.avi est la vidéo à partir de laquelle vous voulez capturer, capname est le préfixe des images enregistrées; vous pouvez également jouer avec le rapport (60 signifie qu'une image sur 60 est capturée). Vous pouvez ajouter d'autres commandes, par exemple --image-out-format jpeg enregistrera vos majuscules au format jpeg au lieu de pngs, --snapshot-path vous permet de choisir où sauvegarder vos majuscules.

Source de ce qui précède

1
Nifle

Vous pouvez ignorer des images dans VirtualDub. Il suffit d’utiliser l’option "Decimate By" située dans le menu Video -> Frame Rate. Par exemple, si vous définissez "Decimate By 100" puis utilisez Fichier -> Exporter -> Séquence d'images, cela n'enregistrera que toutes les 100 images.

1
Alex