Module moog_demos.gif_writer

Gif writer to record a video while playing the demo.

Note: If the enter key prints ^M instead of entering the input, run the following command: $ stty sane

Expand source code
"""Gif writer to record a video while playing the demo.

Note: If the enter key prints `^M` instead of entering the input, run the
following command:
$ stty sane
"""

import imageio
import logging
import numpy as np
import os
import sys


class GifWriter(object):
    """GifWriter class.
    
    Usage:
        my_gif_writer = GifWriter('path/to/a/file.gif')
        for image in my_video:
            my_gif_writer.add(image)
        my_gif_writer.close()
    """

    def __init__(self, gif_file, fps=5):
        """Constructor.

        Args:
            gif_file: String. Full path to gif filename. Should end in '.gif'.
            fps: Int. Frames per second for the gif.
        """

        # If the gif directory does not exist, ask the user if they want to
        # create it.
        gif_file = os.path.expanduser(gif_file)
        gif_dir = os.path.dirname(gif_file)
        if not os.path.exists(gif_dir):
            print('Directory {} does not exist'.format(gif_dir))
            should_create = input(
                'Would you like to create that directory?  (y/n)')
            if should_create == 'y':
                print('Creating directory {}'.format(gif_dir))
                os.makedirs(gif_dir)
            else:
                print('exiting')
                sys.exit()

        # If the gif directory already exists, ask the user if they want to
        # override it.
        if os.path.isfile(gif_file):
            print('File {} to write gif to already exists.'.format(gif_file))
            should_override = input(
                'Would you like to override the file there?  (y/n)')
            if should_override == 'y':
                print('Removing {}'.format(gif_file))
                os.remove(gif_file)
            else:
                print('exiting')
                sys.exit()
                
        self._gif_file = gif_file
        self._images = []
        self._fps = fps

    def add(self, image):
        self._images.append(image)

    def close(self):
        """Write the gif."""
        print('Writing gif with {} images to file {}'.format(
            len(self._images), self._gif_file))
        imageio.mimsave(self._gif_file, self._images, fps=self._fps)

Classes

class GifWriter (gif_file, fps=5)

GifWriter class.

Usage

my_gif_writer = GifWriter('path/to/a/file.gif') for image in my_video: my_gif_writer.add(image) my_gif_writer.close()

Constructor.

Args

gif_file
String. Full path to gif filename. Should end in '.gif'.
fps
Int. Frames per second for the gif.
Expand source code
class GifWriter(object):
    """GifWriter class.
    
    Usage:
        my_gif_writer = GifWriter('path/to/a/file.gif')
        for image in my_video:
            my_gif_writer.add(image)
        my_gif_writer.close()
    """

    def __init__(self, gif_file, fps=5):
        """Constructor.

        Args:
            gif_file: String. Full path to gif filename. Should end in '.gif'.
            fps: Int. Frames per second for the gif.
        """

        # If the gif directory does not exist, ask the user if they want to
        # create it.
        gif_file = os.path.expanduser(gif_file)
        gif_dir = os.path.dirname(gif_file)
        if not os.path.exists(gif_dir):
            print('Directory {} does not exist'.format(gif_dir))
            should_create = input(
                'Would you like to create that directory?  (y/n)')
            if should_create == 'y':
                print('Creating directory {}'.format(gif_dir))
                os.makedirs(gif_dir)
            else:
                print('exiting')
                sys.exit()

        # If the gif directory already exists, ask the user if they want to
        # override it.
        if os.path.isfile(gif_file):
            print('File {} to write gif to already exists.'.format(gif_file))
            should_override = input(
                'Would you like to override the file there?  (y/n)')
            if should_override == 'y':
                print('Removing {}'.format(gif_file))
                os.remove(gif_file)
            else:
                print('exiting')
                sys.exit()
                
        self._gif_file = gif_file
        self._images = []
        self._fps = fps

    def add(self, image):
        self._images.append(image)

    def close(self):
        """Write the gif."""
        print('Writing gif with {} images to file {}'.format(
            len(self._images), self._gif_file))
        imageio.mimsave(self._gif_file, self._images, fps=self._fps)

Methods

def add(self, image)
Expand source code
def add(self, image):
    self._images.append(image)
def close(self)

Write the gif.

Expand source code
def close(self):
    """Write the gif."""
    print('Writing gif with {} images to file {}'.format(
        len(self._images), self._gif_file))
    imageio.mimsave(self._gif_file, self._images, fps=self._fps)