Comment puis-je extraire une image d'une heure particulière d'une vidéo dans Xubuntu 16.04?

8

Je recherche une option de ligne de commande.

Par exemple, si j'ai la vidéo sample-video.mp4et que je veux générer un fichier image à sample-image.jpgpartir de la vidéo à l'heure 00:00:26, quelle commande dois-je donner?

De plus, il serait très utile d'expliquer en détail la fonction de chaque argument de la commande.

Sonevol
la source
2
Selon cette question et ses réponses ffmpegsemble prendre en charge les noms de fichiers pour la sortie.
IQV

Réponses:

8

Vous pouvez utiliser mplayer(à partir du package mplayer, non installé par défaut):

mplayer -vo jpeg -ss 00:00:26 -frames 1 sample-video.mp4

Cela créera le fichier 00000001.jpg, vous devrez donc le renommer. Pour autant que je sache, il n'y a aucun moyen de spécifier un nom de fichier.

-vo jpegsignifie que vous voulez une sortie JPEG, -ss 00:00:26recherche la position donnée, -frames 1signifie traiter une image puis quitter.

Florian Diesch
la source
Quel est l'avantage d'obtenir plus de 1 images? S'agira-t-il de copies ou chaque image différera-t-elle d'une seconde?
Sonevol
Les images créées à partir de plusieurs cadres différeront d'une fraction de seconde. La valeur exacte dépend de la vidéo.
Florian Diesch
5
@Sonevol Le cadre exactement à 0:00:26 peut ne pas être exactement ce que vous voulez. Vous voudrez peut-être prendre les ~ 50 images entre 0:00:25 et 0:00:27 (ou même juste 3-4 images autour de la marque 0:00:26), puis les parcourir pour choisir la meilleure.
xDaizu
1
@FlorianDiesch Possible également de sortir en png avec quelque chose comme: -vo png:z=9avec le paramètre -z spécifiant le niveau de compression. Pour jpeg , vous pouvez également ajouter un paramètre de qualité: -vo jpeg:quality=100. Mais votre réponse est excellente car elle l'est déjà :)
andrew.46
13

Vous pouvez utiliser ffmpeg

ffmpeg -loglevel quiet -ss 26 -i sample-video.mp4  -t 1 -f image2 anyfilename.jpeg
  • -loglevel définit la déconnexion sur silencieux car ffmpeg est très bavard
  • -ss est rechercher (en secondes, c'est-à-dire où vous voulez prendre l'instantané)
  • -i fichier vidéo d'entrée
  • -t délai de l'instantané (en secondes)
  • -f type de fichier

Vous pouvez également jouer avec les options, comme le contrôle de la qualité de la sortie jpeg -q:v <linear integer 1-10>ou la résolution -s 480x300.

Quelques idées supplémentaires ici


Méthode VLC

cvlc sample-video.mp4 --start-time=26 --run-time=1 --rate=1 --video-filter=scene --vout=dummy --aout=dummy  --scene-ratio=24 --scene-prefix=sample-image --scene-replace vlc://quit
  • cvlc - parce que sa ligne de commande et nous ne voulons pas ouvrir de fenêtres. aussi, cela signifie que nous pouvons l'exécuter sans X11.

  • --start-time = 26 - est la position exacte de l'instantané en secondes

  • --run-time = 1 - combien de temps la vidéo "jouera" en secondes. On y joue pendant une seconde pour faire une capture d'écran de cette seconde
  • --rate = 1 quand prendre la capture d'écran. Cela signifie essentiellement "toutes les secondes" et est utile, si vous avez des fichiers plus longs, pour prendre une capture d'écran toutes les 60 secondes ou toutes les 5 minutes
  • --video-filter = scene dire à VLC que nous voulons prendre des captures d'écran
  • --vout = factice pas de sortie pour la vidéo sur X11, nous n'en avons pas besoin
  • --aout = factice pas de sortie pour l'audio, nous n'en avons pas besoin
  • --scene-ratio = 24 nous disons à VLC qu'il y a environ 24 images par seconde
  • --scene-prefix = sample-image le nom de fichier de votre capture d'écran
  • --scene-replace remplace tous les fichiers appelés comme votre capture sample-image.pngd' écran par votre capture d'écran actuelle. Si vous omettez cela, VLC commencera à numéroter les captures d'écran
  • vlc: // quitter quitter vlc une fois que nous avons terminé

Documentation complète ici

Robert Riedl
la source
Qu'entendez-vous par bavardage? Et je veux un instantané à la 26e seconde. Alors pourquoi spécifier le délai par -t. Je prends une image et non une vidéo.
Sonevol
3
"Chatty" car ffmpeg imprime plus de 40 lignes de sortie de journal avec cette commande, comme la version actuelle, le type de configuration et les informations sur le fichier vidéo d'entrée - ce qui n'est pas intéressant pour vous. Pour votre objectif, vous pouvez probablement omettre "-t 1". Il semble que la valeur par défaut soit une seconde ou une fraction de celle-ci, ce qui est bien pour la capture d'écran. La bonne différence est la possibilité de définir le nom du fichier de sortie et de modifier la qualité / résolution, etc.
Robert Riedl