J'essaie d'extraire des images clés d'un clip vidéo. J'ai essayé la commande suivante, mais elle extrait toutes les images.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
J'essaie d'extraire des images clés d'un clip vidéo. J'ai essayé la commande suivante, mais elle extrait toutes les images.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Réponses:
Vous pouvez rendre cela plus simple à utiliser -skip_frame
sans avoir besoin de select
filtre vidéo:
ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg
-threads 1
, par rapport à la valeur par défaut, -threads auto
il fait un cropdetect
graphique de filtre ( ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null
) 2x plus rapide sur mon système (60s à 30s)!
-threads 1
est que sinon la séquence des images clés de sortie peut être émise dans le désordre . Si vous disposez d'une méthode post-hoc pour résoudre ce problème, vous pouvez conserver le multithread. En outre, il semble qu'il soit toujours possible d'obtenir des images clés hors service, même lors de l'utilisation -threads 1
, mais maintenant dans ce cas, toutes ces occurrences semblent être accompagnées / signalées par une erreur de décodeur h264 illegal short term buffer state detected
.
Exemple d'utilisation des filtres select
et scale
:
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg
Quelques conseils:
Les filtres ne doivent pas précéder l' -i
option, car ils sont une option de sortie. Je ne sais pas d'où vous venez exactement la commande, mais elle PICT_TYPE_I
n'existe pas - elle devrait l'être I
.
Dans le scale
filtre, vous pouvez remplacer 73
ou 41
faire en sorte que le filtre calcule automatiquement la largeur ou la hauteur pour conserver les proportions: comme scale=73:-1
ou scale=-1:41
. Cela empêche l'étirement ou l'écrasement qui peuvent résulter d'une mise à l'échelle "forcée".
La qualité de sortie peut être contrôlée avec -qscale:v
(ou l'alias -q:v
). La plage efficace est une échelle linéaire de 2 à 31 et une valeur inférieure est une qualité supérieure.
Que votre ffmpeg
autorise un filtre avant l'entrée me dit qu'il pourrait être obsolète. Téléchargez une version statique récente de votre système d'exploitation, ou créez-la vous-même selon les guides de compilation si ce qui précède ne fonctionne pas.
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
si cette erreur:
L'option vf (définir les filtres vidéo) ne peut pas être appliquée à l'URL d'entrée 1508.mp4 - vous essayez d'appliquer une option d'entrée à un fichier de sortie ou vice versa. Déplacez cette option avant le fichier auquel elle appartient. Erreur d'analyse des options pour le fichier d'entrée 1508.mp4. Erreur lors de l'ouverture des fichiers d'entrée: argument non valide
tu peux le faire:
ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I) -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg
== --------------------------------------------
Paramètres «-i» à l'avance