diff --git a/docs/examples/quick_recipes.rst b/docs/examples/quick_recipes.rst index 7a0b59752..eeaee635b 100644 --- a/docs/examples/quick_recipes.rst +++ b/docs/examples/quick_recipes.rst @@ -59,7 +59,7 @@ Getting the average frame of a video clip = VideoFileClip("video.mp4") fps= 1.0 # take one frame per second nframes = clip.duration*fps # total number of frames used - total_image = sum(clip.iter_frames(fps,dtype=float,progress_bar=True)) + total_image = sum(clip.iter_frames(fps,dtype=float,logger='bar')) average_image = ImageClip(total_image/ nframes) average_image.save_frame("average_test.png") diff --git a/moviepy/Clip.py b/moviepy/Clip.py index 1b5a7c282..da1ddd4f4 100644 --- a/moviepy/Clip.py +++ b/moviepy/Clip.py @@ -14,6 +14,7 @@ convert_to_seconds, use_clip_fps_by_default) from tqdm import tqdm +import proglog class Clip: @@ -443,7 +444,7 @@ def cutout(self, ta, tb): @requires_duration @use_clip_fps_by_default - def iter_frames(self, fps=None, with_times = False, progress_bar=False, + def iter_frames(self, fps=None, with_times = False, logger=None, dtype=None): """ Iterates over all the frames of the clip. @@ -469,22 +470,15 @@ def iter_frames(self, fps=None, with_times = False, progress_bar=False, >>> print ( [frame[0,:,0].max() for frame in myclip.iter_frames()]) """ - - def generator(): - for t in np.arange(0, self.duration, 1.0/fps): - frame = self.get_frame(t) - if (dtype is not None) and (frame.dtype != dtype): - frame = frame.astype(dtype) - if with_times: - yield t, frame - else: - yield frame - - if progress_bar: - nframes = int(self.duration*fps)+1 - return tqdm(generator(), total=nframes) - - return generator() + logger = proglog.default_bar_logger(logger) + for t in logger.iter_bar(t=np.arange(0, self.duration, 1.0/fps)): + frame = self.get_frame(t) + if (dtype is not None) and (frame.dtype != dtype): + frame = frame.astype(dtype) + if with_times: + yield t, frame + else: + yield frame def close(self): """ diff --git a/moviepy/audio/AudioClip.py b/moviepy/audio/AudioClip.py index 883bff88b..85724071b 100644 --- a/moviepy/audio/AudioClip.py +++ b/moviepy/audio/AudioClip.py @@ -1,5 +1,6 @@ import os import numpy as np +import proglog from moviepy.audio.io.ffmpeg_audiowriter import ffmpeg_audiowrite from moviepy.decorators import requires_duration from moviepy.tools import deprecated_version_of, extensions_dict @@ -61,11 +62,12 @@ def __init__(self, make_frame=None, duration=None, fps=None): @requires_duration def iter_chunks(self, chunksize=None, chunk_duration=None, fps=None, - quantize=False, nbytes=2, progress_bar=False): + quantize=False, nbytes=2, logger=None): """ Iterator that returns the whole sound array of the clip by chunks """ if fps is None: fps = self.fps + logger = proglog.default_bar_logger(logger) if chunk_duration is not None: chunksize = int(chunk_duration*fps) @@ -74,19 +76,13 @@ def iter_chunks(self, chunksize=None, chunk_duration=None, fps=None, nchunks = totalsize // chunksize + 1 pospos = np.linspace(0, totalsize, nchunks + 1, endpoint=True, dtype=int) - - def generator(): - for i in range(nchunks): - size = pospos[i+1] - pospos[i] - assert(size <= chunksize) - tt = (1.0/fps)*np.arange(pospos[i], pospos[i+1]) - yield self.to_soundarray(tt, nbytes=nbytes, quantize=quantize, - fps=fps, buffersize=chunksize) - - if progress_bar: - return tqdm(generator(), total=nchunks) - else: - return generator() + + for i in logger.iter_bar(chunk=list(range(nchunks))): + size = pospos[i+1] - pospos[i] + assert(size <= chunksize) + tt = (1.0/fps)*np.arange(pospos[i], pospos[i+1]) + yield self.to_soundarray(tt, nbytes=nbytes, quantize=quantize, + fps=fps, buffersize=chunksize) @requires_duration def to_soundarray(self, tt=None, fps=None, quantize=False, nbytes=2, buffersize=50000): @@ -136,19 +132,19 @@ def to_soundarray(self, tt=None, fps=None, quantize=False, nbytes=2, buffersize= return snd_array - def max_volume(self, stereo=False, chunksize=50000, progress_bar=False): + def max_volume(self, stereo=False, chunksize=50000, logger=None): stereo = stereo and (self.nchannels == 2) maxi = np.array([0, 0]) if stereo else 0 - for chunk in self.iter_chunks(chunksize=chunksize, progress_bar=progress_bar): + for chunk in self.iter_chunks(chunksize=chunksize,logger=logger): maxi = np.maximum(maxi, abs(chunk).max(axis=0)) if stereo else max(maxi, abs(chunk).max()) return maxi @requires_duration def write_audiofile(self, filename, fps=None, nbytes=2, buffersize=2000, codec=None, bitrate=None, ffmpeg_params=None, - write_logfile=False, verbose=True, progress_bar=True): + write_logfile=False, verbose=True, logger='bar'): """ Writes an audio file from the AudioClip. @@ -187,8 +183,8 @@ def write_audiofile(self, filename, fps=None, nbytes=2, buffersize=2000, verbose Boolean indicating whether to print infomation - progress_bar - Boolean indicating whether to show the progress bar. + logger + Either 'bar' or None or any Proglog logger """ if not fps: @@ -210,7 +206,7 @@ def write_audiofile(self, filename, fps=None, nbytes=2, buffersize=2000, codec=codec, bitrate=bitrate, write_logfile=write_logfile, verbose=verbose, ffmpeg_params=ffmpeg_params, - progress_bar=progress_bar) + logger=logger) # The to_audiofile method is replaced by the more explicit write_audiofile. diff --git a/moviepy/audio/io/ffmpeg_audiowriter.py b/moviepy/audio/io/ffmpeg_audiowriter.py index bfde5920f..5f704250e 100644 --- a/moviepy/audio/io/ffmpeg_audiowriter.py +++ b/moviepy/audio/io/ffmpeg_audiowriter.py @@ -1,14 +1,12 @@ import subprocess as sp +import os +import proglog from moviepy.compat import DEVNULL -import os - from moviepy.config import get_setting from moviepy.decorators import requires_duration -from moviepy.tools import verbose_print - class FFMPEG_AudioWriter: """ @@ -146,19 +144,20 @@ def __exit__(self, exc_type, exc_value, traceback): def ffmpeg_audiowrite(clip, filename, fps, nbytes, buffersize, codec='libvorbis', bitrate=None, write_logfile=False, verbose=True, - ffmpeg_params=None, progress_bar=True): + ffmpeg_params=None, logger='bar'): """ A function that wraps the FFMPEG_AudioWriter to write an AudioClip to a file. + + NOTE: verbose is deprecated. """ if write_logfile: logfile = open(filename + ".log", 'w+') else: logfile = None - - verbose_print(verbose, "[MoviePy] Writing audio in %s\n"%filename) - + logger = proglog.default_bar_logger(logger) + logger(message="MoviePy - Writing audio in %s") writer = FFMPEG_AudioWriter(filename, fps, nbytes, clip.nchannels, codec=codec, bitrate=bitrate, logfile=logfile, @@ -167,27 +166,11 @@ def ffmpeg_audiowrite(clip, filename, fps, nbytes, buffersize, for chunk in clip.iter_chunks(chunksize=buffersize, quantize=True, nbytes=nbytes, fps=fps, - progress_bar=progress_bar): + logger=logger): writer.write_frames(chunk) - """ - totalsize = int(fps*clip.duration) - - if (totalsize % buffersize == 0): - nchunks = totalsize // buffersize - else: - nchunks = totalsize // buffersize + 1 - - pospos = list(range(0, totalsize, buffersize))+[totalsize] - for i in tqdm(range(nchunks)): - tt = (1.0/fps)*np.arange(pospos[i],pospos[i+1]) - sndarray = clip.to_soundarray(tt, nbytes= nbytes) - writer.write_frames(sndarray) - """ - writer.close() if write_logfile: logfile.close() - - verbose_print(verbose, "[MoviePy] Done.\n") + logger(message="MoviePy - Done.") \ No newline at end of file diff --git a/moviepy/tools.py b/moviepy/tools.py index 49fdc6016..a9c469350 100644 --- a/moviepy/tools.py +++ b/moviepy/tools.py @@ -6,6 +6,7 @@ import sys import warnings import re +import proglog import os from .compat import DEVNULL @@ -27,10 +28,13 @@ def verbose_print(verbose, s): sys_write_flush(s) -def subprocess_call(cmd, verbose=True, errorprint=True): - """ Executes the given subprocess command.""" - - verbose_print(verbose, "\n[MoviePy] Running:\n>>> "+ " ".join(cmd)) +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, @@ -45,10 +49,11 @@ def subprocess_call(cmd, verbose=True, errorprint=True): proc.stderr.close() if proc.returncode: - verbose_print(errorprint, "\n[MoviePy] This command returned an error !") + if errorprint: + logger(message='Moviepy - Command returned an error') raise IOError(err.decode('utf8')) else: - verbose_print(verbose, "\n... command successful.\n") + logger(message='Moviepy - Command successful') del proc diff --git a/moviepy/video/VideoClip.py b/moviepy/video/VideoClip.py index 3cdf5384b..cde0d289e 100644 --- a/moviepy/video/VideoClip.py +++ b/moviepy/video/VideoClip.py @@ -11,7 +11,7 @@ import numpy as np from imageio import imread, imsave -from tqdm import tqdm +import proglog from ..Clip import Clip from ..compat import DEVNULL, string_types @@ -20,7 +20,7 @@ convert_masks_to_RGB, convert_to_seconds, outplace, requires_duration, use_clip_fps_by_default) from ..tools import (deprecated_version_of, extensions_dict, find_extension, - is_string, subprocess_call, verbose_print) + is_string, subprocess_call) from .io.ffmpeg_writer import ffmpeg_write_video from .io.gif_writers import (write_gif, write_gif_with_image_io, write_gif_with_tempfiles) @@ -141,7 +141,7 @@ def write_videofile(self, filename, fps=None, codec=None, rewrite_audio=True, remove_temp=True, write_logfile=False, verbose=True, threads=None, ffmpeg_params=None, - progress_bar=True): + logger='bar'): """Write the clip to a videofile. Parameters @@ -238,11 +238,11 @@ def write_videofile(self, filename, fps=None, codec=None, These will be files ending with '.log' with the name of the output file in them. - verbose - Boolean indicating whether to print infomation. - - progress_bar - Boolean indicating whether to show the progress bar. + logger + Either "bar" for progress bar or None or any Proglog logger. + + verbose (deprecated, kept for compatibility) + Formerly used for toggling messages on/off. Use logger=None now. Examples ======== @@ -255,6 +255,7 @@ def write_videofile(self, filename, fps=None, codec=None, """ name, ext = os.path.splitext(os.path.basename(filename)) ext = ext[1:].lower() + logger = proglog.default_bar_logger(logger) if codec is None: @@ -306,16 +307,14 @@ def write_videofile(self, filename, fps=None, codec=None, # enough cpu for multiprocessing ? USELESS RIGHT NOW, WILL COME AGAIN # enough_cpu = (multiprocessing.cpu_count() > 1) - - verbose_print(verbose, "[MoviePy] >>>> Building video %s\n" % filename) - + logger(message="Moviepy - Building video %s.") if make_audio: self.audio.write_audiofile(audiofile, audio_fps, audio_nbytes, audio_bufsize, audio_codec, bitrate=audio_bitrate, write_logfile=write_logfile, verbose=verbose, - progress_bar=progress_bar) + logger=logger) ffmpeg_write_video(self, filename, fps, codec, bitrate=bitrate, @@ -324,18 +323,17 @@ def write_videofile(self, filename, fps=None, codec=None, audiofile=audiofile, verbose=verbose, threads=threads, ffmpeg_params=ffmpeg_params, - progress_bar=progress_bar) + logger=logger) if remove_temp and make_audio: os.remove(audiofile) - - verbose_print(verbose, "[MoviePy] >>>> Video ready: %s \n\n"%filename) + logger(message="Moviepy - video ready %s") @requires_duration @use_clip_fps_by_default @convert_masks_to_RGB def write_images_sequence(self, nameformat, fps=None, verbose=True, - withmask=True, progress_bar=True): + withmask=True, logger='bar'): """ Writes the videoclip to a sequence of image files. Parameters @@ -358,8 +356,8 @@ def write_images_sequence(self, nameformat, fps=None, verbose=True, verbose Boolean indicating whether to print information. - progress_bar - Boolean indicating whether to show the progress bar. + logger + Either 'bar' (progress bar) or None or any Proglog logger. Returns @@ -375,19 +373,18 @@ def write_images_sequence(self, nameformat, fps=None, verbose=True, ``ImageSequenceClip``. """ - verbose_print(verbose, "[MoviePy] Writing frames %s." % (nameformat)) + logger = proglog.default_bar_logger(logger) + logger(message='Moviepy - Writing frames %s.' % nameformat) tt = np.arange(0, self.duration, 1.0 / fps) filenames = [] total = int(self.duration / fps) + 1 - for i, t in tqdm(enumerate(tt), total=total, disable=not progress_bar): + for i, t in logger.iter_bar(t=list(enumerate(tt))): name = nameformat % i filenames.append(name) self.save_frame(name, t, withmask=withmask) - - verbose_print(verbose, - "[MoviePy]: Done writing frames %s.\n\n" % (nameformat)) + logger(message='Moviepy - Done writing frames %s.' % nameformat) return filenames @@ -396,7 +393,7 @@ def write_images_sequence(self, nameformat, fps=None, verbose=True, def write_gif(self, filename, fps=None, program='imageio', opt='nq', fuzz=1, verbose=True, loop=0, dispose=False, colors=None, tempfiles=False, - progress_bar=True): + logger='bar'): """ Write the VideoClip to a GIF file. Converts a VideoClip into an animated GIF using ImageMagick @@ -453,7 +450,7 @@ def write_gif(self, filename, fps=None, program='imageio', if program == 'imageio': write_gif_with_image_io(self, filename, fps=fps, opt=opt, loop=loop, verbose=verbose, colors=colors, - progress_bar=progress_bar) + logger=logger) elif tempfiles: # convert imageio opt variable to something that can be used with # ImageMagick @@ -466,12 +463,12 @@ def write_gif(self, filename, fps=None, program='imageio', program=program, opt=opt1, fuzz=fuzz, verbose=verbose, loop=loop, dispose=dispose, colors=colors, - progress_bar=progress_bar) + logger=logger) else: write_gif(self, filename, fps=fps, program=program, opt=opt, fuzz=fuzz, verbose=verbose, loop=loop, dispose=dispose, colors=colors, - progress_bar=progress_bar) + logger=logger) # ----------------------------------------------------------------- # F I L T E R I N G @@ -1161,7 +1158,7 @@ def __init__(self, txt=None, filename=None, size=None, color='black', print(" ".join(cmd)) try: - subprocess_call(cmd, verbose=False) + 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)) diff --git a/moviepy/video/io/ffmpeg_tools.py b/moviepy/video/io/ffmpeg_tools.py index 9bfcc8dc8..37611b14f 100644 --- a/moviepy/video/io/ffmpeg_tools.py +++ b/moviepy/video/io/ffmpeg_tools.py @@ -43,13 +43,13 @@ def ffmpeg_extract_subclip(filename, t1, t2, targetname=None): def ffmpeg_merge_video_audio(video,audio,output, vcodec='copy', acodec='copy', ffmpeg_output=False, - verbose = True): + logger = 'bar'): """ merges video file ``video`` and audio file ``audio`` into one movie file ``output``. """ cmd = [get_setting("FFMPEG_BINARY"), "-y", "-i", audio,"-i", video, "-vcodec", vcodec, "-acodec", acodec, output] - subprocess_call(cmd, verbose = verbose) + subprocess_call(cmd, logger = logger) def ffmpeg_extract_audio(inputfile,output,bitrate=3000,fps=44100): diff --git a/moviepy/video/io/ffmpeg_writer.py b/moviepy/video/io/ffmpeg_writer.py index f4a2fa6f0..27b6f12dd 100644 --- a/moviepy/video/io/ffmpeg_writer.py +++ b/moviepy/video/io/ffmpeg_writer.py @@ -9,7 +9,6 @@ from moviepy.compat import PY3, DEVNULL from moviepy.config import get_setting -from moviepy.tools import verbose_print class FFMPEG_VideoWriter: """ A class for FFMPEG-based video writing. @@ -197,7 +196,7 @@ def __exit__(self, exc_type, exc_value, traceback): def ffmpeg_write_video(clip, filename, fps, codec="libx264", bitrate=None, preset="medium", withmask=False, write_logfile=False, audiofile=None, verbose=True, threads=None, ffmpeg_params=None, - progress_bar=True): + logger='bar'): """ Write the clip to a videofile. See VideoClip.write_videofile for details on the parameters. """ @@ -205,8 +204,7 @@ def ffmpeg_write_video(clip, filename, fps, codec="libx264", bitrate=None, logfile = open(filename + ".log", 'w+') else: logfile = None - - verbose_print(verbose, "[MoviePy] Writing video %s\n"%filename) + logger(message='Moviepy - Writing video %s\n' % filename) with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec, preset=preset, bitrate=bitrate, logfile=logfile, audiofile=audiofile, threads=threads, @@ -214,7 +212,7 @@ def ffmpeg_write_video(clip, filename, fps, codec="libx264", bitrate=None, nframes = int(clip.duration*fps) - for t,frame in clip.iter_frames(progress_bar=progress_bar, with_times=True, + for t,frame in clip.iter_frames(logger=logger, with_times=True, fps=fps, dtype="uint8"): if withmask: mask = (255*clip.mask.get_frame(t)) @@ -226,8 +224,7 @@ def ffmpeg_write_video(clip, filename, fps, codec="libx264", bitrate=None, if write_logfile: logfile.close() - - verbose_print(verbose, "[MoviePy] Done.\n") + logger(message='Moviepy - Done !') def ffmpeg_write_image(filename, image, logfile=False): diff --git a/moviepy/video/io/gif_writers.py b/moviepy/video/io/gif_writers.py index 2c6f262ac..87beee7a9 100644 --- a/moviepy/video/io/gif_writers.py +++ b/moviepy/video/io/gif_writers.py @@ -1,9 +1,9 @@ import os import subprocess as sp -from tqdm import tqdm from moviepy.config import get_setting from moviepy.decorators import (requires_duration,use_clip_fps_by_default) -from moviepy.tools import verbose_print, subprocess_call +from moviepy.tools import subprocess_call +import proglog import numpy as np from moviepy.compat import DEVNULL @@ -19,7 +19,7 @@ @use_clip_fps_by_default def write_gif_with_tempfiles(clip, filename, fps=None, program= 'ImageMagick', opt="OptimizeTransparency", fuzz=1, verbose=True, - loop=0, dispose=True, colors=None, progress_bar=True): + loop=0, dispose=True, colors=None, logger='bar'): """ Write the VideoClip to a GIF file. @@ -29,24 +29,17 @@ def write_gif_with_tempfiles(clip, filename, fps=None, program= 'ImageMagick', them in the RAM. Useful on computers with little RAM. """ - - fileName, fileExtension = os.path.splitext(filename) + logger = proglog.default_bar_logger(logger) + fileName, ext = os.path.splitext(filename) tt = np.arange(0,clip.duration, 1.0/fps) tempfiles = [] + + logger(message='MoviePy - Building file %s\n' % filename) + logger(message='MoviePy - - Generating GIF frames') - verbose_print(verbose, "\n[MoviePy] Building file %s\n"%filename - +40*"-"+"\n") - - verbose_print(verbose, "[MoviePy] Generating GIF frames...\n") - - if progress_bar: - total = int(clip.duration*fps)+1 - iterator = tqdm(enumerate(tt), total=total) - else: - iterator = enumerate(tt) - - for i, t in iterator: + + for i, t in logger.iter_bar(t=list(enumerate(tt))): name = "%s_GIFTEMP%04d.png"%(fileName, i+1) tempfiles.append(name) @@ -55,7 +48,7 @@ def write_gif_with_tempfiles(clip, filename, fps=None, program= 'ImageMagick', delay = int(100.0/fps) if program == "ImageMagick": - verbose_print(verbose, "[MoviePy] Optimizing GIF with ImageMagick... ") + logger(message='MoviePy - - Optimizing GIF with ImageMagick...') cmd = [get_setting("IMAGEMAGICK_BINARY"), '-delay' , '%d'%delay, "-dispose" ,"%d"%(2 if dispose else 1), @@ -76,8 +69,8 @@ def write_gif_with_tempfiles(clip, filename, fps=None, program= 'ImageMagick', filename] try: - subprocess_call( cmd, verbose = verbose ) - verbose_print(verbose, "[MoviePy] GIF %s is ready."%filename) + subprocess_call(cmd, logger=logger) + logger(message='MoviePy - GIF ready: %s.' % filename) except (IOError,OSError) as err: @@ -101,7 +94,7 @@ def write_gif_with_tempfiles(clip, filename, fps=None, program= 'ImageMagick', @use_clip_fps_by_default def write_gif(clip, filename, fps=None, program= 'ImageMagick', opt="OptimizeTransparency", fuzz=1, verbose=True, withmask=True, - loop=0, dispose=True, colors=None, progress_bar=True): + loop=0, dispose=True, colors=None, logger='bar'): """ Write the VideoClip to a GIF file, without temporary files. Converts a VideoClip into an animated GIF using ImageMagick @@ -160,7 +153,7 @@ def write_gif(clip, filename, fps=None, program= 'ImageMagick', # delay= 100.0/fps - + logger = proglog.default_bar_logger(logger) if clip.mask is None: withmask = False @@ -220,12 +213,10 @@ def write_gif(clip, filename, fps=None, program= 'ImageMagick', proc3 = sp.Popen(cmd3, **popen_params) # We send all the frames to the first process - verbose_print(verbose, "\n[MoviePy] >>>> Building file %s\n"%filename) - verbose_print(verbose, "[MoviePy] Generating GIF frames...\n") - + logger(message='MoviePy - Building file %s' % filename) + logger(message='MoviePy - - Generating GIF frames.') try: - - for t,frame in clip.iter_frames(fps=fps, progress_bar=progress_bar, + for t,frame in clip.iter_frames(fps=fps, logger=logger, with_times=True, dtype="uint8"): if withmask: mask = 255 * clip.mask.get_frame(t) @@ -245,18 +236,18 @@ def write_gif(clip, filename, fps=None, program= 'ImageMagick', raise IOError(error) if program == 'ImageMagick': - verbose_print(verbose, "[MoviePy] Optimizing the GIF with ImageMagick...\n") + logger(message='MoviePy - - Optimizing GIF with ImageMagick.') proc1.stdin.close() proc1.wait() if program == 'ImageMagick': proc2.wait() if opt: proc3.wait() - verbose_print(verbose, "[MoviePy] >>>> File %s is ready!"%filename) + logger(message='MoviePy - - File ready: %s.' % filename) def write_gif_with_image_io(clip, filename, fps=None, opt=0, loop=0, - colors=None, verbose=True, progress_bar=True): + colors=None, verbose=True, logger='bar'): """ Writes the gif with the Python library ImageIO (calls FreeImage). @@ -268,6 +259,7 @@ def write_gif_with_image_io(clip, filename, fps=None, opt=0, loop=0, if colors is None: colors = 256 + logger = proglog.default_bar_logger(logger) if not IMAGEIO_FOUND: raise ImportError("Writing a gif with imageio requires ImageIO installed," @@ -285,9 +277,8 @@ def write_gif_with_image_io(clip, filename, fps=None, opt=0, loop=0, palettesize=colors, loop=loop ) + logger(message='MoviePy - Building file %s with imageio.' % filename) - verbose_print(verbose, "\n[MoviePy] Building file %s with imageio\n" % filename) - - for frame in clip.iter_frames(fps=fps, progress_bar=progress_bar, dtype='uint8'): + for frame in clip.iter_frames(fps=fps, logger=logger, dtype='uint8'): writer.append_data(frame) diff --git a/moviepy/video/tools/cuts.py b/moviepy/video/tools/cuts.py index 5c3d449a5..f8ab7d086 100644 --- a/moviepy/video/tools/cuts.py +++ b/moviepy/video/tools/cuts.py @@ -147,7 +147,7 @@ def distance(t1, t2): matching_frames = [] # the final result. - for (t,frame) in clip.iter_frames(with_times=True, progress_bar=True): + for (t,frame) in clip.iter_frames(with_times=True, logger='bar'): flat_frame = 1.0*frame.flatten() F_norm_sq = dot_product(flat_frame, flat_frame) @@ -274,7 +274,7 @@ def write_gifs(self, clip, gif_dir): @use_clip_fps_by_default def detect_scenes(clip=None, luminosities=None, thr=10, - progress_bar=True, fps=None): + logger='bar', fps=None): """ Detects scenes of a clip based on luminosity changes. Note that for large clip this may take some time @@ -320,7 +320,7 @@ def detect_scenes(clip=None, luminosities=None, thr=10, if luminosities is None: luminosities = [f.sum() for f in clip.iter_frames( - fps=fps, dtype='uint32', progress_bar=progress_bar)] + fps=fps, dtype='uint32', logger=logger)] luminosities = np.array(luminosities, dtype=float) if clip is not None: diff --git a/setup.py b/setup.py index a671945f4..cb8a9d2fa 100644 --- a/setup.py +++ b/setup.py @@ -66,7 +66,8 @@ def run_tests(self): 'imageio>=2.1.2,<3.0', 'tqdm>=4.11.2,<5.0', 'numpy', - 'requests>=2.8.1,<3.0' + 'requests>=2.8.1,<3.0', + 'proglog<=1.0.0' ] optional_reqs = [ diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index 7ac5dece9..000000000 --- a/tests/conftest.py +++ /dev/null @@ -1,7 +0,0 @@ -import pytest -from moviepy.utils import close_all_clips - -# @pytest.fixture(autouse=True, scope='function') -# def clean_between_tests(): -# yield -# close_all_clips(scope='global') \ No newline at end of file diff --git a/tests/test_PR.py b/tests/test_PR.py index f86af3a87..41e89db26 100644 --- a/tests/test_PR.py +++ b/tests/test_PR.py @@ -89,7 +89,7 @@ def test_PR_424(): def test_PR_458(): clip = ColorClip([1000, 600], color=(60, 60, 60), duration=2) clip.write_videofile(os.path.join(TMP_DIR, "test.mp4"), - progress_bar=False, fps=30) + logger=None, fps=30) clip.close() def test_PR_515():