unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* debug moviepy with jgart
@ 2023-01-28  4:12 jgart
  2023-01-28  5:16 ` Wojtek Kosior via Development of GNU Guix and the GNU System distribution.
  2023-01-28  6:18 ` jgart
  0 siblings, 2 replies; 3+ messages in thread
From: jgart @ 2023-01-28  4:12 UTC (permalink / raw)
  To: guix-devel

Hi,

I'm trying to get the tests to pass for a Guix package that I am writing for moviepy.

Any thoughts on how to resolve the below failures?

I need to make some dir writeable?

```
starting phase `check'
============================= test session starts ==============================
platform linux -- Python 3.9.9, pytest-6.2.5, py-1.10.0, pluggy-0.13.1 -- /gnu/store/slsh0qjv5j68xda2bb6h8gsxwyi1j25a-python-wrapper-3.9.9/bin/python
cachedir: .pytest_cache
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/tmp/guix-build-python-moviepy-1.0.3.drv-0/source/.hypothesis/examples')
rootdir: /tmp/guix-build-python-moviepy-1.0.3.drv-0/source
plugins: hypothesis-6.0.2, cov-3.0.0
collecting ... collected 110 items

tests/test_AudioClips.py::test_audio_coreader PASSED                     [  0%]
tests/test_AudioClips.py::test_audioclip PASSED                          [  1%]
tests/test_AudioClips.py::test_audioclip_concat PASSED                   [  2%]
tests/test_AudioClips.py::test_audioclip_with_file_concat PASSED         [  3%]
tests/test_AudioClips.py::test_audiofileclip_concat PASSED               [  4%]
tests/test_ImageSequenceClip.py::test_1 FAILED                           [  5%]
tests/test_ImageSequenceClip.py::test_2 PASSED                           [  6%]
tests/test_PR.py::test_PR_306 PASSED                                     [  7%]
tests/test_PR.py::test_PR_339 FAILED                                     [  8%]
tests/test_PR.py::test_PR_373 PASSED                                     [  9%]
tests/test_PR.py::test_PR_424 PASSED                                     [ 10%]
tests/test_PR.py::test_PR_458 FAILED                                     [ 10%]
tests/test_PR.py::test_PR_515 PASSED                                     [ 11%]
tests/test_PR.py::test_PR_528 FAILED                                     [ 12%]
tests/test_PR.py::test_PR_529 FAILED                                     [ 13%]
tests/test_PR.py::test_PR_610 PASSED                                     [ 14%]
tests/test_TextClip.py::test_fontlist PASSED                             [ 15%]
tests/test_TextClip.py::test_duration FAILED                             [ 16%]
tests/test_TextClip.py::test_if_textclip_crashes_in_caption_mode FAILED  [ 17%]
tests/test_TextClip.py::test_if_textclip_crashes_in_label_mode FAILED    [ 18%]
tests/test_VideoClip.py::test_check_codec PASSED                         [ 19%]
tests/test_VideoClip.py::test_save_frame PASSED                          [ 20%]
tests/test_VideoClip.py::test_write_image_sequence FAILED                [ 20%]
tests/test_VideoClip.py::test_write_gif_imageio PASSED                   [ 21%]
tests/test_VideoClip.py::test_write_gif_ffmpeg PASSED                    [ 22%]
tests/test_VideoClip.py::test_write_gif_ffmpeg_tmpfiles PASSED           [ 23%]
tests/test_VideoClip.py::test_write_gif_ImageMagick PASSED               [ 24%]
tests/test_VideoClip.py::test_write_gif_ImageMagick_tmpfiles PASSED      [ 25%]
tests/test_VideoClip.py::test_subfx FAILED                               [ 26%]
tests/test_VideoClip.py::test_oncolor FAILED                             [ 27%]
tests/test_VideoClip.py::test_setaudio FAILED                            [ 28%]
tests/test_VideoClip.py::test_setaudio_with_audiofile FAILED             [ 29%]
tests/test_VideoClip.py::test_setopacity FAILED                          [ 30%]
tests/test_VideoClip.py::test_toimageclip FAILED                         [ 30%]
tests/test_VideoClip.py::test_withoutaudio PASSED                        [ 31%]
tests/test_VideoFileClip.py::test_setup FAILED                           [ 32%]
tests/test_VideoFileClip.py::test_ffmpeg_resizing PASSED                 [ 33%]
tests/test_VideoFileClip.py::test_shallow_copy PASSED                    [ 34%]
tests/test_Videos.py::test_afterimage FAILED                             [ 35%]
tests/test_compositing.py::test_clips_array PASSED                       [ 36%]
tests/test_compositing.py::test_clips_array_duration FAILED              [ 37%]
tests/test_examples.py::test_matplotlib SKIPPED (no mpl)                 [ 38%]
tests/test_ffmpeg_reader.py::test_ffmpeg_parse_infos PASSED              [ 39%]
tests/test_ffmpeg_reader.py::test_ffmpeg_parse_infos_for_i926 PASSED     [ 40%]
tests/test_fx.py::test_blackwhite FAILED                                 [ 40%]
tests/test_fx.py::test_colorx FAILED                                     [ 41%]
tests/test_fx.py::test_crop FAILED                                       [ 42%]
tests/test_fx.py::test_fadein FAILED                                     [ 43%]
tests/test_fx.py::test_fadeout FAILED                                    [ 44%]
tests/test_fx.py::test_invert_colors FAILED                              [ 45%]
tests/test_fx.py::test_loop PASSED                                       [ 46%]
tests/test_fx.py::test_lum_contrast FAILED                               [ 47%]
tests/test_fx.py::test_make_loopable FAILED                              [ 48%]
tests/test_fx.py::test_margin FAILED                                     [ 49%]
tests/test_fx.py::test_mask_and PASSED                                   [ 50%]
tests/test_fx.py::test_mask_color PASSED                                 [ 50%]
tests/test_fx.py::test_mask_or PASSED                                    [ 51%]
tests/test_fx.py::test_mirror_x FAILED                                   [ 52%]
tests/test_fx.py::test_mirror_y FAILED                                   [ 53%]
tests/test_fx.py::test_painting PASSED                                   [ 54%]
tests/test_fx.py::test_resize FAILED                                     [ 55%]
tests/test_fx.py::test_rotate FAILED                                     [ 56%]
tests/test_fx.py::test_scroll PASSED                                     [ 57%]
tests/test_fx.py::test_speedx FAILED                                     [ 58%]
tests/test_fx.py::test_supersample PASSED                                [ 59%]
tests/test_fx.py::test_time_mirror FAILED                                [ 60%]
tests/test_fx.py::test_time_symmetrize FAILED                            [ 60%]
tests/test_fx.py::test_normalize PASSED                                  [ 61%]
tests/test_issues.py::test_issue_145 PASSED                              [ 62%]
tests/test_issues.py::test_issue_190 PASSED                              [ 63%]
tests/test_issues.py::test_issue_285 PASSED                              [ 64%]
tests/test_issues.py::test_issue_334 FAILED                              [ 65%]
tests/test_issues.py::test_issue_354 PASSED                              [ 66%]
tests/test_issues.py::test_issue_359 PASSED                              [ 67%]
tests/test_issues.py::test_issue_407 PASSED                              [ 68%]
tests/test_issues.py::test_issue_416 PASSED                              [ 69%]
tests/test_issues.py::test_issue_417 PASSED                              [ 70%]
tests/test_issues.py::test_issue_467 PASSED                              [ 70%]
tests/test_issues.py::test_issue_470 FAILED                              [ 71%]
tests/test_issues.py::test_issue_246 PASSED                              [ 72%]
tests/test_issues.py::test_issue_547 FAILED                              [ 73%]
tests/test_issues.py::test_issue_636 PASSED                              [ 74%]
tests/test_issues.py::test_issue_655 PASSED                              [ 75%]
tests/test_misc.py::test_cuts1 PASSED                                    [ 76%]
tests/test_misc.py::test_subtitles FAILED                                [ 77%]
tests/test_misc.py::test_file_to_subtitles PASSED                        [ 78%]
tests/test_resourcerelease.py::test_release_of_file_via_close FAILED     [ 79%]
tests/test_resourcereleasedemo.py::test_failure_to_release_file FAILED   [ 80%]
tests/test_tools.py::test_find_extensions[libx264-mp4] PASSED            [ 80%]
tests/test_tools.py::test_find_extensions[libmpeg4-mp4] PASSED           [ 81%]
tests/test_tools.py::test_find_extensions[libtheora-ogv] PASSED          [ 82%]
tests/test_tools.py::test_find_extensions[libvpx-webm] PASSED            [ 83%]
tests/test_tools.py::test_find_extensions_not_found PASSED               [ 84%]
tests/test_tools.py::test_cvsecs[15.4-15.4] PASSED                       [ 85%]
tests/test_tools.py::test_cvsecs[given1-81.5] PASSED                     [ 86%]
tests/test_tools.py::test_cvsecs[given2-3662] PASSED                     [ 87%]
tests/test_tools.py::test_cvsecs[given3-3662] PASSED                     [ 88%]
tests/test_tools.py::test_cvsecs[01:01:33.5-3693.5] PASSED               [ 89%]
tests/test_tools.py::test_cvsecs[01:01:33.045-3693.045] PASSED           [ 90%]
tests/test_tools.py::test_cvsecs[01:01:33,5-3693.5] PASSED               [ 90%]
tests/test_tools.py::test_cvsecs[1:33-93.0] PASSED                       [ 91%]
tests/test_tools.py::test_cvsecs[33.4-33.4] PASSED                       [ 92%]
tests/test_tools.py::test_cvsecs[None-None] PASSED                       [ 93%]
tests/test_tools.py::test_is_string[hello straight string-True] PASSED   [ 94%]
tests/test_tools.py::test_is_string[hello raw string-True] PASSED        [ 95%]
tests/test_tools.py::test_is_string[42-False] PASSED                     [ 96%]
tests/test_tools.py::test_is_string[True-False] PASSED                   [ 97%]
tests/test_tools.py::test_is_string[hello bytes-False] PASSED            [ 98%]
tests/test_tools.py::test_sys_write_flush FAILED                         [ 99%]
tests/test_videotools.py::test_credits FAILED                            [100%]

