New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
image_stack_to_movie bug in srv1 #62
Comments
is ffmpeg installed on the server? |
@tacaswell I don't know. All I can say is that other kernals on srv1 do work. e.g. CSX on srv1 (legacy 2017-2 v0) |
and xref matplotlib/matplotlib#8760 |
I also get these warnings
|
The issue is that: a) we are hitting the system ffmpeg The best solution is to get your enviroment upgraded to a newer version of Matplotlib, the very dirty way to get this working which I will deny having told you: import matplotlib.animation as ma
ma.FFMpegWriter.isAvailable = lambda: True
ma.writers.register('ffmpeg')(ma.FFMpegWriter) |
During debugging process, we also find conflicts within several libraries in order to update matplotlib to newer version. So the current solution is to update packages at srv1 during beam shutdown time, will keep updated here. |
What happened with this? We have rolled on to a new version of the conda env and still have this issue, but maybe now it is a different issue? I find this now to be a problem for srv1 and 2 using (current), which I believe to be: matplotlib: '2.2.2' These systems have now been upgraded to debian 8. I am using %matplotlib widget with other plots okay. ---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-28-cba7760ebe81> in <module>()
----> 1 image_stack_to_movie(sub_images, vmin=np.percentile(sub_images[1],30), vmax=np.percentile(sub_images[1],90))
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/csxtools/ipynb/animation.py in image_stack_to_movie(images, frames, vmin, vmax, figsize, cmap, fps)
102 plt.close(anim._fig)
103 # return anim.to_html5_video()
--> 104 return HTML(_anim_to_html(anim, fps))
105
106
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/csxtools/ipynb/animation.py in _anim_to_html(anim, fps)
115 anim.save(f.name, fps=fps,
116 extra_args=['-vcodec', 'libx264',
--> 117 '-pix_fmt', 'yuv420p'])
118 video = open(f.name, "rb").read()
119 anim._encoded_video = base64.b64encode(video)
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/matplotlib/animation.py in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs)
1198 # TODO: See if turning off blit is really necessary
1199 anim._draw_next_frame(d, blit=False)
-> 1200 writer.grab_frame(**savefig_kwargs)
1201
1202 # Reconnect signal for first draw if necessary
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/contextlib.py in __exit__(self, type, value, traceback)
97 value = type()
98 try:
---> 99 self.gen.throw(type, value, traceback)
100 except StopIteration as exc:
101 # Suppress StopIteration *unless* it's the same exception that
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/matplotlib/animation.py in saving(self, fig, outfile, dpi, *args, **kwargs)
239 yield self
240 finally:
--> 241 self.finish()
242
243
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/matplotlib/animation.py in finish(self)
365 def finish(self):
366 '''Finish any processing for writing the movie.'''
--> 367 self.cleanup()
368
369 def grab_frame(self, **savefig_kwargs):
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/matplotlib/animation.py in cleanup(self)
403 def cleanup(self):
404 '''Clean-up and collect the process used to write the movie file.'''
--> 405 out, err = self._proc.communicate()
406 self._frame_sink().close()
407 _log.debug('MovieWriter -- Command stdout:\n%s', out)
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/subprocess.py in communicate(self, input, timeout)
841
842 try:
--> 843 stdout, stderr = self._communicate(input, endtime, timeout)
844 finally:
845 self._communication_started = True
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/subprocess.py in _communicate(self, input, endtime, orig_timeout)
1503 selector.register(self.stdin, selectors.EVENT_WRITE)
1504 if self.stdout:
-> 1505 selector.register(self.stdout, selectors.EVENT_READ)
1506 if self.stderr:
1507 selector.register(self.stderr, selectors.EVENT_READ)
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/selectors.py in register(self, fileobj, events, data)
349
350 def register(self, fileobj, events, data=None):
--> 351 key = super().register(fileobj, events, data)
352 poll_events = 0
353 if events & EVENT_READ:
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/selectors.py in register(self, fileobj, events, data)
235 raise ValueError("Invalid events: {!r}".format(events))
236
--> 237 key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data)
238
239 if key.fd in self._fd_to_key:
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/selectors.py in _fileobj_lookup(self, fileobj)
222 """
223 try:
--> 224 return _fileobj_to_fd(fileobj)
225 except ValueError:
226 # Do an exhaustive search.
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/selectors.py in _fileobj_to_fd(fileobj)
37 except (AttributeError, TypeError, ValueError):
38 raise ValueError("Invalid file object: "
---> 39 "{!r}".format(fileobj)) from None
40 if fd < 0:
41 raise ValueError("Invalid file descriptor: {}".format(fd))
ValueError: Invalid file object: <_io.BufferedReader name=68> |
note that srv3 gives a different traceback MovieWriter ffmpeg unavailable.
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/PIL/Image.py in save(self, fp, format, **params)
1914 try:
-> 1915 format = EXTENSION[ext]
1916 except KeyError:
KeyError: '.mp4'
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-16-cba7760ebe81> in <module>()
----> 1 image_stack_to_movie(sub_images, vmin=np.percentile(sub_images[1],30), vmax=np.percentile(sub_images[1],90))
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/csxtools/ipynb/animation.py in image_stack_to_movie(images, frames, vmin, vmax, figsize, cmap, fps)
102 plt.close(anim._fig)
103 # return anim.to_html5_video()
--> 104 return HTML(_anim_to_html(anim, fps))
105
106
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/csxtools/ipynb/animation.py in _anim_to_html(anim, fps)
115 anim.save(f.name, fps=fps,
116 extra_args=['-vcodec', 'libx264',
--> 117 '-pix_fmt', 'yuv420p'])
118 video = open(f.name, "rb").read()
119 anim._encoded_video = base64.b64encode(video)
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/matplotlib/animation.py in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs)
1198 # TODO: See if turning off blit is really necessary
1199 anim._draw_next_frame(d, blit=False)
-> 1200 writer.grab_frame(**savefig_kwargs)
1201
1202 # Reconnect signal for first draw if necessary
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/contextlib.py in __exit__(self, type, value, traceback)
86 if type is None:
87 try:
---> 88 next(self.gen)
89 except StopIteration:
90 return False
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/matplotlib/animation.py in saving(self, fig, outfile, dpi, *args, **kwargs)
239 yield self
240 finally:
--> 241 self.finish()
242
243
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/matplotlib/animation.py in finish(self)
610 self._frames[0].save(
611 self._outfile, save_all=True, append_images=self._frames[1:],
--> 612 duration=int(1000 / self.fps))
613
614
/opt/conda_envs/analysis-2018-2.1/lib/python3.6/site-packages/PIL/Image.py in save(self, fp, format, **params)
1915 format = EXTENSION[ext]
1916 except KeyError:
-> 1917 raise ValueError('unknown file extension: {}'.format(ext))
1918
1919 if format.upper() not in SAVE:
ValueError: unknown file extension: .mp4
|
came back to the problem with matplotlib at 2.2.2 ffmpeg was not installed on the computer and as Tom said, we cannot use the ffmpeg in python. This is the workaround that I found because the lines of code he provided still didn't work for me.
plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg' are we good with closing this for now? Or do we want to wait until there is a perfect solution? |
to download movie, use Classic Notebook View, under Help |
@ambarb verify for current matplotlib version |
@mpmdean this function works now magically at jupyter.nsls2.bnl.gov so I will close this issue. |
I think it's because |
The latest csxtools version on srv1 seems to have a bug in the image_stack_to_movie function.
The text was updated successfully, but these errors were encountered: