9

Sto cercando di ottenere fotogrammi rappresentativi per un video, in modo da rimuovere i frame ridondanti che potrebbero apparire in un video. Questo è quello che uso per ottenere i frame.Cambio scena/rilevamento colpo/estrazione immagine tramite ffmpeg dal video

./ffmpeg -i video.mp4 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -s 320x240 thumb-%02d.png

Ho anche provato

./ffmpeg -i video.mp4 -f image2 -vf "select=gt(scene\,.4)" -vsync vfr thumb%04d.png

Il problema principale in questo è sfocatura. Se campiono solo fotogrammi ogni 5 secondi, non vedo alcuna sfocatura, tuttavia usando i due comandi precedenti ottengo molta sfocatura.

Il video può essere trovato qui, http://www.cs.umd.edu/~bharat/video.mp4

Al fine di campionare il video ogni 10 secondi, io uso il seguente:

./ffmpeg -i video.mp4 -r 1/10 filename%03d.jpg

output utilizzando il campionamento normale: sampling output

Uscita utilizzando selezionare: select output

Tuttavia, il campionamento normale potrebbe essere negativo per alcuni video e potrebbe creare fotogrammi ridondanti. C'è un modo per utilizzare alcune opzioni in ffmpeg e ottenere frame senza questa sfocatura? Se il campionamento normale può ottenere buoni frame, ci dovrebbero essere frame nelle vicinanze senza sfocatura. Ho guardato le opzioni come scenecut in ffmpeg, ma non ho familiarità con il loro utilizzo per questa applicazione.

+0

Questo risultato è previsto con il normale campionamento del frame. Deve necessariamente essere 'ffmpeg'? Ci sono molte implementazioni di rilevamento dei colpi disponibili gratuitamente. – bjou

+0

non necessariamente, qualsiasi cosa farà, ho solo bisogno di liberarmi dei fotogrammi sfocati – Bharat

risposta

2

Suggerisco anche di dare un'occhiata ad altre implementazioni di rilevamento di colpi liberamente disponibili. Ad esempio, una soglia personalizzato di 47 con Johan Mathe del Shotdetect ottengono i seguenti risultati (primo fotogramma di ogni colpo): Shot Detection with jmathe's Shotdetect

Tuttavia, la tua domanda sembra a che fare più con il problema della stabilizzazione il video di quanto non faccia scene cambiamento o rilevamento di colpi. Le sfocature che vedi sopra e nell'OP sono "artefatti" inerenti al video e non sono dovute agli algoritmi utilizzati per tagliare o campionare il video. Se si desidera ridurre la quantità di movimento si dovrebbe guardare in this post così come guardare il modulo OpenCV's Video Stabilization. C'è anche un sacco di ricerca che affronta questa sfida tra cui this e this.

+0

grazie per il collegamento, capisco che c'è sfocatura intrinsecamente presente nel video, ciò che sorprende è che ffmpeg stava selezionando i frame sfocati solo quando si utilizza l'opzione select, i risultati sembrano essere migliori, probabilmente c'è la massima variazione nei frame selezionati da ffmpeg. – Bharat

+0

Non sono sicuro di cosa intendi per "variazione massima", ma potresti anche voler sperimentare con quale frame selezionare. Il comando che hai dato seleziona l'I-Frame, ma puoi anche selezionare una delle seguenti opzioni: "I, P, B, S, SI, SP, BI". – bjou

+0

Intendevo che i fotogrammi sfocati sarebbero diversi dai normali fotogrammi e ffmpeg potrebbe rilevarlo come un cambiamento nello scatto, sarebbe interessante vedere quali fotogrammi P, B danno, grazie ancora, non sapevo che potremmo selezionare anche altri fotogrammi .Se ricordo bene ci dovrebbero essere molti frame P, B, come farebbe a sapere quale frame P/B selezionare – Bharat