=================================== FAILURES ===================================
____________________________________ test_1 ____________________________________

    def test_1():
        images=[]
        durations=[]
    
        for i in range(5):
            durations.append(i)
            images.append("media/python_logo.png")
            durations.append(i)
            images.append("media/python_logo_upside_down.png")
    
        with ImageSequenceClip(images, durations=durations) as clip:
            assert clip.duration == sum(durations)
>           clip.write_videofile(os.path.join(TMP_DIR, "ImageSequenceClip1.mp4"), fps=30)

tests/test_ImageSequenceClip.py:25: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd89ba160>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/ImageSequenceClip1.mp4'
size = (260, 77), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/ImageSequenceClip1.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/ImageSequenceClip1.mp4

_________________________________ test_PR_339 __________________________________

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd87fcfd0>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpripxn2wv.txt'
filename = None, size = ('640', '480'), color = 'white'
bg_color = 'transparent', fontsize = 25, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'caption', kerning = None
align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpq8n3akh7.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpripxn2wv.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
>           subprocess_call(cmd, logger=None)

moviepy/video/VideoClip.py:1137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cmd = ['convert', '-background', 'transparent', '-fill', 'white', '-font', ...]
logger = <proglog.proglog.MuteProgressBarLogger object at 0x7fffd87fcee0>
errorprint = True

    def subprocess_call(cmd, logger='bar', errorprint=True):
        """ Executes the given subprocess command.
    
        Set logger to None or a custom Proglog logger to avoid printings.
        """
        logger = proglog.default_bar_logger(logger)
        logger(message='Moviepy - Running:\n>>> "+ " ".join(cmd)')
    
        popen_params = {"stdout": DEVNULL,
                        "stderr": sp.PIPE,
                        "stdin": DEVNULL}
    
        if os.name == "nt":
            popen_params["creationflags"] = 0x08000000
    
        proc = sp.Popen(cmd, **popen_params)
    
        out, err = proc.communicate() # proc.wait()
        proc.stderr.close()
    
        if proc.returncode:
            if errorprint:
                logger(message='Moviepy - Command returned an error')
>           raise IOError(err.decode('utf8'))
E           OSError: Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpq8n3akh7.png' @ error/convert.c/ConvertImageCommand/3229.

moviepy/tools.py:54: OSError

During handling of the above exception, another exception occurred:

    def test_PR_339():
        # In caption mode.
>       TextClip(txt='foo', color='white', font=FONT, size=(640, 480),
                 method='caption', align='center', fontsize=25).close()

tests/test_PR.py:29: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd87fcfd0>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpripxn2wv.txt'
filename = None, size = ('640', '480'), color = 'white'
bg_color = 'transparent', fontsize = 25, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'caption', kerning = None
align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpq8n3akh7.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpripxn2wv.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
            subprocess_call(cmd, logger=None)
        except (IOError, OSError) as err:
            error = ("MoviePy Error: creation of %s failed because of the "
                     "following error:\n\n%s.\n\n." % (filename, str(err))
                     + ("This error can be due to the fact that ImageMagick "
                        "is not installed on your computer, or (for Windows "
                        "users) that you didn't specify the path to the "
                        "ImageMagick binary in file conf.py, or that the path "
                        "you specified is incorrect"))
>           raise IOError(error)
E           OSError: MoviePy Error: creation of None failed because of the following error:
E           
E           Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpq8n3akh7.png' @ error/convert.c/ConvertImageCommand/3229.
E           .
E           
E           .This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

moviepy/video/VideoClip.py:1146: OSError
_________________________________ test_PR_458 __________________________________

    def test_PR_458():
        clip = ColorClip([1000, 600], color=(60, 60, 60), duration=2)
>       clip.write_videofile(os.path.join(TMP_DIR, "test.mp4"),
                             logger=None, fps=30)

tests/test_PR.py:83: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd8810970>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/test.mp4'
size = (1000, 600), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test.mp4

_________________________________ test_PR_528 __________________________________

    def test_PR_528():
        with ImageClip("media/vacation_2017.jpg") as clip:
            new_clip = scroll(clip, w=1000, x_speed=50)
            new_clip = new_clip.set_duration(1)
            new_clip.fps = 24
>           new_clip.write_videofile(os.path.join(TMP_DIR, "pano.mp4"))

tests/test_PR.py:100: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd8825700>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/pano.mp4'
size = (1000, 1440), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/pano.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/pano.mp4

_________________________________ test_PR_529 __________________________________

    def test_PR_529():
        with VideoFileClip("media/fire2.mp4") as video_clip:
>           assert video_clip.rotation == 180
E           assert 0 == 180
E             +0
E             -180

tests/test_PR.py:105: AssertionError
________________________________ test_duration _________________________________

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd880d340>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmph8fz26j0.txt'
filename = None, size = ('1280', '720'), color = 'white'
bg_color = 'transparent', fontsize = None, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'label', kerning = None
align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjw_2n7ak.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmph8fz26j0.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
>           subprocess_call(cmd, logger=None)

moviepy/video/VideoClip.py:1137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cmd = ['convert', '-background', 'transparent', '-fill', 'white', '-font', ...]
logger = <proglog.proglog.MuteProgressBarLogger object at 0x7fffd880db80>
errorprint = True

    def subprocess_call(cmd, logger='bar', errorprint=True):
        """ Executes the given subprocess command.
    
        Set logger to None or a custom Proglog logger to avoid printings.
        """
        logger = proglog.default_bar_logger(logger)
        logger(message='Moviepy - Running:\n>>> "+ " ".join(cmd)')
    
        popen_params = {"stdout": DEVNULL,
                        "stderr": sp.PIPE,
                        "stdin": DEVNULL}
    
        if os.name == "nt":
            popen_params["creationflags"] = 0x08000000
    
        proc = sp.Popen(cmd, **popen_params)
    
        out, err = proc.communicate() # proc.wait()
        proc.stderr.close()
    
        if proc.returncode:
            if errorprint:
                logger(message='Moviepy - Command returned an error')
>           raise IOError(err.decode('utf8'))
E           OSError: Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjw_2n7ak.png' @ error/convert.c/ConvertImageCommand/3229.

moviepy/tools.py:54: OSError

During handling of the above exception, another exception occurred:

    def test_duration():
>       clip = TextClip('hello world', size=(1280,720), color='white', font=FONT)

tests/test_TextClip.py:17: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd880d340>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmph8fz26j0.txt'
filename = None, size = ('1280', '720'), color = 'white'
bg_color = 'transparent', fontsize = None, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'label', kerning = None
align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjw_2n7ak.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmph8fz26j0.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
            subprocess_call(cmd, logger=None)
        except (IOError, OSError) as err:
            error = ("MoviePy Error: creation of %s failed because of the "
                     "following error:\n\n%s.\n\n." % (filename, str(err))
                     + ("This error can be due to the fact that ImageMagick "
                        "is not installed on your computer, or (for Windows "
                        "users) that you didn't specify the path to the "
                        "ImageMagick binary in file conf.py, or that the path "
                        "you specified is incorrect"))
>           raise IOError(error)
E           OSError: MoviePy Error: creation of None failed because of the following error:
E           
E           Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjw_2n7ak.png' @ error/convert.c/ConvertImageCommand/3229.
E           .
E           
E           .This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

moviepy/video/VideoClip.py:1146: OSError
___________________ test_if_textclip_crashes_in_caption_mode ___________________

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd8492730>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpc6fdb_w4.txt'
filename = None, size = ('640', '480'), color = 'white'
bg_color = 'transparent', fontsize = 25, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'caption', kerning = None
align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp0grf_n_r.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpc6fdb_w4.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
>           subprocess_call(cmd, logger=None)

moviepy/video/VideoClip.py:1137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cmd = ['convert', '-background', 'transparent', '-fill', 'white', '-font', ...]
logger = <proglog.proglog.MuteProgressBarLogger object at 0x7fffd8492760>
errorprint = True

    def subprocess_call(cmd, logger='bar', errorprint=True):
        """ Executes the given subprocess command.
    
        Set logger to None or a custom Proglog logger to avoid printings.
        """
        logger = proglog.default_bar_logger(logger)
        logger(message='Moviepy - Running:\n>>> "+ " ".join(cmd)')
    
        popen_params = {"stdout": DEVNULL,
                        "stderr": sp.PIPE,
                        "stdin": DEVNULL}
    
        if os.name == "nt":
            popen_params["creationflags"] = 0x08000000
    
        proc = sp.Popen(cmd, **popen_params)
    
        out, err = proc.communicate() # proc.wait()
        proc.stderr.close()
    
        if proc.returncode:
            if errorprint:
                logger(message='Moviepy - Command returned an error')
>           raise IOError(err.decode('utf8'))
E           OSError: Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp0grf_n_r.png' @ error/convert.c/ConvertImageCommand/3229.

moviepy/tools.py:54: OSError

During handling of the above exception, another exception occurred:

    def test_if_textclip_crashes_in_caption_mode():
