2014-07-18 13 views
10

Sto provando a catturare ogni numero di fotogramma del video, ma sembra che non ci sia modo di ottenerlo. Così ho iniziato il mio orologio per abbinare i numeri di fotogramma del video, ma non corrispondono mai e la differenza continua ad aumentare con l'avanzare del video.Ottieni i numeri di fotogramma in HTML5 Video

Per favore dai un'occhiata al mio cestino. http://jsbin.com/dopuvo/4/edit

Ho aggiunto il numero di fotogramma a ciascun fotogramma del video da Adobe After Effect in modo da avere informazioni più precise sulla differenza. Il video è in esecuzione a 29,97 fps e anche la richiestaAnimationFrame è impostata per aumentare il numero alla stessa velocità, tuttavia non sono sicuro da dove provenga questa differenza.

A volte corrispondono e a volte no. Ho anche provato a farlo offline ma ottengo gli stessi risultati. Qualsiasi aiuto.

+0

possibile duplicato di [È possibile ottenere il numero del frame corrente in un video HTML5?] (Http://stackoverflow.com/questions/7177073/can-i-get-the-number-of-the-current -frame-in-un-html5-video) –

+0

Grazie Samuel, e sì, infatti questa è la soluzione che ho seguito, ma ho bisogno di continuare a ottenere i numeri di fotogramma mentre il video avanza. Inoltre ho provato senza arrotondare i frame totali ma senza fortuna. – SayedTaqui

+0

Potrebbe essere possibile (se controlli la tela su cui sta disegnando) per tenere un contatore lì: http: //www.kaizou.org/2012/09/frame-by-frame-video-effects-using-html5 -e anche se sembra anche magia nera dal mio punto di vista LOL, vedi anche http://stackoverflow.com/questions/17044567/get-frame -change-in-video-html5 – rogerdpack

risposta

10

Ho trovato qualcosa su github per questo. https://github.com/allensarkisyan/VideoFrame

ho implementato in questo violino: http://jsfiddle.net/Ck6Zq/184/

var currentFrame = $('#currentFrame'); 
var video = VideoFrame({ 
    id : 'video', 
    frameRate: 29.97, 
    callback : function(frame) { 
     currentFrame.html(frame); 
    } 
}); 

$('#play-pause').click(function(){ 
    if(video.video.paused){ 
     video.video.play(); 
     video.listen('frame'); 
     $(this).html('Pause'); 
    }else{ 
     video.video.pause(); 
     video.stopListen(); 
     $(this).html('Play'); 
    } 
}); 

EDIT: aggiornato violino al nuovo video in modo che funziona di nuovo.

+0

A volte è disattivato 1 frame quando il video viene interrotto, ma probabilmente potrebbe essere risolto impostando nuovamente il numero frame html quando il video è in pausa/interrotto – 2pha

+0

Appare che quella libreria realizza il tracciamento framerate di impostazione di un timer che esegue il polling "due volte al framerate previsto" per i follower :) – rogerdpack

+0

'frameRate' deve corrispondere a quello effettivo del video. L'impostazione su 100 non influisce sulla velocità di riproduzione, tuttavia influisce sul conteggio dei fotogrammi. –

4

Il problema è che setTimeout non è realmente prevedibile, quindi non si può essere sicuri che esattamente una nuova cornice sia stata visualizzata ogni volta che si esegue la funzione. È necessario controllare lo currentTime del video ogni volta che si aggiorna la visualizzazione della cornice e moltiplicarla per la frequenza dei fotogrammi.

Ecco un esempio funzionante: http://jsbin.com/xarekice/1/edit È disattivato da un frame, ma sembra che all'inizio ci siano due frame contrassegnati con "000000".

alcune cose circa l'elemento video che si consiglia di essere a conoscenza di:

  1. Come ti sembra di aver scoperto, non c'è alcun modo affidabile per determinare il frame rate, in modo da avere a scoprirla altrove e hard-code. Ci sono alcune cose interessanti in corso con video metrics, ma sono non standard, non ampiamente supportate e, secondo la mia esperienza, completamente inefficaci nel determinare il frame rate effettivo.

  2. Il currentTime non è sempre esattamente rappresentativo di ciò che è sullo schermo. A volte è un po 'più avanti, soprattutto durante la ricerca (che è il motivo per cui nel mio JSBin, non aggiorno la cornice mentre stai cercando).

credo currentTime gli aggiornamenti su un thread separato dal sorteggio video reale, in modo che tipo di opere come essa la propria orologio che continua a andare avanti. È dove il video vuole essere, non necessariamente dove si trova. Quindi puoi avvicinarti, ma devi arrotondare i risultati del calcolo del fotogramma e una volta ogni tanto potresti essere spenta di un fotogramma.

+0

Grazie, è molto disponibile. – SayedTaqui