Ho una pagina Web che, tra le altre cose, ha bisogno di estrarre un frame specifico da un video caricato dall'utente. L'utente cerca una particolare parte di un .mp4 nel player, quindi fa clic su un pulsante e una chiamata ajax viene sparata su uno script php che prende il .mp4 e l'ora esatta dal video e la usa per estrarre una cornice "miniatura".Il modo più veloce per estrarre un frame specifico da un video (PHP/ffmpeg/anything)
mia soluzione attuale sta usando il comando php exec
:
exec("ffmpeg -i $videoPath -ss $timeOffset -vframes 1 $jpgOutputPath");
... che funziona solo grande, tranne che è lento come la melassa. La mia ipotesi è che ffmpeg è un po 'troppo per il lavoro, e potrei essere in grado di fare meglio usando le librerie sottostanti o qualcosa del genere ... comunque non ho idea di come farlo.
Idealmente non voglio installare nulla che richieda un vero "processo di installazione" ... cioè, l'inserimento di un eseguibile nella cartella con la mia app web va bene, ma preferirei non dover effettivamente eseguire un programma di installazione. Inoltre, la soluzione dovrebbe essere in grado di girare su mac, linux e windows (sebbene linux sia la priorità assoluta).
Cosa posso fare per accelerare questo processo?
Grazie.
È possibile inserire il processo di generazione di miniature in una coda e consentire all'utente di accedere ad altre cose mentre è generato da un altro script che non è necessario attendere. – GordonM
prova a giocare con ffmpeg c: \ ffmpeg.exe -ic: \ video \ hello.mov - ss 10 - t 4 -f image2 - sameq -vcodec mjpeg img-% 03d.jpg Può essere molto difficile e è possibile ottenere grandi miglioramenti delle prestazioni se si utilizzano solo attributi diversi ... –
@DusanPlavak ['-sameq' non significa" stessa qualità "] (http://superuser.com/a/478550/110524) ed è stato rimosso da ffmpeg. Per l'output jpg usare '-qscale: v' con un intervallo effettivo di 2 (massima qualità) a 31 (qualità minima). – LordNeckbeard