>       TextClip(txt='foo', color='white', size=(640, 480), method='caption',
                 align='center', fontsize=25, font=FONT).close()

tests/test_TextClip.py:30: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd8492730>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpc6fdb_w4.txt'
filename = None, size = ('640', '480'), color = 'white'
bg_color = 'transparent', fontsize = 25, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'caption', kerning = None
align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp0grf_n_r.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpc6fdb_w4.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
            subprocess_call(cmd, logger=None)
        except (IOError, OSError) as err:
            error = ("MoviePy Error: creation of %s failed because of the "
                     "following error:\n\n%s.\n\n." % (filename, str(err))
                     + ("This error can be due to the fact that ImageMagick "
                        "is not installed on your computer, or (for Windows "
                        "users) that you didn't specify the path to the "
                        "ImageMagick binary in file conf.py, or that the path "
                        "you specified is incorrect"))
>           raise IOError(error)
E           OSError: MoviePy Error: creation of None failed because of the following error:
E           
E           Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp0grf_n_r.png' @ error/convert.c/ConvertImageCommand/3229.
E           .
E           
E           .This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

moviepy/video/VideoClip.py:1146: OSError
____________________ test_if_textclip_crashes_in_label_mode ____________________

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd88259d0>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp3x1bwzic.txt'
filename = None, size = None, color = 'black', bg_color = 'transparent'
fontsize = None, font = 'Liberation-Mono', stroke_color = None, stroke_width = 1
method = 'label', kerning = None, align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpx7deezx3.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp3x1bwzic.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
>           subprocess_call(cmd, logger=None)

moviepy/video/VideoClip.py:1137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cmd = ['convert', '-background', 'transparent', '-fill', 'black', '-font', ...]
logger = <proglog.proglog.MuteProgressBarLogger object at 0x7fffd8825910>
errorprint = True

    def subprocess_call(cmd, logger='bar', errorprint=True):
        """ Executes the given subprocess command.
    
        Set logger to None or a custom Proglog logger to avoid printings.
        """
        logger = proglog.default_bar_logger(logger)
        logger(message='Moviepy - Running:\n>>> "+ " ".join(cmd)')
    
        popen_params = {"stdout": DEVNULL,
                        "stderr": sp.PIPE,
                        "stdin": DEVNULL}
    
        if os.name == "nt":
            popen_params["creationflags"] = 0x08000000
    
        proc = sp.Popen(cmd, **popen_params)
    
        out, err = proc.communicate() # proc.wait()
        proc.stderr.close()
    
        if proc.returncode:
            if errorprint:
                logger(message='Moviepy - Command returned an error')
>           raise IOError(err.decode('utf8'))
E           OSError: Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpx7deezx3.png' @ error/convert.c/ConvertImageCommand/3229.

moviepy/tools.py:54: OSError

During handling of the above exception, another exception occurred:

    def test_if_textclip_crashes_in_label_mode():
>       TextClip(txt='foo', method='label', font=FONT).close()

tests/test_TextClip.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd88259d0>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp3x1bwzic.txt'
filename = None, size = None, color = 'black', bg_color = 'transparent'
fontsize = None, font = 'Liberation-Mono', stroke_color = None, stroke_width = 1
method = 'label', kerning = None, align = 'center', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpx7deezx3.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmp3x1bwzic.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
            subprocess_call(cmd, logger=None)
        except (IOError, OSError) as err:
            error = ("MoviePy Error: creation of %s failed because of the "
                     "following error:\n\n%s.\n\n." % (filename, str(err))
                     + ("This error can be due to the fact that ImageMagick "
                        "is not installed on your computer, or (for Windows "
                        "users) that you didn't specify the path to the "
                        "ImageMagick binary in file conf.py, or that the path "
                        "you specified is incorrect"))
>           raise IOError(error)
E           OSError: MoviePy Error: creation of None failed because of the following error:
E           
E           Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpx7deezx3.png' @ error/convert.c/ConvertImageCommand/3229.
E           .
E           
E           .This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

moviepy/video/VideoClip.py:1146: OSError
__________________________ test_write_image_sequence ___________________________

    def test_write_image_sequence():
        clip = VideoFileClip("media/big_buck_bunny_432_433.webm").subclip(0.2, 0.5)
>       locations = clip.write_images_sequence(
                os.path.join(TMP_DIR, "frame%02d.png"))

tests/test_VideoClip.py:38: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.VideoFileClip.VideoFileClip object at 0x7fffd87de0d0>
nameformat = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/frame%02d.png'
fps = None, verbose = True, withmask = True
logger = <proglog.proglog.TqdmProgressBarLogger object at 0x7fffd87de310>

    @requires_duration
    @use_clip_fps_by_default
    @convert_masks_to_RGB
    def write_images_sequence(self, nameformat, fps=None, verbose=True,
                              withmask=True, logger='bar'):
        """ Writes the videoclip to a sequence of image files.
    
        Parameters
        -----------
    
        nameformat
          A filename specifying the numerotation format and extension
          of the pictures. For instance "frame%03d.png" for filenames
          indexed with 3 digits and PNG format. Also possible:
          "some_folder/frame%04d.jpeg", etc.
    
        fps
          Number of frames per second to consider when writing the
          clip. If not specified, the clip's ``fps`` attribute will
          be used if it has one.
    
        withmask
          will save the clip's mask (if any) as an alpha canal (PNGs only).
    
        verbose
          Boolean indicating whether to print information.
    
        logger
          Either 'bar' (progress bar) or None or any Proglog logger.
    
    
        Returns
        --------
    
        names_list
          A list of all the files generated.
    
        Notes
        ------
    
        The resulting image sequence can be read using e.g. the class
        ``ImageSequenceClip``.
    
        """
        logger = proglog.default_bar_logger(logger)
        logger(message='Moviepy - Writing frames %s.' % nameformat)
    
>       tt = np.arange(0, self.duration, 1.0 / fps)
E       TypeError: unsupported operand type(s) for /: 'float' and 'NoneType'

moviepy/video/VideoClip.py:361: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Writing frames /tmp/guix-build-python-moviepy-1.0.3.drv-0/frame%02d.png.
__________________________________ test_subfx __________________________________

    def test_subfx():
        clip = VideoFileClip("media/big_buck_bunny_0_30.webm").subclip(0, 1)
        transform = lambda c: speedx(c, 0.5)
        new_clip = clip.subfx(transform, 0.5, 0.8)
        location = os.path.join(TMP_DIR, "subfx.mp4")
>       new_clip.write_videofile(location)

tests/test_VideoClip.py:91: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd8f261f0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/subfx.mp4'
size = (1280, 720), fps = None, codec = 'libx264'
audiofile = 'subfxTEMP_MPY_wvf_snd.mp3', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/subfx.mp4.
MoviePy - Writing audio in subfxTEMP_MPY_wvf_snd.mp3
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/subfx.mp4

----------------------------- Captured stderr call -----------------------------
                                                                     
_________________________________ test_oncolor _________________________________

    def test_oncolor():
        # It doesn't need to be a ColorClip
        clip = ColorClip(size=(100, 60), color=(255, 0, 0), duration=0.5)
        on_color_clip = clip.on_color(size=(200, 160), color=(0, 0, 255))
        location = os.path.join(TMP_DIR, "oncolor.mp4")
>       on_color_clip.write_videofile(location, fps=24)

tests/test_VideoClip.py:101: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd87fcfa0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/oncolor.mp4'
size = (200, 160), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/oncolor.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/oncolor.mp4

________________________________ test_setaudio _________________________________

    def test_setaudio():
        clip = ColorClip(size=(100, 60), color=(255, 0, 0), duration=0.5)
        make_frame_440 = lambda t: [sin(440 * 2 * pi * t)]
        audio = AudioClip(make_frame_440, duration=0.5)
        audio.fps = 44100
        clip = clip.set_audio(audio)
        location = os.path.join(TMP_DIR, "setaudio.mp4")
>       clip.write_videofile(location, fps=24)

tests/test_VideoClip.py:113: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd847fdf0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/setaudio.mp4'
size = (100, 60), fps = None, codec = 'libx264'
audiofile = 'setaudioTEMP_MPY_wvf_snd.mp3', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/setaudio.mp4.
MoviePy - Writing audio in setaudioTEMP_MPY_wvf_snd.mp3
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/setaudio.mp4

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________ test_setaudio_with_audiofile _________________________

    def test_setaudio_with_audiofile():
        clip = ColorClip(size=(100, 60), color=(255, 0, 0), duration=0.5)
        audio = AudioFileClip("media/crunching.mp3").subclip(0, 0.5)
        clip = clip.set_audio(audio)
        location = os.path.join(TMP_DIR, "setaudiofile.mp4")
>       clip.write_videofile(location, fps=24)

tests/test_VideoClip.py:123: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd8488fa0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/setaudiofile.mp4'
size = (100, 60), fps = None, codec = 'libx264'
audiofile = 'setaudiofileTEMP_MPY_wvf_snd.mp3', preset = 'medium'
bitrate = None, withmask = False, logfile = -1, threads = None
ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/setaudiofile.mp4.
MoviePy - Writing audio in setaudiofileTEMP_MPY_wvf_snd.mp3
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/setaudiofile.mp4

----------------------------- Captured stderr call -----------------------------
                                                                   
_______________________________ test_setopacity ________________________________

    def test_setopacity():
        clip = VideoFileClip("media/big_buck_bunny_432_433.webm").subclip(0.2, 0.6)
        clip = clip.set_opacity(0.5)
        clip = clip.on_color(size=(1000, 1000), color=(0, 0, 255), col_opacity=0.8)
        location = os.path.join(TMP_DIR, "setopacity.mp4")
