Mam stronę internetową, która (między innymi) musi wyodrębnić określoną klatkę z filmu przesłanego przez użytkownika. Użytkownik szuka określonej części pliku .mp4 w odtwarzaczu, a następnie klika przycisk, a wywołanie ajax zostaje wywołane do skryptu php, który pobiera .mp4, i dokładny czas z filmu, i używa go do wyodrębnienia. ramka "miniatura".Najszybszy sposób wyodrębnienia określonej klatki z filmu wideo (PHP/ffmpeg/cokolwiek)
Moje obecne rozwiązanie jest przy użyciu polecenia php exec
:
exec("ffmpeg -i $videoPath -ss $timeOffset -vframes 1 $jpgOutputPath");
... który działa po prostu super, oprócz tego, że jest tak wolna, jak melasy. Domyślam się, że ffmpeg to trochę za dużo pracy, a być może będę w stanie to zrobić lepiej, wykorzystując podstawowe biblioteki lub coś takiego ... jednak nie mam pojęcia, jak to zrobić.
Idealnie nie chcę instalować niczego, co wymaga prawdziwego "procesu instalacji" ... tzn. Upuszczenie pliku wykonywalnego do folderu za pomocą mojej aplikacji internetowej jest w porządku, ale wolałbym nie mieć właściwie uruchom instalator. Rozwiązanie powinno także działać na Macu, Linuksie i Windowsie (choć priorytetem jest Linux).
Co mogę zrobić, aby przyspieszyć ten proces?
Dzięki.
Możesz umieścić zadanie generowania miniatur w kolejce i pozwolić użytkownikowi na dołączenie innych rzeczy, podczas gdy jest generowany przez inny skrypt, na który nie muszą czekać. – GordonM
dobrze spróbuj grać z ffmpeg c: \ ffmpeg.exe -ic: \ video \ hello.mov - ss 10 - t 4 -f zdjęcie2 - tenq -vcodec mjpeg img-% 03d.jpg To może być bardzo trudne i możliwe jest, że możesz uzyskać znaczną poprawę wydajności, jeśli po prostu użyjesz różnych atrybutów ... –
@DusanPlavak ['-sameq' nie oznacza" tej samej jakości "] (http://superuser.com/a/478550/110524) i został usunięty z ffmpeg. Dla wyjścia jpg użyj '-qscale: v' z efektywnym zakresem od 2 (najwyższa jakość) do 31 (najniższa jakość). – LordNeckbeard