使用imageio.mimwrite将numpy数组保存到io.BytesIO对象时,出现“ OSError:[Errno 32]管道损坏”

问题描述

我正在尝试使用imageio.mimwrite将一个numpy数组(帧数组)另存为视频。

这样的操作效果很好-

imageio.mimwrite('./temp4.mp4',frames,fps=fps,format='.mp4')

但是,当我尝试这样的事情时-

fo = io.BytesIO()
imageio.mimwrite(fo,format='.mp4')

OR

writer = imageio.get_writer(fo,format='.mp4')

for im in frames:
    writer.append_data(imageio.imread(im))
writer.close()

我收到以下错误-

---------------------------------------------------------------------------
brokenPipeError                           Traceback (most recent call last)
c:\program files (x86)\python38-32\lib\site-packages\imageio_ffmpeg\_io.py in write_frames(path,size,pix_fmt_in,pix_fmt_out,fps,quality,bitrate,codec,macro_block_size,ffmpeg_log_level,ffmpeg_timeout,input_params,output_params)
    478             try:
--> 479                 p.stdin.write(bb)
    480             except Exception as err:

brokenPipeError: [Errno 32] broken pipe

During handling of the above exception,another exception occurred:

OSError                                   Traceback (most recent call last)
<ipython-input-72-c6f1d6c45f5e> in <module>
      1 for im in ret3:
----> 2     writer.append_data(im)
      3 writer.close()

c:\program files (x86)\python38-32\lib\site-packages\imageio\core\format.py in append_data(self,im,Meta)
    500             im = asarray(im)
    501             # Call
--> 502             return self._append_data(im,total_Meta)
    503 
    504         def set_Meta_data(self,Meta):

c:\program files (x86)\python38-32\lib\site-packages\imageio\plugins\ffmpeg.py in _append_data(self,Meta)
    572 
    573             # Write. Yes,we can send the data in as a numpy array
--> 574             self._write_gen.send(im)
    575 
    576         def set_Meta_data(self,Meta):

c:\program files (x86)\python38-32\lib\site-packages\imageio_ffmpeg\_io.py in write_frames(path,output_params)
    484                     "OUTPUT:\n".format(err,cmd_str)
    485                 )
--> 486                 raise IOError(msg)
    487 
    488             nframes += 1

OSError: [Errno 32] broken pipe

FFMPEG COMMAND:
c:\program files (x86)\python38-32\lib\site-packages\imageio_ffmpeg\binaries\ffmpeg-win32-v4.2.2.exe -y -f rawvideo -vcodec rawvideo -s 256x256 -pix_fmt rgb24 -r 29.97 -i - -an -vcodec libx264 -pix_fmt yuv420p -crf 25 -v warning C:\Users\pramu\AppData\Local\Temp\imageio_fh1fqkgc

FFMPEG STDERR OUTPUT:

使用anaconda ffmpeg和非anaconda ffmpeg会出现相同的错误

是否可以解决错误

还有没有更好的方法将帧列表转换为.mp4或对其进行序列化以通过API发送?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)