>       clip.write_videofile(location)

tests/test_VideoClip.py:133: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd876bfa0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/setopacity.mp4'
size = (1000, 1000), fps = None, codec = 'libx264'
audiofile = 'setopacityTEMP_MPY_wvf_snd.mp3', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/setopacity.mp4.
MoviePy - Writing audio in setopacityTEMP_MPY_wvf_snd.mp3
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/setopacity.mp4

----------------------------- Captured stderr call -----------------------------
                                                       
_______________________________ test_toimageclip _______________________________

    def test_toimageclip():
        clip = VideoFileClip("media/big_buck_bunny_432_433.webm").subclip(0.2, 0.6)
        clip = clip.to_ImageClip(t=0.1, duration=0.4)
        location = os.path.join(TMP_DIR, "toimageclip.mp4")
>       clip.write_videofile(location, fps=24)

tests/test_VideoClip.py:142: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd878c5b0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/toimageclip.mp4'
size = (1280, 720), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/toimageclip.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/toimageclip.mp4

__________________________________ test_setup __________________________________

    def test_setup():
        """Test VideoFileClip setup."""
        red = ColorClip((256,200), color=(255,0,0))
        green = ColorClip((256,200), color=(0,255,0))
        blue = ColorClip((256,200), color=(0,0,255))
    
        red.fps = green.fps = blue.fps = 10
        with clips_array([[red, green, blue]]).set_duration(5) as video:
>           video.write_videofile(os.path.join(TMP_DIR, "test.mp4"))

tests/test_VideoFileClip.py:24: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd8586c10>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/test.mp4'
size = (768, 200), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test.mp4

_______________________________ test_afterimage ________________________________

    def test_afterimage():
        ai = ImageClip("media/afterimage.png")
        masked_clip = mask_color(ai, color=[0,255,1]) # for green
        some_background_clip = ColorClip((800,600), color=(255,255,255))
        final_clip = CompositeVideoClip([some_background_clip, masked_clip],
                                        use_bgclip=True)
        final_clip.duration = 5
>       final_clip.write_videofile(
        os.path.join(TMP_DIR, "afterimage.mp4"), fps=30)

tests/test_Videos.py:22: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd881a730>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/afterimage.mp4'
size = (800, 600), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/afterimage.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/afterimage.mp4

__________________________ test_clips_array_duration ___________________________

    def test_clips_array_duration():
        # NOTE: anyone knows what behaviour this sets ? If yes please replace
        # this comment.
        red = ColorClip((256, 200), color=(255, 0, 0))
        green = ColorClip((256, 200), color=(0, 255, 0))
        blue = ColorClip((256, 200), color=(0, 0, 255))
    
        video = clips_array([[red, green, blue]]).set_duration(5)
        with pytest.raises(AttributeError):  # fps not set
>           video.write_videofile(join(TMP_DIR, "test_clips_array.mp4"))

tests/test_compositing.py:36: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd86dd7f0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/test_clips_array.mp4'
size = (768, 200), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test_clips_array.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test_clips_array.mp4

_______________________________ test_blackwhite ________________________________

    def test_blackwhite():
        clip = get_test_video()
        clip1 = blackwhite(clip)
>       clip1.write_videofile(os.path.join(TMP_DIR, "blackwhite1.webm"))

tests/test_fx.py:39: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd87de610>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/blackwhite1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'blackwhite1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/blackwhite1.webm.
MoviePy - Writing audio in blackwhite1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/blackwhite1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________________ test_colorx __________________________________

    def test_colorx():
        clip = get_test_video()
        clip1 = colorx(clip, 2)
>       clip1.write_videofile(os.path.join(TMP_DIR, "colorx1.webm"))

tests/test_fx.py:52: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd9280b50>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/colorx1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'colorx1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/colorx1.webm.
MoviePy - Writing audio in colorx1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/colorx1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
__________________________________ test_crop ___________________________________

    def test_crop():
        clip = get_test_video()
    
        clip1 = crop(clip)  # ie, no cropping (just tests all default values)
>       clip1.write_videofile(os.path.join(TMP_DIR, "crop1.webm"))

tests/test_fx.py:59: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd8593100>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/crop1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'crop1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/crop1.webm.
MoviePy - Writing audio in crop1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/crop1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________________ test_fadein __________________________________

    def test_fadein():
        clip = get_test_video()
        clip1 = fadein(clip, 0.5)
>       clip1.write_videofile(os.path.join(TMP_DIR, "fadein1.webm"))

tests/test_fx.py:80: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd86f69d0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/fadein1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'fadein1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/fadein1.webm.
MoviePy - Writing audio in fadein1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/fadein1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________________ test_fadeout _________________________________

    def test_fadeout():
        clip = get_test_video()
        clip1 = fadeout(clip, 0.5)
>       clip1.write_videofile(os.path.join(TMP_DIR, "fadeout1.webm"))

tests/test_fx.py:87: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd875a070>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/fadeout1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'fadeout1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/fadeout1.webm.
MoviePy - Writing audio in fadeout1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/fadeout1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
______________________________ test_invert_colors ______________________________

    def test_invert_colors():
        clip = get_test_video()
        clip1 = invert_colors(clip)
>       clip1.write_videofile(os.path.join(TMP_DIR, "invert_colors1.webm"))

tests/test_fx.py:94: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd858b160>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/invert_colors1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'invert_colors1TEMP_MPY_wvf_snd.ogg', preset = 'medium'
bitrate = None, withmask = False, logfile = -1, threads = None
ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/invert_colors1.webm.
MoviePy - Writing audio in invert_colors1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/invert_colors1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
______________________________ test_lum_contrast _______________________________

    def test_lum_contrast():
        clip = get_test_video()
        clip1 = lum_contrast(clip)
>       clip1.write_videofile(os.path.join(TMP_DIR, "lum_contrast1.webm"))

tests/test_fx.py:117: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd86c0e80>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/lum_contrast1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'lum_contrast1TEMP_MPY_wvf_snd.ogg', preset = 'medium'
bitrate = None, withmask = False, logfile = -1, threads = None
ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/lum_contrast1.webm.
MoviePy - Writing audio in lum_contrast1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/lum_contrast1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
______________________________ test_make_loopable ______________________________

    def test_make_loopable():
        clip = get_test_video()
        clip1 = make_loopable(clip, 0.4)
>       clip1.write_videofile(os.path.join(TMP_DIR, "make_loopable1.webm"))

tests/test_fx.py:128: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd867cee0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/make_loopable1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'make_loopable1TEMP_MPY_wvf_snd.ogg', preset = 'medium'
bitrate = None, withmask = False, logfile = -1, threads = None
ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/make_loopable1.webm.
MoviePy - Writing audio in make_loopable1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/make_loopable1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________________ test_margin __________________________________

    def test_margin():
        clip = get_test_video()
        clip1 = margin(clip)  # does the default values change anything?
>       clip1.write_videofile(os.path.join(TMP_DIR, "margin1.webm"))

tests/test_fx.py:135: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd86a6bb0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/margin1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'margin1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/margin1.webm.
MoviePy - Writing audio in margin1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/margin1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
________________________________ test_mirror_x _________________________________

    def test_mirror_x():
        clip = get_test_video()
        clip1 = mirror_x(clip)
>       clip1.write_videofile(os.path.join(TMP_DIR, "mirror_x1.webm"))

tests/test_fx.py:160: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd87de6d0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/mirror_x1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'mirror_x1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/mirror_x1.webm.
MoviePy - Writing audio in mirror_x1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/mirror_x1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
________________________________ test_mirror_y _________________________________

    def test_mirror_y():
        clip = get_test_video()
        clip1 = mirror_y(clip)
>       clip1.write_videofile(os.path.join(TMP_DIR, "mirror_y1.webm"))

tests/test_fx.py:167: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd872f1f0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/mirror_y1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'mirror_y1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/mirror_y1.webm.
MoviePy - Writing audio in mirror_y1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/mirror_y1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________________ test_resize __________________________________

    def test_resize():
        clip = get_test_video()
    
        clip1 = resize(clip, (460, 720))  # New resolution: (460,720)
        assert clip1.size == (460, 720)
>       clip1.write_videofile(os.path.join(TMP_DIR, "resize1.webm"))

tests/test_fx.py:180: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7ffff6ade670>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/resize1.webm'
size = (460, 720), fps = None, codec = 'libvpx'
audiofile = 'resize1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/resize1.webm.
MoviePy - Writing audio in resize1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/resize1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________________ test_rotate __________________________________

    def test_rotate():
        clip = get_test_video()
    
        clip1 = rotate(clip, 90)  # rotate 90 degrees
        assert clip1.size == (clip.size[1], clip.size[0])
>       clip1.write_videofile(os.path.join(TMP_DIR, "rotate1.webm"))

tests/test_fx.py:202: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd87fc6d0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/rotate1.webm'
size = (720, 1280), fps = None, codec = 'libvpx'
audiofile = 'rotate1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/rotate1.webm.
MoviePy - Writing audio in rotate1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/rotate1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_________________________________ test_speedx __________________________________

    def test_speedx():
        clip = get_test_video()
    
        clip1 = speedx(clip, factor=0.5)  # 1/2 speed
        assert clip1.duration == 2
>       clip1.write_videofile(os.path.join(TMP_DIR, "speedx1.webm"))

tests/test_fx.py:227: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd8794d30>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/speedx1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'speedx1TEMP_MPY_wvf_snd.ogg', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/speedx1.webm.
MoviePy - Writing audio in speedx1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/speedx1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_______________________________ test_time_mirror _______________________________

    def test_time_mirror():
        clip = get_test_video()
    
        clip1 = time_mirror(clip)
        assert clip1.duration == clip.duration
