From 1f0ba980be7b7f9b72ad0279e4308ec62f3d8a31 Mon Sep 17 00:00:00 2001 From: Jonathan Hadida Date: Sun, 2 Feb 2025 16:27:32 -0800 Subject: [PATCH 1/2] Move comment to the right spot --- moviepy/video/io/ffmpeg_reader.py | 4 +++ moviepy/video/io/ffmpeg_writer.py | 46 +++++++++++++++++-------------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/moviepy/video/io/ffmpeg_reader.py b/moviepy/video/io/ffmpeg_reader.py index 31645efc9..e19f1260c 100644 --- a/moviepy/video/io/ffmpeg_reader.py +++ b/moviepy/video/io/ffmpeg_reader.py @@ -29,9 +29,11 @@ def __init__( target_resolution=None, resize_algo="bicubic", fps_source="fps", + print_cmd=False, ): self.filename = filename self.proc = None + self.print_cmd = print_cmd infos = ffmpeg_parse_infos( filename, check_duration=check_duration, @@ -154,6 +156,8 @@ def initialize(self, start_time=0): "-", ] ) + if self.print_cmd: + print(" ".join(cmd)) popen_params = cross_platform_popen_params( { diff --git a/moviepy/video/io/ffmpeg_writer.py b/moviepy/video/io/ffmpeg_writer.py index d2fc8f11f..b875783b4 100644 --- a/moviepy/video/io/ffmpeg_writer.py +++ b/moviepy/video/io/ffmpeg_writer.py @@ -92,6 +92,7 @@ def __init__( threads=None, ffmpeg_params=None, pixel_format=None, + print_cmd=False, ): if logfile is None: logfile = sp.PIPE @@ -101,8 +102,6 @@ def __init__( self.audio_codec = audio_codec self.ext = self.filename.split(".")[-1] - pixel_format = "rgba" if with_mask else "rgb24" - # order is important cmd = [ FFMPEG_BINARY, @@ -111,12 +110,8 @@ def __init__( "error" if logfile == sp.PIPE else "info", "-f", "rawvideo", - "-vcodec", - "rawvideo", "-s", "%dx%d" % (size[0], size[1]), - "-pix_fmt", - pixel_format, "-r", "%.02f" % fps, "-an", @@ -133,10 +128,9 @@ def __init__( else: cmd.extend(["-vcodec", codec]) - cmd.extend(["-preset", preset]) - - if ffmpeg_params is not None: - cmd.extend(ffmpeg_params) + # Disable auto alt ref for transparent webm + if codec == "libvpx" and with_mask: + cmd.extend(["-auto-alt-ref", "0"]) if bitrate is not None: cmd.extend(["-b", bitrate]) @@ -144,18 +138,30 @@ def __init__( if threads is not None: cmd.extend(["-threads", str(threads)]) - # Disable auto alt ref for transparent webm and set pix format yo yuva420p - if codec == "libvpx" and with_mask: - cmd.extend(["-pix_fmt", "yuva420p"]) - cmd.extend(["-auto-alt-ref", "0"]) - elif ( - (codec == "libx264" or codec == "h264_nvenc") - and (size[0] % 2 == 0) - and (size[1] % 2 == 0) - ): - cmd.extend(["-pix_fmt", "yuva420p"]) + # Honor choice of pixel_format if specified manually + if pixel_format is None: + if ( # use yuva420p for transparent webm + codec == "libvpx" and with_mask + ) or ( + (codec == "libx264" or codec == "h264_nvenc") + and (size[0] % 2 == 0) + and (size[1] % 2 == 0) + ): + pixel_format = "yuva420p" + elif with_mask: + pixel_format = "rgba" + else: + pixel_format = "rgb24" + + cmd.extend(["-pix_fmt", pixel_format]) + cmd.extend(["-preset", preset]) + + if ffmpeg_params is not None: + cmd.extend(ffmpeg_params) cmd.extend([ffmpeg_escape_filename(filename)]) + if print_cmd: + print(" ".join(cmd)) popen_params = cross_platform_popen_params( {"stdout": sp.DEVNULL, "stderr": logfile, "stdin": sp.PIPE} From 8de8b1196f520382accc980953ae2f58641c49ea Mon Sep 17 00:00:00 2001 From: Jonathan Hadida Date: Sun, 2 Feb 2025 16:45:37 -0800 Subject: [PATCH 2/2] Propagate print_cmd to dependent functions and methods --- moviepy/video/VideoClip.py | 5 ++++- moviepy/video/io/ffmpeg_writer.py | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/moviepy/video/VideoClip.py b/moviepy/video/VideoClip.py index 0b22a6d56..5519e7445 100644 --- a/moviepy/video/VideoClip.py +++ b/moviepy/video/VideoClip.py @@ -226,6 +226,7 @@ def write_videofile( ffmpeg_params=None, logger="bar", pixel_format=None, + print_cmd=False, ): """Write the clip to a videofile. @@ -404,6 +405,7 @@ def write_videofile( ffmpeg_params=ffmpeg_params, logger=logger, pixel_format=pixel_format, + print_cmd=print_cmd, ) if remove_temp and make_audio: @@ -1867,7 +1869,8 @@ def __find_text_size( To summarize, the real height of the text is: ``initial padding + (lines - 1) * height + end padding`` or: - ``(ascent + stroke_width) + (lines - 1) * height + (descent + stroke_width)`` + ``(ascent + stroke_width) + (lines - 1) * height + + (descent + stroke_width)`` or: ``real_font_size + (stroke_width * 2) + (lines - 1) * height`` """ diff --git a/moviepy/video/io/ffmpeg_writer.py b/moviepy/video/io/ffmpeg_writer.py index b875783b4..b71d46203 100644 --- a/moviepy/video/io/ffmpeg_writer.py +++ b/moviepy/video/io/ffmpeg_writer.py @@ -259,6 +259,7 @@ def ffmpeg_write_video( ffmpeg_params=None, logger="bar", pixel_format=None, + print_cmd=False, ): """Write the clip to a videofile. See VideoClip.write_videofile for details on the parameters. @@ -288,6 +289,7 @@ def ffmpeg_write_video( threads=threads, ffmpeg_params=ffmpeg_params, pixel_format=pixel_format, + print_cmd=print_cmd, ) as writer: for t, frame in clip.iter_frames( logger=logger, with_times=True, fps=fps, dtype="uint8"