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
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 uncropdetect
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 h264illegal short term buffer state detected
.Exemple d'utilisation des filtres
select
etscale
: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 ellePICT_TYPE_I
n'existe pas - elle devrait l'êtreI
.Dans le
scale
filtre, vous pouvez remplacer73
ou41
faire en sorte que le filtre calcule automatiquement la largeur ou la hauteur pour conserver les proportions: commescale=73:-1
ouscale=-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.la source
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:
== --------------------------------------------
Paramètres «-i» à l'avance
la source