Sto cercando di estrarre i fotogrammi chiave da un video clip. Ho provato il seguente comando, ma estrae tutti i frame.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Sto cercando di estrarre i fotogrammi chiave da un video clip. Ho provato il seguente comando, ma estrae tutti i frame.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Risposte:
Puoi renderlo più semplice usando -skip_frame
senza la necessità di select
filtro video:
ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg
-threads 1
, rispetto al valore predefinito -threads auto
, crea un cropdetect
grafico del filtro ( ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null
) 2 volte più veloce sul mio sistema (da 60 a 30 secondi)!
-threads 1
è che altrimenti la sequenza dei fotogrammi chiave di output può essere emessa in modo non ordinato. Se hai una sorta di modo post-hoc per affrontare questo problema, puoi conservare il multi-threading. Inoltre, sembra che sia ancora possibile ottenere fotogrammi chiave non ordinati, anche durante l'utilizzo -threads 1
, ma ora in questo caso tutte queste occorrenze sembrano essere accompagnate / contrassegnate da un errore del decodificatore h264 illegal short term buffer state detected
.
Esempio usando i filtri select
e scale
:
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg
Alcuni consigli:
I filtri non dovrebbero precedere l' -i
opzione, in quanto sono un'opzione di output. Non so da dove esattamente hai ricevuto il comando, ma PICT_TYPE_I
non esiste - dovrebbe essere I
.
Nel scale
filtro è possibile sostituire 73
o 41
fare in modo che il filtro calcoli automaticamente la larghezza o l'altezza per preservare le proporzioni: come scale=73:-1
o scale=-1:41
. Ciò impedisce lo stiramento o lo schiacciamento che può derivare dal ridimensionamento "forzato".
La qualità dell'output può essere controllata con -qscale:v
(o con l'alias -q:v
). L'intervallo effettivo è una scala lineare da 2 a 31 e un valore inferiore è una qualità superiore.
Che tu ffmpeg
permetta un filtro prima che l'input mi dica che potrebbe essere obsoleto. Scarica una build statica recente per il tuo sistema operativo o creala tu stesso secondo le guide alla compilazione se quanto sopra non funziona.
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
se questo errore :
L'opzione vf (imposta i filtri video) non può essere applicata all'URL di input 1508.mp4: stai tentando di applicare un'opzione di input a un file di output o viceversa. Sposta questa opzione prima del file a cui appartiene. Errore durante l'analisi delle opzioni per il file di input 1508.mp4. Errore durante l'apertura dei file di input: argomento non valido
Puoi farlo:
ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I) -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg
== --------------------------------------------
"-I" Parametri in anticipo