FFMPEG: Extraction de 20 images d'une vidéo de longueur variable
Je ai parcouru l'internet pour ce de façon très intensive, mais je n'ai pas trouvé ce dont j'avais besoin, seules les variations de celle-ci qui ne sont pas tout à fait la chose que je veux utiliser.
J'ai plusieurs vidéos en différentes longueurs et je veux extraire de 20 images de chaque vidéo du début à la fin, pour montrer le plus large impression de la vidéo.
Si une vidéo est de 16m 47 long => 1007s au total => je dois faire un instantané de la vidéo toutes les 50 secondes.
J'ai donc pensé à l'aide de l'option-r de ffmpeg avec la valeur de 0.019860973 (eq 20/1007) mais ffmpeg me dit que le débit est trop petit pour elle...
La seule façon que j'ai pensé à le faire serait d'écrire un script qui appelle ffmpeg avec un manipulés -ss commutateur et l'aide -vframes 1 mais c'est assez lent et un peu pour moi depuis ffmpegs numerates les images de lui-même...
Des suggestions ou des directions?
Grâce,
Vapire
source d'informationauteur Vapire
Vous devez vous connecter pour publier un commentaire.
J'ai essayé de trouver la réponse à cette question. J'ai fait usage de radri réponse, mais trouve qu'il a une erreur.
produit une image toutes les 2 secondes car -r désigne la fréquence d'images. Dans ce cas, de 0,5 images par seconde, ou 1 image toutes les 2 secondes.
Avec la même logique, si votre vidéo est 1007 secondes et que vous avez besoin de seulement 20 cadres, vous avez besoin d'une trame toutes les 50.53 secondes. Traduit de taux de trame, serait 0.01979 images par seconde.
De sorte que votre code doit être
J'espère que ça aide quelqu'un, comme il m'a aidé.
Je sais que je suis un peu en retard à la fête, mais j'ai pensé que cela pourrait aider:
Pour tout le monde d'avoir le problème ffmpeg est de générer une image pour chaque image, voici comment je l'ai résolu (à l'aide de blahdiblah réponse):
Tout d'abord, j'ai attrapé le nombre total d'images dans la vidéo:
Ensuite, j'ai essayé à l'aide de select pour saisir les images:
Mais, quel que soit le mod(n,100) a été créé à, ffmpeg a été crachant beaucoup trop d'images. J'ai dû ajouter -vsync 0 à corriger, ma dernière commande ressemble à ceci:
(où 100 est le cadre fréquence vous souhaitez les utiliser, par exemple, tous les 100e cadre)
Espoir qui sauve quelqu'un un peu de mal!
Vous pouvez essayer de convertir la vidéo pour un nombre N d'images ?
Mise à jour:
Ou extrait d'image toutes les 2 secondes:
Mise à jour:
Pour obtenir la durée de la vidéo:
Puis, dépend de votre langage de programmation, vous convertir en secondes. Par exemple, en PHP, vous pouvez le faire comme ceci:
où $de temps est la durée de la vidéo. Vous pouvez exécuter $duration_in_seconds /20
En général, ffmpeg processus de cadres, donc rien à partir de la durée totale/nombre total d'images nécessite certains pré-traitement.
Je vous recommande d'écrire un script shell pour obtenir le nombre total d'images à l'aide de quelque chose comme
et ensuite utiliser le
select
filtre vidéo de choisir les images dont vous avez besoin. Ainsi, le ffmpeg commande devrait ressembler à quelque chose commesauf qu'au lieu de chaque centième de cadre,
100
serait remplacé par le nombre calculé dans le script shell pour vous donner 20 cadres de total.J'ai eu le même problème et est venu avec ce script qui semble faire l'affaire:
Pour l'utiliser, enregistrer en tant que .sh fichier et de l'exécuter en utilisant les paramètres suivants à l'exportation de 20 images:
Cela vous donnera le nombre d'images spécifié distribués de manière égale tout au long de la vidéo.