Я использую следующий код для сжатия видео и извлечения его кадров. Обратите внимание, что я не хочу сохранять полученное видео.
output_args = {
"vcodec": "libx265",
"crf": 24,
}
out, err = (
ffmpeg
.input(in_filename)
.output('pipe:', format='rawvideo', pix_fmt='rgb24',**output_args)
.run(capture_stdout=True)
)
frames = np.frombuffer(out, np.uint8).reshape(-1,width,height,3)
Когда я пытаюсь преобразовать выходной буфер в исходные размеры видео, я получаю следующую ошибку: cannot reshape array of size 436567 into shape (1920,1080,3)
Это ожидается, потому что полученное видео имеет меньшие размеры. Есть ли способ рассчитать количество кадров, ширину и высоту сжатого видео, чтобы изменить форму кадров из буфера?
Кроме того, если я сохраню сжатое видео вместо загрузки его кадров, и затем я загружаю видеокадры из сжатого видео, они будут иметь те же размеры, что и оригинал. Я подозреваю, что под капотом происходит какая-то интерполяция. Есть ли способ применить его без сохранения видео?