>       clip1.write_videofile(os.path.join(TMP_DIR, "time_mirror1.webm"))

tests/test_fx.py:248: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd867f100>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/time_mirror1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'time_mirror1TEMP_MPY_wvf_snd.ogg', preset = 'medium'
bitrate = None, withmask = False, logfile = -1, threads = None
ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/time_mirror1.webm.
MoviePy - Writing audio in time_mirror1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/time_mirror1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
_____________________________ test_time_symmetrize _____________________________

    def test_time_symmetrize():
        clip = get_test_video()
    
        clip1 = time_symmetrize(clip)
>       clip1.write_videofile(os.path.join(TMP_DIR, "time_symmetrize1.webm"))

tests/test_fx.py:256: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd86f0df0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/time_symmetrize1.webm'
size = (1280, 720), fps = None, codec = 'libvpx'
audiofile = 'time_symmetrize1TEMP_MPY_wvf_snd.ogg', preset = 'medium'
bitrate = None, withmask = False, logfile = -1, threads = None
ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/time_symmetrize1.webm.
MoviePy - Writing audio in time_symmetrize1TEMP_MPY_wvf_snd.ogg
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/time_symmetrize1.webm

----------------------------- Captured stderr call -----------------------------
                                                       
________________________________ test_issue_334 ________________________________

    def test_issue_334():
       # NOTE: this is horrible. Any simpler version ?
        last_move = None
        last_move1 = None
    
        lis = [(0.0, 113, 167, 47), (0.32, 138, 159, 47), (0.44, 152, 144, 47),
               (0.48, 193, 148, 47), (0.6, 193, 148, 47), (0.76, 205, 138, 55),
               (0.88, 204, 121, 63), (0.92, 190, 31, 127), (1.2, 183, 59, 127),
               (1.4, 137, 22, 127), (1.52, 137, 22, 127), (1.72, 129, 67, 127),
               (1.88, 123, 69, 127), (2.04, 131, 123, 63), (2.24, 130, 148, 63),
               (2.48, 130, 148, 63), (2.8, 138, 180, 63), (3.0, 138, 180, 63),
               (3.2, 146, 192, 63), (3.28, 105, 91, 151), (3.44, 105, 91, 151),
               (3.72, 11, 48, 151), (3.96, 5, 78, 151), (4.32, 4, 134, 1),
               (4.6, 149, 184, 48), (4.8, 145, 188, 48), (5.0, 154, 217, 48),
               (5.08, 163, 199, 48), (5.2, 163, 199, 48), (5.32, 164, 187, 48),
               (5.48, 163, 200, 48), (5.76, 163, 200, 48), (5.96, 173, 199, 48),
               (6.0, 133, 172, 48), (6.04, 128, 165, 48), (6.28, 128, 165, 48),
               (6.4, 129, 180, 48), (6.52, 133, 166, 48), (6.64, 133, 166, 48),
               (6.88, 144, 183, 48), (7.0, 153, 174, 48), (7.16, 153, 174, 48),
               (7.24, 153, 174, 48), (7.28, 253, 65, 104), (7.64, 253, 65, 104),
               (7.8, 279, 116, 80), (8.0, 290, 105, 80), (8.24, 288, 124, 80),
               (8.44, 243, 102, 80), (8.56, 243, 102, 80), (8.8, 202, 107, 80),
               (8.84, 164, 27, 104), (9.0, 164, 27, 104), (9.12, 121, 9, 104),
               (9.28, 77, 33, 104), (9.32, 52, 23, 104), (9.48, 52, 23, 104),
               (9.64, 33, 46, 104), (9.8, 93, 49, 104), (9.92, 93, 49, 104),
               (10.16, 173, 19, 104), (10.2, 226, 173, 48), (10.36, 226, 173, 48),
               (10.48, 211, 172, 48), (10.64, 208, 162, 48), (10.92, 220, 171, 48)]
    
        lis1 = [(0.0, 113, 167, 47), (0.32, 138, 159, 47), (0.44, 152, 144, 47),
                (0.48, 193, 148, 47), (0.6, 193, 148, 47), (0.76, 205, 138, 55),
                (0.88, 204, 121, 63), (0.92, 190, 31, 127), (1.2, 183, 59, 127),
                (1.4, 137, 22, 127), (1.52, 137, 22, 127), (1.72, 129, 67, 127),
                (1.88, 123, 69, 127), (2.04, 131, 123, 63), (2.24, 130, 148, 63),
                (2.48, 130, 148, 63), (2.8, 138, 180, 63), (3.0, 138, 180, 63),
                (3.2, 146, 192, 63), (3.28, 105, 91, 151), (3.44, 105, 91, 151),
                (3.72, 11, 48, 151), (3.96, 5, 78, 151), (4.32, 4, 134, 1),
                (4.6, 149, 184, 48), (4.8, 145, 188, 48), (5.0, 154, 217, 48),
                (5.08, 163, 199, 48), (5.2, 163, 199, 48), (5.32, 164, 187, 48),
                (5.48, 163, 200, 48), (5.76, 163, 200, 48), (5.96, 173, 199, 48),
                (6.0, 133, 172, 48), (6.04, 128, 165, 48), (6.28, 128, 165, 48),
                (6.4, 129, 180, 48), (6.52, 133, 166, 48), (6.64, 133, 166, 48),
                (6.88, 144, 183, 48), (7.0, 153, 174, 48), (7.16, 153, 174, 48),
                (7.24, 153, 174, 48), (7.28, 253, 65, 104), (7.64, 253, 65, 104),
                (7.8, 279, 116, 80), (8.0, 290, 105, 80), (8.24, 288, 124, 80),
                (8.44, 243, 102, 80), (8.56, 243, 102, 80), (8.8, 202, 107, 80),
                (8.84, 164, 27, 104), (9.0, 164, 27, 104), (9.12, 121, 9, 104),
                (9.28, 77, 33, 104), (9.32, 52, 23, 104), (9.48, 52, 23, 104),
                (9.64, 33, 46, 104), (9.8, 93, 49, 104), (9.92, 93, 49, 104),
                (10.16, 173, 19, 104), (10.2, 226, 173, 48), (10.36, 226, 173, 48),
                (10.48, 211, 172, 48), (10.64, 208, 162, 48), (10.92, 220, 171, 48)]
    
        def posi(t):
            global last_move
            if len(lis) == 0:
                return (last_move[1], last_move[2])
            if t >= lis[0][0]:
                last_move = item = lis.pop(0)
                return (item[1], item[2])
            else:
                if len(lis) > 0:
                    dura = lis[0][0] - last_move[0]
                    now = t - last_move[0]
                    w = (lis[0][1] - last_move[1]) * (now / dura)
                    h = (lis[0][2] - last_move[2]) * (now / dura)
                    # print t, last_move[1] + w, last_move[2] + h
                    return (last_move[1] + w, last_move[2] + h)
                return (last_move[1], last_move[2])
    
        def size(t):
            global last_move1
            if len(lis1) == 0:
                return (last_move1[3], last_move1[3] * 1.33)
            if t >= lis1[0][0]:
                last_move1 = item = lis1.pop(0)
                return (item[3], item[3] * 1.33)
            else:
                if len(lis) > 0:
                    dura = lis1[0][0] - last_move1[0]
                    now = t - last_move1[0]
                    s = (lis1[0][3] - last_move1[3]) * (now / dura)
                    nsw = last_move1[3] + s
                    nsh = nsw * 1.33
                    # print t, nsw, nsh
                    return (nsw, nsh)
                return (last_move1[3], last_move1[3] * 1.33)
    
        avatar = VideoFileClip("media/big_buck_bunny_432_433.webm", has_mask=True)
        avatar.audio = None
        maskclip = ImageClip("media/afterimage.png",
                             ismask=True, transparent=True)
        avatar.set_mask(maskclip)  # must set maskclip here..
        concatenated = concatenate_videoclips([avatar] * 3)
    
        tt = VideoFileClip("media/big_buck_bunny_0_30.webm").subclip(0, 3)
        # TODO: Setting mask here does not work:
        # .set_mask(maskclip).resize(size)])
        final = CompositeVideoClip(
            [tt, concatenated.set_position(posi).resize(size)])
        final.duration = tt.duration
>       final.write_videofile(
           os.path.join(TMP_DIR, 'issue_334.mp4'), fps=10)

tests/test_issues.py:143: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd872fd30>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/issue_334.mp4'
size = (1280, 720), fps = None, codec = 'libx264'
audiofile = 'issue_334TEMP_MPY_wvf_snd.mp3', preset = 'medium', bitrate = None
withmask = False, logfile = -1, threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/issue_334.mp4.
MoviePy - Writing audio in issue_334TEMP_MPY_wvf_snd.mp3
MoviePy - Done.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/issue_334.mp4

----------------------------- Captured stderr call -----------------------------
                                                                   
________________________________ test_issue_470 ________________________________

    def test_issue_470():
        audio_clip = AudioFileClip('media/crunching.mp3')
    
        # t_end is out of bounds
        subclip = audio_clip.subclip(t_start=6, t_end=9)
    
        with pytest.raises(IOError):
>           subclip.write_audiofile(os.path.join(
                TMP_DIR, 'issue_470.wav'), write_logfile=True)
E           Failed: DID NOT RAISE <class 'OSError'>

tests/test_issues.py:267: Failed
----------------------------- Captured stdout call -----------------------------
MoviePy - Writing audio in /tmp/guix-build-python-moviepy-1.0.3.drv-0/issue_470.wav
MoviePy - Done.
----------------------------- Captured stderr call -----------------------------
                                                                 
