Я использовал модуль ffmpeg-python
для преобразования видео в изображения. В частности, я использовал код, предоставленный официальным репозиторием git ffmpeg-python
, как показано ниже
out, _ = (
ffmpeg
.input(in_filename)
.filter('select', 'gte(n,{})'.format(frame_num))
.output('pipe:', vframes=1, format='image2', vcodec='mjpeg')
.run(capture_stdout=True)
)
im = np.frombuffer(out, 'uint8')
print(im.shape[0]/3/1080)
# 924.907098765432
Исходное видео имеет размер (1920, 1080) и pix_fmt 'yuv420p', но выходные данныеКод выше не 1920.
Я сам понял, что вывод ffmpeg.run () - это не массив декодированных изображений, а строка байтов, закодированная в формате JPEG. Чтобы восстановить изображение в массив numpy, просто используйте функцию cv2.imdecode (). Например,
im = cv2.imdecode(im, cv2.IMREAD_COLOR)
Однако я не могу использовать opencv
в моей системе Linux. Итак, мой вопрос сейчас заключается в том, могу ли я получить простой вывод из ffmpeg-python
напрямую, без необходимости конвертировать его с помощью opencv?