Я работаю над проектом, который требует декодирования большого количества видео (скажем ~ 50, каждый с разрешением HD) и использует значения raw pixel как массивы numpy в процессе Python. Декодирование должно быть почти в режиме реального времени (скажем, 4-5 кадров в секунду). Каков хороший способ сделать это эффективно? Мы можем также ускорить декодирование графического процессора. Цель состоит в том, чтобы одновременно декодировать несколько видео, чтобы исходные значения пикселей могли быть обработаны процессом Python.Декодирование нескольких видеопотоков в адресном пространстве процесса Python
-1
A
ответ
2
Таким образом, один из подходов заключается в использовании некоторого декодера, который сопряжен с использованием метода python (no decode -> pipe -> python-process).
Есть две общие библиотеки попробовать:
Оба используют FFmpeg внутри для декодирования видео (очень эффективно). Для обоих это легко прочитать поток, а затем поместить пиксели в несколько массив numpy.
Я использовал MoviePy один раз чтобы это похоже видел here.
Конденсированного пример (не пробовал):
from moviepy.editor import VideoFileClip
filepath = "output.avi"
clip = VideoFileClip(filepath)
for f in clip.iter_frames(progress_bar=True):
np_array_frame = f
Смотрите также документацию по iter_frames.
Выдержка из документации:
Iterates over all the frames of the clip.
Returns each frame of the clip as a HxWxN np.array,
where N=1 for mask clips and N=3 for RGB clips.