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.
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
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 n
où n
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.
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
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 :
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
VirtualDub peut le faire pour vous
File
-> Export
-> Image sequence
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.
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.