2012-08-10 12 views
5

C'è un modo (tramite script o preferibilmente alcuni parametri nel chiamare ffmpeg che ho perso) per estrarre i frame da un file avi e ignorare i fotogrammi duplicati sequenzialmente, quindi essere in grado di passare attraverso le immagini guardando solo i delta/cambiamenti?FFMPEG - Come estrarre i fotogrammi come immagini rimuovendo sequenzialmente i fotogrammi duplicati

Spesso devo registrare riunioni al lavoro e un sacco di tempo, lo schermo del client che sto guardando non cambia mentre stiamo parlando al telefono. Dopo la riunione è finita, ho bisogno di utilizzare queste immagini come parte della nostra raccolta di documentazione e specifiche.

So che potrei semplicemente emettere ogni frame ed eseguirli attraverso qualsiasi utility di rimozione di file duplicati, ma questo rimuoverà TUTTI i fotogrammi duplicati. Quindi, se i frame estratti andavano così:

A, A, A, B, B, B, C, C, A, A, C, C, C, B, B, B ...

loro esecuzione attraverso un tipico rimozione di file duplicati, vorrei ottenere: a, B, C

Quello che vorrei è: a, B, C, a, C, B

Il comando che sto attualmente utilizzando per estrarre le immagini è:

ffmpeg.exe -i file.avi -ss 0 -sameq -f immagine2 -r 1 im età% 5d.png

Stavo ricevendo tutti i frame in anticipo (rimuovendo -r 1 da sopra), ma questo stava generando troppi fotogrammi da gestire poiché questi incontri online possono durare ore, quindi per ora, io ottenere un fotogramma al secondo dal file.

Una soluzione basata su Windows sarebbe preferibile, tuttavia, sono sicuro che altre persone sarebbero interessate a soluzioni su altre piattaforme, se disponibili.

Qualsiasi soluzione o punto nella giusta direzione è molto apprezzata.

+0

Hai mai trovare una soluzione a questo? Sto cercando quasi la stessa cosa. –

risposta

7

Hai provato con l'opzione -vsync 0?

+0

Che si avvicina, ma quando l'ho provato, 'fdupes' ha trovato altri fotogrammi identici consecutivi da eliminare. –

+1

+1 Nel mio caso (frame rate basso) ho duplicato ogni frame per 50 volte. Con questa opzione c'era solo 1 frame duplicato per ogni 1000 frame non duplicati. – user2518618

+0

Ho trovato esattamente il numero di frame di input per me. Forse ci sono alcuni fotogrammi di transizione tutti neri che spuntano come duplicati per gli altri commentatori? –

0

È possibile raggiungerlo tramite il filtro video mpdecimate (seguito dal filtro setpts per il momento giusto).
Utilizzare questa opzione:

-vf mpdecimate,setpts=N/FRAME_RATE/TB 

Forse non corretto funzionamento con il comando originale e sarà necessario usarlo per convertire prima il video originale per il video senza frames duplicati:

ffmpeg.exe -i file.avi -vf mpdecimate,setpts=N/FRAME_RATE/TB outfile.avi 

e quindi utilizzare il outfile.avi per produrre la sequenza di immagini.

(In caso di necessità il filtro mpdecimate può essere regolata dalle sue opzioni hi, lo e frac, ma i valori di default funzionano bene.)