________________________________ test_issue_547 ________________________________

    def test_issue_547():
        red = ColorClip((640, 480), color=(255, 0, 0)).set_duration(1)
        green = ColorClip((640, 480), color=(0, 255, 0)).set_duration(2)
        blue = ColorClip((640, 480), color=(0, 0, 255)).set_duration(3)
    
        video = concatenate_videoclips([red, green, blue], method="compose")
        assert video.duration == 6
>       assert video.mask.duration == 6
E       assert 9 == 6
E         +9
E         -6

tests/test_issues.py:291: AssertionError
________________________________ test_subtitles ________________________________

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd871f340>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjcy0ne2v.txt'
filename = None, size = ('800', '600'), color = 'white'
bg_color = 'transparent', fontsize = 24, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'caption', kerning = None
align = 'South', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmparicz9mw.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjcy0ne2v.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
>           subprocess_call(cmd, logger=None)

moviepy/video/VideoClip.py:1137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cmd = ['convert', '-background', 'transparent', '-fill', 'white', '-font', ...]
logger = <proglog.proglog.MuteProgressBarLogger object at 0x7fffd871faf0>
errorprint = True

    def subprocess_call(cmd, logger='bar', errorprint=True):
        """ Executes the given subprocess command.
    
        Set logger to None or a custom Proglog logger to avoid printings.
        """
        logger = proglog.default_bar_logger(logger)
        logger(message='Moviepy - Running:\n>>> "+ " ".join(cmd)')
    
        popen_params = {"stdout": DEVNULL,
                        "stderr": sp.PIPE,
                        "stdin": DEVNULL}
    
        if os.name == "nt":
            popen_params["creationflags"] = 0x08000000
    
        proc = sp.Popen(cmd, **popen_params)
    
        out, err = proc.communicate() # proc.wait()
        proc.stderr.close()
    
        if proc.returncode:
            if errorprint:
                logger(message='Moviepy - Command returned an error')
>           raise IOError(err.decode('utf8'))
E           OSError: Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmparicz9mw.png' @ error/convert.c/ConvertImageCommand/3229.

moviepy/tools.py:54: OSError

During handling of the above exception, another exception occurred:

    def test_subtitles():
        red = ColorClip((800, 600), color=(255, 0, 0)).set_duration(10)
        green = ColorClip((800, 600), color=(0, 255, 0)).set_duration(10)
        blue = ColorClip((800, 600), color=(0, 0, 255)).set_duration(10)
        myvideo = concatenate_videoclips([red, green, blue])
        assert myvideo.duration == 30
    
        generator = lambda txt: TextClip(txt, font=FONT,
                                         size=(800, 600), fontsize=24,
                                         method='caption', align='South',
                                         color='white')
    
>       subtitles = SubtitlesClip("media/subtitles1.srt", generator)

tests/test_misc.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
moviepy/video/tools/subtitles.py:86: in __init__
    hasmask = bool(self.make_textclip('T').mask)
