C # estrae i frame da una parte di un file video

Usando il wrapper AForge ffmpeg puoi estrarre i frame da un video usando la class VideoFileReader e salvarlo come bitmap.

Vedi questo per l’esempio: Estrazione di frame di un file .avi

Il mio problema è che non puoi specificare da dove iniziare a leggere i frame. Inizia sempre dall’inizio del file video.

Ma cosa succede se volevo estrarre i frame che si trovano nel bel mezzo di un file video di due ore. Usando quella class dovresti analizzare l’intera prima ora per arrivare a quei frame.

Qualcuno sa come raggiungerlo?

Se sai dove nel video vuoi iniziare a leggere, basta saltare il numero appropriato di fotogrammi; non è necessario elaborare nessuno di essi.

Ciò presuppone, ovviamente, che tu conosca il numero esatto del fotogramma da cui vuoi iniziare a leggere, che puoi calcolare moltiplicando il framerate per il momento in cui vuoi eseguire l’estrazione. Nel tuo esempio, se il video è lungo due ore e vuoi estrarre i frame dal centro …

 VideoFileReader reader = new VideoFileReader(); reader.Open("file.avi"); // Jump to 1 hour into the video int framesToSkip = reader.FrameRate * 3600; // 1 hour = 3600 seconds for (int i = 0; i < framesToSkip; i++) reader.ReadVideoFrame(); // Now the next time ReadVideoFrame() is called, we will get the frame at the 1 hour mark 

Ciò presuppone che la proprietà .FrameRate restituisca il valore in frame al secondo. Sfortunatamente la documentazione non dice, quindi non sono sicuro di come gestisca i file video con framerate non integrali (cioè 29.97 è un framerate comune).