web-dev-qa-db-fra.com

ffmpeg divise l'avi en images avec une fréquence d'images connue

J'ai posté ceci sous forme de commentaires sous ce fil connexe . Cependant, ils semblent être passés inaperçus = (

J'ai utilisé

ffmpeg -i myfile.avi -f image2 image-%05d.bmp

pour scinder myfile.avi en images stockées sous forme de fichiers .bmp. Cela semblait marcher sauf pas tout à fait. Lors de l'enregistrement de ma vidéo, j'ai enregistré à un taux de 1000fps et la vidéo s'est avérée être longue de 2min29sec. Si mes calculs sont exacts, cela devrait représenter un total de 149 000 images pour l'ensemble de la vidéo. Cependant, quand j'ai couru

ffmpeg -i myfile.avi -f image2 image-%05d.bmp

Je n'ai obtenu que 4472 fichiers. Comment puis-je obtenir les images originales de 149k?

J'ai également essayé de convertir le taux de trame de mon AVI d'origine à 1000 images par seconde en faisant

ffmpeg -i myfile.avi -r 1000 otherfile.avi

mais cela n'a pas semblé régler mon problème.

20
Myx
ffmpeg -i myfile.avi -r 1000 -f image2 image-%07d.png

Je ne suis pas sûr que la sortie de fichiers 150k bmp sera une bonne idée. Peut-être que png est assez bon?

35
Dat Chu

La première partie de vos calculs est bonne, les 2 minutes et 29 secondes équivalent à environ 149 secondes. Avec 1000 images par seconde, cela fait 149000 images. Cependant, votre nom de fichier de sortie n'a que 5 positions pour le nombre alors que 149000 en a 6, essayez donc "image-% 06d.bmp".

Ensuite, il y a la taille du disque: Est-ce que vos images tiennent sur le disque? Avec bmp chaque image utilise sa propre taille. Vous pouvez essayer d’utiliser des images jpeg, elles se compressent environ 10 fois mieux.

Une autre idée: si ffmpeg ne trouve pas une cadence (raisonnable), il tombe à 25 ou 30 images par seconde. Vous devrez peut-être le spécifier. Faites-le pour la source et la cible, consultez la page de manuel (man ffmpeg sous unix):

   To force the frame rate of the input file (valid for raw formats
   only) to 1 fps and the frame rate of the output file to 24 fps:
           ffmpeg -r 1 -i input.m2v -r 24 output.avi

Pour ce que ça vaut: J'utilise ffmpeg -y -i "video.mpg" -sameq "video.%04d.jpg" pour scinder ma vidéo en images. Le -sameq force le jpeg dans une qualité raisonnable, le -y évite d'autoriser l'écrasement des questions. Pour vous:

ffmpeg -y -r 1000 -i "monfichier.avi" -sameq "image.% 06d.jpg"

11
CBee

Je pense qu’il ya une idée fausse ici: la sortie d’un système vidéo HS a peu de chances d’avoir une cadence de sortie de 1000 images par seconde, mais une valeur plutôt normale de 30 (ou 50/60) images par seconde. En plus de surcharger la plupart des lecteurs vidéo avec ce type de vitesse, il serait contre-productif de montrer la séquence à la même vitesse que celle enregistrée. Fondamentalement: une entrée à 1 seconde à 1 000 images par seconde correspond à 33 secondes à une sortie à 30 images par seconde.

La durée de la scène a-t-elle été réellement enregistrée, soit 2:29 min (ce qui a donné une vidéo ~ 82 min au débit normal) ou l'a pris environ 4,5 secondes (4472 images), ce qui correspond à 2:29 min en lecture normale?

0
Kalliope