tests/test_misc.py:30: in <lambda>
    generator = lambda txt: TextClip(txt, font=FONT,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd871f340>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjcy0ne2v.txt'
filename = None, size = ('800', '600'), color = 'white'
bg_color = 'transparent', fontsize = 24, font = 'Liberation-Mono'
stroke_color = None, stroke_width = 1, method = 'caption', kerning = None
align = 'South', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmparicz9mw.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmpjcy0ne2v.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
            subprocess_call(cmd, logger=None)
        except (IOError, OSError) as err:
            error = ("MoviePy Error: creation of %s failed because of the "
                     "following error:\n\n%s.\n\n." % (filename, str(err))
                     + ("This error can be due to the fact that ImageMagick "
                        "is not installed on your computer, or (for Windows "
                        "users) that you didn't specify the path to the "
                        "ImageMagick binary in file conf.py, or that the path "
                        "you specified is incorrect"))
>           raise IOError(error)
E           OSError: MoviePy Error: creation of None failed because of the following error:
E           
E           Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmparicz9mw.png' @ error/convert.c/ConvertImageCommand/3229.
E           .
E           
E           .This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

moviepy/video/VideoClip.py:1146: OSError
________________________ test_release_of_file_via_close ________________________

    def test_release_of_file_via_close():
        # Create a random video file.
        red = ColorClip((256, 200), color=(255, 0, 0))
        green = ColorClip((256, 200), color=(0, 255, 0))
        blue = ColorClip((256, 200), color=(0, 0, 255))
    
        red.fps = green.fps = blue.fps = 10
    
        # Repeat this so we can see no conflicts.
        for i in range(3):
            # Get the name of a temporary file we can use.
            local_video_filename = join(
                TMP_DIR,
                "test_release_of_file_via_close_%s.mp4" % int(time.time())
            )
    
            clip = clips_array([[red, green, blue]]).set_duration(0.5)
>           clip.write_videofile(local_video_filename)

tests/test_resourcerelease.py:40: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd899e8e0>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/test_release_of_file_via_close_1674878483.mp4'
size = (768, 200), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test_release_of_file_via_close_1674878483.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test_release_of_file_via_close_1674878483.mp4

_________________________ test_failure_to_release_file _________________________

    def test_failure_to_release_file():
        """ This isn't really a test, because it is expected to fail.
            It demonstrates that there *is* a problem with not releasing resources when running on
            Windows.
    
            The real issue was that, as of movepy 0.2.3.2, there was no way around it.
    
            See test_resourcerelease.py to see how the close() methods provide a solution.
        """
    
        # Get the name of a temporary file we can use.
        local_video_filename = join(
            TMP_DIR, "test_release_of_file_%s.mp4" % int(time.time()))
    
        # Repeat this so we can see that the problems escalate:
        for i in range(5):
    
            # Create a random video file.
            red = ColorClip((256, 200), color=(255, 0, 0))
            green = ColorClip((256, 200), color=(0, 255, 0))
            blue = ColorClip((256, 200), color=(0, 0, 255))
    
            red.fps = green.fps = blue.fps = 30
            video = clips_array([[red, green, blue]]).set_duration(1)
    
            try:
>               video.write_videofile(local_video_filename)

tests/test_resourcereleasedemo.py:51: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7ffff6ade670>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/test_release_of_file_1674878483.mp4'
size = (768, 200), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError
----------------------------- Captured stdout call -----------------------------
Moviepy - Building video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test_release_of_file_1674878483.mp4.
Moviepy - Writing video /tmp/guix-build-python-moviepy-1.0.3.drv-0/test_release_of_file_1674878483.mp4

_____________________________ test_sys_write_flush _____________________________

    def test_sys_write_flush():
        """Test for sys_write-flush function. Check that stdout has no content after flushing."""
        tools.sys_write_flush("hello world")
    
        file = sys.stdout.read()
>       assert file == b""
E       AssertionError: assert '' == b''
E         +''
E         -b''

tests/test_tools.py:62: AssertionError
----------------------------- Captured stdout call -----------------------------
hello world
_________________________________ test_credits _________________________________

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd8796160>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmps9s_zmr9.txt'
filename = None, size = None, color = 'white', bg_color = 'transparent'
fontsize = 60, font = 'Liberation-Mono', stroke_color = 'blue', stroke_width = 5
method = 'label', kerning = None, align = 'East', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmphlp2n7nz.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmps9s_zmr9.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
>           subprocess_call(cmd, logger=None)

moviepy/video/VideoClip.py:1137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cmd = ['convert', '-background', 'transparent', '-fill', 'white', '-font', ...]
logger = <proglog.proglog.MuteProgressBarLogger object at 0x7fffd8796d30>
errorprint = True

    def subprocess_call(cmd, logger='bar', errorprint=True):
        """ Executes the given subprocess command.
    
        Set logger to None or a custom Proglog logger to avoid printings.
        """
        logger = proglog.default_bar_logger(logger)
        logger(message='Moviepy - Running:\n>>> "+ " ".join(cmd)')
    
        popen_params = {"stdout": DEVNULL,
                        "stderr": sp.PIPE,
                        "stdin": DEVNULL}
    
        if os.name == "nt":
            popen_params["creationflags"] = 0x08000000
    
        proc = sp.Popen(cmd, **popen_params)
    
        out, err = proc.communicate() # proc.wait()
        proc.stderr.close()
    
        if proc.returncode:
            if errorprint:
                logger(message='Moviepy - Command returned an error')
>           raise IOError(err.decode('utf8'))
E           OSError: Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmphlp2n7nz.png' @ error/convert.c/ConvertImageCommand/3229.

moviepy/tools.py:54: OSError

During handling of the above exception, another exception occurred:

    def test_credits():
        credit_file = "# This is a comment\n" \
                      "# The next line says : leave 4 blank lines\n" \
                      ".blank 2\n" \
                      "\n" \
                      "..Executive Story Editor\n" \
                      "MARCEL DURAND\n" \
                      "\n" \
                      ".blank 2\n" \
                      "\n" \
                      "..Associate Producers\n" \
                      "MARTIN MARCEL\n" \
                      "DIDIER MARTIN\n" \
                      "\n" \
                      "..Music Supervisor\n" \
                      "JEAN DIDIER\n"
    
        file_location = os.path.join(TMP_DIR, "credits.txt")
        vid_location = os.path.join(TMP_DIR, "credits.mp4")
        with open(file_location, "w") as file:
            file.write(credit_file)
    
>       image = credits1(file_location, 600, gap=100, stroke_color="blue",
                         stroke_width=5, font=FONT)

tests/test_videotools.py:33: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
moviepy/video/tools/credits.py:100: in credits1
    left, right = [TextClip(txt, color=color, stroke_color=stroke_color,
moviepy/video/tools/credits.py:100: in <listcomp>
    left, right = [TextClip(txt, color=color, stroke_color=stroke_color,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.VideoClip.TextClip object at 0x7fffd8796160>
txt = '@/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmps9s_zmr9.txt'
filename = None, size = None, color = 'white', bg_color = 'transparent'
fontsize = 60, font = 'Liberation-Mono', stroke_color = 'blue', stroke_width = 5
method = 'label', kerning = None, align = 'East', interline = None
tempfilename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmphlp2n7nz.png'
temptxt = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmps9s_zmr9.txt'
transparent = True, remove_temp = True, print_cmd = False

    def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):
    
        if txt is not None:
            if temptxt is None:
                temptxt_fd, temptxt = tempfile.mkstemp(suffix='.txt')
                try:  # only in Python3 will this work
                    os.write(temptxt_fd, bytes(txt, 'UTF8'))
                except TypeError:  # oops, fall back to Python2
                    os.write(temptxt_fd, txt)
                os.close(temptxt_fd)
            txt = '@' + temptxt
        else:
            # use a file instead of a text.
            txt = "@%" + filename
    
        if size is not None:
            size = ('' if size[0] is None else str(size[0]),
                    '' if size[1] is None else str(size[1]))
    
        cmd = ([get_setting("IMAGEMAGICK_BINARY"),
               "-background", bg_color,
                "-fill", color,
                "-font", font])
    
        if fontsize is not None:
            cmd += ["-pointsize", "%d" % fontsize]
        if kerning is not None:
            cmd += ["-kerning", "%0.1f" % kerning]
        if stroke_color is not None:
            cmd += ["-stroke", stroke_color, "-strokewidth",
                    "%.01f" % stroke_width]
        if size is not None:
            cmd += ["-size", "%sx%s" % (size[0], size[1])]
        if align is not None:
            cmd += ["-gravity", align]
        if interline is not None:
            cmd += ["-interline-spacing", "%d" % interline]
    
        if tempfilename is None:
            tempfile_fd, tempfilename = tempfile.mkstemp(suffix='.png')
            os.close(tempfile_fd)
    
        cmd += ["%s:%s" % (method, txt),
                "-type", "truecolormatte", "PNG32:%s" % tempfilename]
    
        if print_cmd:
            print(" ".join(cmd))
    
        try:
            subprocess_call(cmd, logger=None)
        except (IOError, OSError) as err:
            error = ("MoviePy Error: creation of %s failed because of the "
                     "following error:\n\n%s.\n\n." % (filename, str(err))
                     + ("This error can be due to the fact that ImageMagick "
                        "is not installed on your computer, or (for Windows "
                        "users) that you didn't specify the path to the "
                        "ImageMagick binary in file conf.py, or that the path "
                        "you specified is incorrect"))
>           raise IOError(error)
E           OSError: MoviePy Error: creation of None failed because of the following error:
E           
E           Fontconfig error: No writable cache directories
E           Fontconfig error: No writable cache directories
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: unable to read font `Liberation-Mono' @ warning/annotate.c/RenderType/949.
E           convert: unable to read font `Liberation-Mono' @ error/annotate.c/RenderFreetype/1396.
E           convert: no images defined `PNG32:/tmp/guix-build-python-moviepy-1.0.3.drv-0/tmphlp2n7nz.png' @ error/convert.c/ConvertImageCommand/3229.
E           .
E           
E           .This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect

moviepy/video/VideoClip.py:1146: OSError
=============================== warnings summary ===============================
moviepy/config_defaults.py:1
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/config_defaults.py:1: DeprecationWarning: invalid escape sequence \P
    """

moviepy/video/io/ffmpeg_reader.py:294
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/io/ffmpeg_reader.py:294: DeprecationWarning: invalid escape sequence \d
    lines_video = [l for l in lines if ' Video: ' in l and re.search('\d+x\d+', l)]

moviepy/video/io/ffmpeg_reader.py:367
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/io/ffmpeg_reader.py:367: DeprecationWarning: invalid escape sequence \d
    rotation_lines = [l for l in lines if 'rotate          :' in l and re.search('\d+$', l)]

moviepy/video/io/ffmpeg_reader.py:370
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/io/ffmpeg_reader.py:370: DeprecationWarning: invalid escape sequence \d
    match = re.search('\d+$', rotation_line)

tests/test_VideoClip.py: 40 warnings
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/io/gif_writers.py:225: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.
    proc1.stdin.write(frame.tostring())

tests/test_compositing.py: 2 warnings
tests/test_fx.py: 1 warning
tests/test_issues.py: 4 warnings
tests/test_misc.py: 18 warnings
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/fx/resize.py:37: DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead.
    resized_pil = pilim.resize(newsize[::-1], Image.ANTIALIAS)

tests/test_fx.py::test_rotate
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/fx/rotate.py:41: DeprecationWarning: BILINEAR is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BILINEAR instead.
    resample = {"bilinear": Image.BILINEAR,

tests/test_fx.py::test_rotate
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/fx/rotate.py:42: DeprecationWarning: NEAREST is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.NEAREST or Dither.NONE instead.
    "nearest": Image.NEAREST,

tests/test_fx.py::test_rotate
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/fx/rotate.py:43: DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.BICUBIC instead.
    "bicubic": Image.BICUBIC}[resample]

tests/test_fx.py::test_time_mirror
tests/test_fx.py::test_time_symmetrize
  /tmp/guix-build-python-moviepy-1.0.3.drv-0/source/moviepy/video/io/ffmpeg_reader.py:123: UserWarning: Warning: in file media/big_buck_bunny_432_433.webm, 2764800 bytes wanted but 0 bytes read,at frame 24/25, at time 1.00/1.00 sec. Using the last valid frame instead.
    warnings.warn("Warning: in file %s, "%(self.filename)+

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=========================== short test summary info ============================
FAILED tests/test_ImageSequenceClip.py::test_1 - TypeError: must be real numb...
FAILED tests/test_PR.py::test_PR_339 - OSError: MoviePy Error: creation of No...
FAILED tests/test_PR.py::test_PR_458 - TypeError: must be real number, not No...
FAILED tests/test_PR.py::test_PR_528 - TypeError: must be real number, not No...
FAILED tests/test_PR.py::test_PR_529 - assert 0 == 180
FAILED tests/test_TextClip.py::test_duration - OSError: MoviePy Error: creati...
FAILED tests/test_TextClip.py::test_if_textclip_crashes_in_caption_mode - OSE...
FAILED tests/test_TextClip.py::test_if_textclip_crashes_in_label_mode - OSErr...
FAILED tests/test_VideoClip.py::test_write_image_sequence - TypeError: unsupp...
FAILED tests/test_VideoClip.py::test_subfx - TypeError: must be real number, ...
FAILED tests/test_VideoClip.py::test_oncolor - TypeError: must be real number...
FAILED tests/test_VideoClip.py::test_setaudio - TypeError: must be real numbe...
FAILED tests/test_VideoClip.py::test_setaudio_with_audiofile - TypeError: mus...
FAILED tests/test_VideoClip.py::test_setopacity - TypeError: must be real num...
FAILED tests/test_VideoClip.py::test_toimageclip - TypeError: must be real nu...
FAILED tests/test_VideoFileClip.py::test_setup - TypeError: must be real numb...
FAILED tests/test_Videos.py::test_afterimage - TypeError: must be real number...
FAILED tests/test_compositing.py::test_clips_array_duration - TypeError: must...
FAILED tests/test_fx.py::test_blackwhite - TypeError: must be real number, no...
FAILED tests/test_fx.py::test_colorx - TypeError: must be real number, not No...
FAILED tests/test_fx.py::test_crop - TypeError: must be real number, not None...
FAILED tests/test_fx.py::test_fadein - TypeError: must be real number, not No...
FAILED tests/test_fx.py::test_fadeout - TypeError: must be real number, not N...
FAILED tests/test_fx.py::test_invert_colors - TypeError: must be real number,...
FAILED tests/test_fx.py::test_lum_contrast - TypeError: must be real number, ...
FAILED tests/test_fx.py::test_make_loopable - TypeError: must be real number,...
FAILED tests/test_fx.py::test_margin - TypeError: must be real number, not No...
FAILED tests/test_fx.py::test_mirror_x - TypeError: must be real number, not ...
FAILED tests/test_fx.py::test_mirror_y - TypeError: must be real number, not ...
FAILED tests/test_fx.py::test_resize - TypeError: must be real number, not No...
FAILED tests/test_fx.py::test_rotate - TypeError: must be real number, not No...
FAILED tests/test_fx.py::test_speedx - TypeError: must be real number, not No...
FAILED tests/test_fx.py::test_time_mirror - TypeError: must be real number, n...
FAILED tests/test_fx.py::test_time_symmetrize - TypeError: must be real numbe...
FAILED tests/test_issues.py::test_issue_334 - TypeError: must be real number,...
FAILED tests/test_issues.py::test_issue_470 - Failed: DID NOT RAISE <class 'O...
FAILED tests/test_issues.py::test_issue_547 - assert 9 == 6
FAILED tests/test_misc.py::test_subtitles - OSError: MoviePy Error: creation ...
FAILED tests/test_resourcerelease.py::test_release_of_file_via_close - TypeEr...
FAILED tests/test_resourcereleasedemo.py::test_failure_to_release_file - Type...
FAILED tests/test_tools.py::test_sys_write_flush - AssertionError: assert '' ...
FAILED tests/test_videotools.py::test_credits - OSError: MoviePy Error: creat...
====== 42 failed, 67 passed, 1 skipped, 74 warnings in 114.11s (0:01:54) =======
error: in phase 'check': uncaught exception:
%exception #<&invoke-error program: "pytest" arguments: ("-vv") exit-status: 1 term-signal: #f stop-signal: #f> 
phase `check' failed after 115.3 seconds
command "pytest" "-vv" failed with status 1
note: keeping build directory `/tmp/guix-build-python-moviepy-1.0.3.drv-3'
builder for `/gnu/store/v9lrnnsp473lld65ggwlrbqqi08609dx-python-moviepy-1.0.3.drv' failed with exit code 1
build of /gnu/store/v9lrnnsp473lld65ggwlrbqqi08609dx-python-moviepy-1.0.3.drv failed
View build log at '/var/log/guix/drvs/v9/lrnnsp473lld65ggwlrbqqi08609dx-python-moviepy-1.0.3.drv.gz'.
guix build: error: build of `/gnu/store/v9lrnnsp473lld65ggwlrbqqi08609dx-python-moviepy-1.0.3.drv' failed

```

https://github.com/Zulko/moviepy


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: debug moviepy with jgart
  2023-01-28  4:12 debug moviepy with jgart jgart
@ 2023-01-28  5:16 ` Wojtek Kosior via Development of GNU Guix and the GNU System distribution.
  2023-01-28  6:18 ` jgart
  1 sibling, 0 replies; 3+ messages in thread
From: Wojtek Kosior via Development of GNU Guix and the GNU System distribution. @ 2023-01-28  5:16 UTC (permalink / raw)
  To: jgart; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1034 bytes --]

> Hi,
> 
> I'm trying to get the tests to pass for a Guix package that I am writing for moviepy.
> 
> Any thoughts on how to resolve the below failures?
> 
> I need to make some dir writeable?

Hello,

The non-writeable cache dir error seems to be coming from an imagemagick
subprocess. So yeah, we could look at what imagemagick needs for a
cache directory.

There are many errors so I'd try tackling them one by one. Starting
with those that are more obvious to be related to the environment and
IO (and hoping fixing them will also fix some of the non-obvious ones).

You could try using the approach described in [1] to enter the build
environment. Then you can rerun the Hypothesis tests by hand. I'd look
into Hypothesis documentation and check how to only run a sepcific test
to save time. I'd then also check the other options of the tool —
perhaps there's a way to increase verbosity in test output?

Good luck,
Wojtek

[1] https://guix.gnu.org/manual/en/html_node/Debugging-Build-Failures.html

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: debug moviepy with jgart
  2023-01-28  4:12 debug moviepy with jgart jgart
  2023-01-28  5:16 ` Wojtek Kosior via Development of GNU Guix and the GNU System distribution.
@ 2023-01-28  6:18 ` jgart
  1 sibling, 0 replies; 3+ messages in thread
From: jgart @ 2023-01-28  6:18 UTC (permalink / raw)
  To: Wojtek Kosior; +Cc: guix-devel

Thanks for the reply.

Interestingly, there is no hypothesis code in the moviepy tests so I'm not sure why we get that plugins output section mentioning hypothesis.

I wonder if there's a way to start pdb or pudb in the failed build environment so that I can step through the test? hmmm

Will try that next... for fun

Here's one test that fails:

# -*- coding: utf-8 -*-
"""Image sequencing clip tests meant to be run with pytest."""
import os
import sys

import pytest

from moviepy.video.io.ImageSequenceClip import ImageSequenceClip

from .test_helper import TMP_DIR


def test_1():
    images=[]
    durations=[]

    for i in range(5):
        durations.append(i)
        images.append("media/python_logo.png")
        durations.append(i)
        images.append("media/python_logo_upside_down.png")

    with ImageSequenceClip(images, durations=durations) as clip:
        assert clip.duration == sum(durations)
        clip.write_videofile(os.path.join(TMP_DIR, "ImageSequenceClip1.mp4"), fps=30)

def test_2():
    images=[]
    durations=[]

    durations.append(1)
    images.append("media/python_logo.png")
    durations.append(2)
    images.append("media/matplotlib_demo1.png")

    #images are not the same size..
    with pytest.raises(Exception):
         ImageSequenceClip(images, durations=durations).close()


if __name__ == '__main__':
   pytest.main()

and here's the test failure output:

____________________________________ test_1 ____________________________________

    def test_1():
        images=[]
        durations=[]
    
        for i in range(5):
            durations.append(i)
            images.append("media/python_logo.png")
            durations.append(i)
            images.append("media/python_logo_upside_down.png")
    
        with ImageSequenceClip(images, durations=durations) as clip:
            assert clip.duration == sum(durations)
>           clip.write_videofile(os.path.join(TMP_DIR, "ImageSequenceClip1.mp4"), fps=30)

tests/test_ImageSequenceClip.py:25: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:54: in requires_duration
    return f(clip, *a, **k)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:135: in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
/gnu/store/zfw5y8356i5hmfghpix46qk3iaxg3i6y-python-decorator-5.0.9/lib/python3.9/site-packages/decorator.py:232: in fun
    return caller(func, *(extras + args), **kw)
moviepy/decorators.py:22: in convert_masks_to_RGB
    return f(clip, *a, **k)
moviepy/video/VideoClip.py:300: in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
moviepy/video/io/ffmpeg_writer.py:213: in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <moviepy.video.io.ffmpeg_writer.FFMPEG_VideoWriter object at 0x7fffd89ba160>
filename = '/tmp/guix-build-python-moviepy-1.0.3.drv-0/ImageSequenceClip1.mp4'
size = (260, 77), fps = None, codec = 'libx264', audiofile = None
preset = 'medium', bitrate = None, withmask = False, logfile = -1
threads = None, ffmpeg_params = None

    def __init__(self, filename, size, fps, codec="libx264", audiofile=None,
                 preset="medium", bitrate=None, withmask=False,
                 logfile=None, threads=None, ffmpeg_params=None):
    
        if logfile is None:
            logfile = sp.PIPE
    
        self.filename = filename
        self.codec = codec
        self.ext = self.filename.split(".")[-1]
    
        # order is important
        cmd = [
            get_setting("FFMPEG_BINARY"),
            '-y',
            '-loglevel', 'error' if logfile == sp.PIPE else 'info',
            '-f', 'rawvideo',
            '-vcodec', 'rawvideo',
            '-s', '%dx%d' % (size[0], size[1]),
            '-pix_fmt', 'rgba' if withmask else 'rgb24',
>           '-r', '%.02f' % fps,
            '-an', '-i', '-'
        ]
E       TypeError: must be real number, not NoneType

moviepy/video/io/ffmpeg_writer.py:88: TypeError

--

Here's the Guix package for the curious:

;;; GNU Guix --- Functional package management for GNU
;;;
;;; Copyright © 2022 jgart <jgart@dismail.de>
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (guixrus packages moviepy)
  #:use-module (guix build-system python)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix utils)
  #:use-module (gnu packages)
  #:use-module (gnu packages check)
  #:use-module (gnu packages fonts)
  #:use-module (gnu packages python-check)
  #:use-module (gnu packages python-web)
  #:use-module (gnu packages python)
  #:use-module (gnu packages imagemagick)
  #:use-module (gnu packages video)
  #:use-module (gnu packages python-xyz))

(define-public python-proglog
  (package
    (name "python-proglog")
    (version "0.1.10")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "proglog" version))
        (sha256
          (base32 "1d6s9mg2fr3dr30x05cvsvw25kpakkzqyj2zyarawk1fr34ji335"))))
    (build-system python-build-system)
    (propagated-inputs (list python-tqdm))
    (home-page "")
    (synopsis "Log and progress bar manager for console, notebooks, web...")
    (description "Log and progress bar manager for console, notebooks, web...")
    (license license:expat)))

