我有一个图像帧frames
的列表,我希望能够在Streamlit应用程序中显示:st.video(frames_converted)
.
挑战:
- Streamlit采用HTML5,视频需要H264编码
- 希望在内存中完成所有处理(而不是更常见的保存到临时文件
当前尝试:
## Convert frames to video for streamlit
height, width, layers = frames[0].shape
codec = cv.VideoWriter_fourcc(*'H264')
fps = 1
video = cv.VideoWriter("temp_video",codec, fps, (width,height)) # Initialize video object
for frame in frames:
video.write(frame)
cv.destroyAllWindows()
video.release()
st.video(video)
当前阻止程序
RuntimeError: Invalid binary data format: <class 'cv2.VideoWriter'>
1条答案
按热度按时间gev0vcfq1#
我们可以使用PyAV对“内存中”的MP4视频进行编码,如我的following answer中所述-视频存储在
BytesIO
对象中。我们可以将BytesIO对象作为输入传递给Streamlit(或者将BytesIO对象转换为字节数组并将该数组用作输入)。
代码示例:
我们不能使用
cv.VideoWriter
,因为它不支持内存视频编码(cv.VideoWriter
需要一个“真实文件”)。