Ответ 1
Конечно, вы можете закодировать некоторые C/С++ и ссылку на -lav *, в основном создавая упрощенную версию ffmpeg только для извлечения кадров и, возможно, даже сделайте это как расширение php (также я бы не запускал его как тот же пользователь, не говоря уже о том же процессе). Но результат вряд ли будет более быстрым, потому что вы избежите некоторых накладных расходов и накладных расходов, но ваша вероятная проблема на самом деле является расшифровкой, которая все равно будет такой же.
Вместо этого вы должны сначала изучить использование ffmpeg в режиме быстрого поиска (или быстрый/точный гибридный режим). Их wiki утверждает о быстром поиске:
Параметр -ss необходимо указать перед -i:
ffmpeg -ss 00:03:00 -i Underworld.Awakening.avi -frames: v 1 out1.jpg
В этом примере будет создан один кадр изображения (out1.jpg) где-то вокруг третья минута с начала фильма. Вход будет анализируется с использованием ключевых кадров, что очень быстро. Недостатком является то, что это также завершит поиск на каком-то ключевом кадре, не обязательно в указанное время (00:03:00), поэтому поиск не будет таким точным как ожидалось.
Быстрый поиск менее точен, но чертовски много быстрее, так как ffmpeg на самом деле не нужно декодировать (большую часть) фильма во время поиска, в то время как быстрый/точный гибридный режим - хороший компромисс. Прочитайте страницу wiki для всех доступных опций.
Редактировать 14.06.10:
Как и в случае FFmpeg 2.1, при перекодировании с помощью ffmpeg (т.е. не потокового копирования), -ss теперь является точной даже при использовании в качестве опции ввода. Предыдущее поведение можно восстановить с помощью опции -noaccurate_seek. (источник)
Таким образом, с 2.1+ "гибридный" поиск больше не требуется для получения точных результатов, когда дело доходит до повторного кодирования (а сохранение в .jpeg
- это перекодирование). Достаточно сделать обычный быстрый поиск (-ss ... -i ...
) вместо медленного поиска (-i ... -ss ...
).