(define-public python-moviepy
  (package
    (name "python-moviepy")
    (version "1.0.3")
    (source
      (origin
        (method git-fetch)
        (uri (git-reference
               (url "https://github.com/Zulko/moviepy")
               (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
          (base32 "088i5cms0bs0qcvfbbi8krgvllln62lb9rgnliz4as4j0b631c4p"))))
    (build-system python-build-system)
    (native-inputs
      (list python-coverage
            python-coveralls
            font-liberation
            python-pytest
            python-pytest-cov
            python-requests))
    (propagated-inputs
      (list python-decorator
            python-imageio
            python-imageio-ffmpeg
            python-proglog
            python-requests
            python-tqdm))
    (inputs (list ffmpeg imagemagick))
    (arguments
      `(#:phases
        (modify-phases %standard-phases
            (replace 'check
              (lambda* (#:key tests? inputs #:allow-other-keys)
                (when tests?
                  (invoke "pytest" "-vv")))))))
    (home-page "https://zulko.github.io/moviepy/")
    (synopsis "Video editing with Python")
    (description "Video editing with Python")
    (license license:expat)))

(define-public python-imageio-ffmpeg
  (package
    (name "python-imageio-ffmpeg")
    (version "0.4.7")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "imageio-ffmpeg" version))
        (sha256
          (base32 "0gkjkrmgbdcfqx010hp23ymrkp1zzmjbh88qliyf6qzkjy7q623s"))))
    (build-system python-build-system)
    (home-page "https://github.com/imageio/imageio-ffmpeg")
    (synopsis "FFMPEG wrapper for Python")
    (description "FFMPEG wrapper for Python")
    (license license:bsd-2)))


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-01-28  6:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-28  4:12 debug moviepy with jgart jgart
2023-01-28  5:16 ` Wojtek Kosior via Development of GNU Guix and the GNU System distribution.
2023-01-28  6:18 ` jgart

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).