Поскольку у меня нет вашего bytes
буфера, я просто создал видеофайл MKV с ffmpeg
, например так:
ffmpeg -i SomeVideo.avi -f matroska -vcodec libx264 video.mkv
Затем я установил imageio
с:
pip install imageio
Затем я загрузил все видео MKV в память, поэтому у меня есть что-то, что должно выглядеть примерно так же, как bytes
объект, который вы получаете, хранящийся в моей переменной content
:
import imageio
# Get bytes of MKV video
with open('video.mkv', 'rb') as file:
content = file.read()
Теперь я должен быть настроен и выглядеть так же, как вы.Просто для справки, первые несколько байтов content
выглядят так:
b'\x1aE\xdf\xa3\x01\x00\x00\x00\x00\x00\x00#B\x86\x81\x01B\xf7\x81\x01'
Итак, продолжим.
# Wrap the content in a BytesIO and get an ffmpeg reader to read it
vid = imageio.get_reader(BytesIO(content), 'ffmpeg')
Теперь я могу напечатать среднее значение для каждого кадра следующим образом:
for num, image in enumerate(vid.iter_data()):
print(image.mean())
Или получите метаданные и напечатайте их следующим образом:
metadata = vid.get_meta_data()
print(metadata)
{'plugin': 'ffmpeg',
'nframes': 750,
'ffmpeg_version': '4.1 built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)',
'fps': 25.0,
'source_size': (1280, 720),
'size': (1280, 720),
'duration': 30.0}
Ключевые слова : Python, видео, кадр, отдельный кадр, FFmpeg, imageio,один кадр, BytesIO, байты, MKV, Matroska.