From b3a83fdbadd652562ee78c51c388690b6d4455fc Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Mon, 27 Mar 2023 21:43:27 +0200 Subject: [PATCH] fully functional multithreading --- bin/__pycache__/handler.cpython-310.pyc | Bin 5949 -> 6955 bytes bin/__pycache__/probe.cpython-310.pyc | Bin 2238 -> 2242 bytes bin/handler.py | 226 +++-- bin/lib/FidelityFX_CLI.exe | Bin 145408 -> 0 bytes bin/lib/ffmpeg/ffmpeg/__init__.py | 22 - .../__pycache__/__init__.cpython-310.pyc | Bin 546 -> 0 bytes .../ffmpeg/__pycache__/nodes.cpython-310.pyc | Bin 13001 -> 0 bytes bin/lib/ffmpeg/ffmpeg/_ffmpeg.py | 95 -- bin/lib/ffmpeg/ffmpeg/_filters.py | 510 ----------- bin/lib/ffmpeg/ffmpeg/_probe.py | 30 - bin/lib/ffmpeg/ffmpeg/_run.py | 347 -------- bin/lib/ffmpeg/ffmpeg/_utils.py | 108 --- bin/lib/ffmpeg/ffmpeg/_view.py | 108 --- bin/lib/ffmpeg/ffmpeg/dag.py | 240 ----- bin/lib/ffmpeg/ffmpeg/nodes.py | 380 -------- bin/lib/ffmpeg/ffmpeg/tests/__init__.py | 0 .../ffmpeg/ffmpeg/tests/sample_data/in1.mp4 | Bin 336833 -> 0 bytes .../ffmpeg/tests/sample_data/overlay.png | Bin 2212 -> 0 bytes bin/lib/ffmpeg/ffmpeg/tests/test_ffmpeg.py | 821 ------------------ bin/lib/ffmpeg/pyproject.toml | 15 - bin/lib/ffmpeg/pytest.ini | 2 - bin/lib/ffmpeg/setup.cfg | 2 - bin/lib/ffmpeg/setup.py | 100 --- bin/lib/ffmpeg/tox.ini | 24 - fsrimagevideoupscaler-cli.py | 32 +- 25 files changed, 157 insertions(+), 2905 deletions(-) delete mode 100644 bin/lib/FidelityFX_CLI.exe delete mode 100644 bin/lib/ffmpeg/ffmpeg/__init__.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/__pycache__/__init__.cpython-310.pyc delete mode 100644 bin/lib/ffmpeg/ffmpeg/__pycache__/nodes.cpython-310.pyc delete mode 100644 bin/lib/ffmpeg/ffmpeg/_ffmpeg.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/_filters.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/_probe.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/_run.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/_utils.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/_view.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/dag.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/nodes.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/tests/__init__.py delete mode 100644 bin/lib/ffmpeg/ffmpeg/tests/sample_data/in1.mp4 delete mode 100644 bin/lib/ffmpeg/ffmpeg/tests/sample_data/overlay.png delete mode 100644 bin/lib/ffmpeg/ffmpeg/tests/test_ffmpeg.py delete mode 100644 bin/lib/ffmpeg/pyproject.toml delete mode 100644 bin/lib/ffmpeg/pytest.ini delete mode 100644 bin/lib/ffmpeg/setup.cfg delete mode 100644 bin/lib/ffmpeg/setup.py delete mode 100644 bin/lib/ffmpeg/tox.ini diff --git a/bin/__pycache__/handler.cpython-310.pyc b/bin/__pycache__/handler.cpython-310.pyc index fc314413ecee905554aa3bc6471947051dcb6381..b6b5ddd107621595e265ac345d661c698707a6a7 100644 GIT binary patch literal 6955 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 H+^PCkcL}Xv literal 5949 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 diff --git a/bin/__pycache__/probe.cpython-310.pyc b/bin/__pycache__/probe.cpython-310.pyc index 8e413cba76b7adf6f2fd5dce3939f73f371a0aff..e3146e1c3b4f8dd20fc49af92969e2728a21e57f 100644 GIT binary patch delta 36 qcmdldcu0^tpO=@50SKZlD{kcWW@2=n9L{9K67QEkxKEHfpO=@50SI&zg*S40Gcnpv4remj+{ self.maxlength: - while self.files[self.maxlength - self.pos:self.maxlength - self.pos + 1] != " ": - self.pos += 1 - self.file_processing = self.files[:self.maxlength - self.pos] - if self.file_processing[len(self.file_processing) - 14:len(self.file_processing) - 12] == "ex": - self.pos += 5 - else: - pass - while self.files[self.maxlength - self.pos:self.maxlength - self.pos + 1] != " ": - self.pos += 1 - self.fileout.append(self.files[:self.maxlength - self.pos]) - self.filesopt = self.files[self.maxlength - self.pos:] - self.posx = 0 - self.posy = self.maxlength - - # Command refactoring for commands that are longer than 64K characters - if len(self.filesopt) > self.maxlength: - while len(self.filesopt) > self.maxlength: - self.posx += self.maxlength - self.pos - self.posy += self.maxlength - self.pos - self.pos = 1 - while self.files[self.posy - self.pos:self.posy - self.pos + 1] != " ": - self.pos += 1 - self.file_processing = self.files[self.posx:self.posy - self.pos] - if self.file_processing[len(self.file_processing) - 14:len(self.file_processing) - 12] == "ex": - self.pos += 5 - else: - pass - while self.files[self.posy - self.pos:self.posy - self.pos + 1] != " ": - self.pos += 1 - - self.file_processing = self.files[self.posx:self.posy - self.pos] - self.fileout.append(self.file_processing) - self.filesopt = self.files[self.posy - self.pos:] - self.fileout.append(self.filesopt) - else: - self.fileout.append(self.files[self.maxlength - self.pos:]) - else: - self.fileout.append(self.files) - - try: os.mkdir(f"{self.tmppath}sc") except FileExistsError: pass + + ############################################ + # + # Thread optimisation: Divide workload up into different threads & upscale using helper function + # + ############################################ + + self.threads = threads + if ( threads > multiprocessing.cpu_count() ): + self.threads = multiprocessing.cpu_count(); + + print( f'\n\nUsing { self.threads } threads\n\n' ); + + time.sleep( 2 ); + + self.proc_list = []; + self.file_list_length = len( self.file_list ); + for i in range( self.threads ): + self.files = ''; + for _ in range( int( self.file_list_length // self.threads ) ): + self.files += self.file_list.pop( 0 ); - print("prepared commands") - - # Upscaling images - print("\n\n\nUpscaling images... \n\n\n") - while self.fileout != []: - self.files_handle = self.fileout.pop(0) - if quality_mode == "default": - if self.os_type == "linux": - self.command_us = f"wine {fsrpath} -QualityMode {quality_setting} {self.files_handle}" - elif self.os_type == "win32": - self.command_us = f"FidelityFX_CLI -QualityMode {quality_setting} {self.files_handle}" - else: - print("OS CURRENTLY UNSUPPORTED!") - return False - else: - if self.os_type == "linux": - self.command_us = f"wine {fsrpath} -Scale {quality_setting} {quality_setting} {self.files_handle}" - elif self.os_type == "win32": - self.command_us = f"FidelityFX_CLI -Scale {quality_setting} {quality_setting} {self.files_handle}" - else: - print("OS CURRENTLY UNSUPPORTED!") - return False - print( self.command_us ) - os.system(self.command_us) - time.sleep(3) + if ( i == self.threads - 1 ): + for element in self.file_list: + self.files += element; + proc = multiprocessing.Process( name=i, target=self.upscalerEngine, args=( quality_mode, self.files, fsrpath, quality_setting, i, ) ); + proc.start(); + self.proc_list.append( proc ); + # await completion of all jobs + for proc in self.proc_list: + proc.join(); + # get Video's audio - print("Finished Upscaling individual images. \n\n\nRetrieving Video's audio to append") + print( 'Finished Upscaling individual images. \n\n\nRetrieving Video audio to append' ) + time.sleep( 2 ); try: os.remove(f"{self.tmppath}audio.aac") os.remove(f"{output_path}") except FileNotFoundError: pass - if self.os_type == "linux": - self.command = f"ffmpeg -i {self.filepath} -vn -acodec copy {self.tmppath}audio.aac" - elif self.os_type == "win32": - self.command = f"ffmpeg -i {self.filepath} -vn -acodec copy {self.tmppath}audio.aac" + if self.os_type == 'linux': + self.command = f'ffmpeg -i {self.filepath} -vn -acodec copy {self.tmppath}audio.aac' + elif self.os_type == 'win32': + self.command = f'ffmpeg -i {self.filepath} -vn -acodec copy {self.tmppath}audio.aac' else: - print("OS CURRENTLY UNSUPPORTED!") + print( 'OS CURRENTLY UNSUPPORTED!' ) return False - os.system(self.command) + os.system( self.command ) # reassemble Video - print("Reassembling Video... with framerate @", self.framerate) - if self.os_type == "linux": - self.command = f"ffmpeg -framerate {self.framerate} -i {self.tmppath}sc/ig%08d.png {output_path} -i {self.tmppath}audio.aac" - elif self.os_type == "win32": - self.command = f"ffmpeg -framerate {self.framerate} -i \"{self.tmppath}sc\\ig%08d.png\" {output_path} -i {self.tmppath}audio.aac" + print( 'Reassembling Video... with framerate @', self.framerate ) + if self.os_type == 'linux': + self.command = f'ffmpeg -framerate {self.framerate} -i {self.tmppath}sc/ig%08d.png {output_path} -i {self.tmppath}audio.aac' + elif self.os_type == 'win32': + self.command = f'ffmpeg -framerate {self.framerate} -i \"{self.tmppath}sc\\ig%08d.png\" {output_path} -i {self.tmppath}audio.aac' else: - print("OS CURRENTLY UNSUPPORTED!") + print( 'OS CURRENTLY UNSUPPORTED!' ); return False - os.system(self.command) + os.system( self.command ) - print("\n\n\n DONE \n\n\n\n") + print( '\n\n---------------------------------------------------------------------------------\n\nDONE \n\nFSRImageVideoUpscalerFrontend V1.1.0\n\nCopyright 2023 FSRImageVideoUpscalerFrontend contributors\nThis application comes with absolutely no warranty to the extent permitted by applicable law\n\n' ) + + + def upscalerEngine ( self, quality_mode, files, fsrpath, quality_setting, number ): + files = files; + # Refactoring of commands that are longer than 32K characters + fileout = []; + pos = 0; + if len( files ) > self.maxlength: + while files[self.maxlength - pos:self.maxlength - pos + 1] != ' ': + pos += 1 + file_processing = files[:self.maxlength - pos] + if file_processing[len(file_processing) - 14:len(file_processing) - 12] == 'ex': + pos += 5 + else: + pass + while files[self.maxlength - pos:self.maxlength - pos + 1] != ' ': + pos += 1 + fileout.append(files[:self.maxlength - pos]) + filesopt = files[self.maxlength - pos:] + posx = 0 + posy = self.maxlength + + # Command refactoring for commands that are longer than 64K characters + if len(filesopt) > self.maxlength: + while len(filesopt) > self.maxlength: + posx += self.maxlength - pos + posy += self.maxlength - pos + pos = 1 + while files[posy - pos:posy - pos + 1] != ' ': + pos += 1 + file_processing = files[posx:posy - pos] + if file_processing[len(file_processing) - 14:len(file_processing) - 12] == 'ex': + pos += 5 + else: + pass + while files[posy - pos:posy - pos + 1] != ' ': + pos += 1 + + file_processing = files[posx:posy - pos] + fileout.append(file_processing) + filesopt = files[posy - pos:] + fileout.append(filesopt) + else: + fileout.append(files[self.maxlength - pos:]) + else: + fileout.append(files) + + # Upscaling images + print( '\n\n\nUpscaling images... \n\n\n\n\n\n PROCESS: ', number, '\n\n\n' ) + + while len( fileout ) > 0: + files_handle = fileout.pop(0) + if quality_mode == 'default': + if self.os_type == 'linux': + command_us = f'wine {fsrpath} -QualityMode {quality_setting} {files_handle}' + elif self.os_type == 'win32': + command_us = f'FidelityFX_CLI -QualityMode {quality_setting} {files_handle}' + else: + print( 'OS CURRENTLY UNSUPPORTED!' ) + return False + else: + if self.os_type == "linux": + command_us = f'wine {fsrpath} -Scale {quality_setting} {quality_setting} {files_handle}' + elif self.os_type == "win32": + command_us = f'FidelityFX_CLI -Scale {quality_setting} {quality_setting} {files_handle}' + else: + print( 'OS CURRENTLY UNSUPPORTED!' ) + return False + sub = subprocess.Popen( command_us, shell=True ); + sub.wait(); + time.sleep(3) + print( '\n\nCompleted executing Job\n\n\n PROCESS: ', number, '\n\n\n' ); diff --git a/bin/lib/FidelityFX_CLI.exe b/bin/lib/FidelityFX_CLI.exe deleted file mode 100644 index 166bd2e165730023809c4c50a7fd0785c8d22052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145408 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 diff --git a/bin/lib/ffmpeg/ffmpeg/__init__.py b/bin/lib/ffmpeg/ffmpeg/__init__.py deleted file mode 100644 index a88d344..0000000 --- a/bin/lib/ffmpeg/ffmpeg/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import unicode_literals -from . import nodes -from . import _ffmpeg -from . import _filters -from . import _probe -from . import _run -from . import _view -from .nodes import * -from ._ffmpeg import * -from ._filters import * -from ._probe import * -from ._run import * -from ._view import * - -__all__ = ( - nodes.__all__ - + _ffmpeg.__all__ - + _probe.__all__ - + _run.__all__ - + _view.__all__ - + _filters.__all__ -) diff --git a/bin/lib/ffmpeg/ffmpeg/__pycache__/__init__.cpython-310.pyc b/bin/lib/ffmpeg/ffmpeg/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 9162c95bd56ade7f4beca149a82e128fc7a697b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmYk2yKdVs6oyHPlqe?#+Nsar3=xnyC^`kmk|CF(;Bp|F#|aHeGAOA*A1Oelyh&HD znfw4*+9v5C>mnh+@Berxh?j0UoiJ)YpFY|L&e&s|yl;XgUug9A1j{VR7=&Kq=4nJS>rXShNbiL zSuE$U4&5BdB!sc0RPf#5EeSt3n@!9FU^xzBK!6Y*YQuu02r43vC?a%3NuZ6O_8#Dl zg=s8C{Q6eibPZOkx^;a;JFajs^wr75`Ds&M<5y>~yIS{)+G98gT{~cF;S6u9xoa!$ z=GDKm{|^Ayx&h#D{bQq#o6e3NKgSFAM}&R0&)>S{Z(U}Ri&rVci_FBcl;V$6;&=Y~ E7kG+*V*mgE diff --git a/bin/lib/ffmpeg/ffmpeg/__pycache__/nodes.cpython-310.pyc b/bin/lib/ffmpeg/ffmpeg/__pycache__/nodes.cpython-310.pyc deleted file mode 100644 index 67f65b7f959f5caad120455f9be7004188fdb8d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13001 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 diff --git a/bin/lib/ffmpeg/ffmpeg/_ffmpeg.py b/bin/lib/ffmpeg/ffmpeg/_ffmpeg.py deleted file mode 100644 index 007624b..0000000 --- a/bin/lib/ffmpeg/ffmpeg/_ffmpeg.py +++ /dev/null @@ -1,95 +0,0 @@ -from __future__ import unicode_literals - -from past.builtins import basestring -from ._utils import basestring - -from .nodes import ( - filter_operator, - GlobalNode, - InputNode, - MergeOutputsNode, - OutputNode, - output_operator, -) - - -def input(filename, **kwargs): - """Input file URL (ffmpeg ``-i`` option) - - Any supplied kwargs are passed to ffmpeg verbatim (e.g. ``t=20``, - ``f='mp4'``, ``acodec='pcm'``, etc.). - - To tell ffmpeg to read from stdin, use ``pipe:`` as the filename. - - Official documentation: `Main options `__ - """ - kwargs['filename'] = filename - fmt = kwargs.pop('f', None) - if fmt: - if 'format' in kwargs: - raise ValueError("Can't specify both `format` and `f` kwargs") - kwargs['format'] = fmt - return InputNode(input.__name__, kwargs=kwargs).stream() - - -@output_operator() -def global_args(stream, *args): - """Add extra global command-line argument(s), e.g. ``-progress``.""" - return GlobalNode(stream, global_args.__name__, args).stream() - - -@output_operator() -def overwrite_output(stream): - """Overwrite output files without asking (ffmpeg ``-y`` option) - - Official documentation: `Main options `__ - """ - return GlobalNode(stream, overwrite_output.__name__, ['-y']).stream() - - -@output_operator() -def merge_outputs(*streams): - """Include all given outputs in one ffmpeg command line""" - return MergeOutputsNode(streams, merge_outputs.__name__).stream() - - -@filter_operator() -def output(*streams_and_filename, **kwargs): - """Output file URL - - Syntax: - `ffmpeg.output(stream1[, stream2, stream3...], filename, **ffmpeg_args)` - - Any supplied keyword arguments are passed to ffmpeg verbatim (e.g. - ``t=20``, ``f='mp4'``, ``acodec='pcm'``, ``vcodec='rawvideo'``, - etc.). Some keyword-arguments are handled specially, as shown below. - - Args: - video_bitrate: parameter for ``-b:v``, e.g. ``video_bitrate=1000``. - audio_bitrate: parameter for ``-b:a``, e.g. ``audio_bitrate=200``. - format: alias for ``-f`` parameter, e.g. ``format='mp4'`` - (equivalent to ``f='mp4'``). - - If multiple streams are provided, they are mapped to the same - output. - - To tell ffmpeg to write to stdout, use ``pipe:`` as the filename. - - Official documentation: `Synopsis `__ - """ - streams_and_filename = list(streams_and_filename) - if 'filename' not in kwargs: - if not isinstance(streams_and_filename[-1], basestring): - raise ValueError('A filename must be provided') - kwargs['filename'] = streams_and_filename.pop(-1) - streams = streams_and_filename - - fmt = kwargs.pop('f', None) - if fmt: - if 'format' in kwargs: - raise ValueError("Can't specify both `format` and `f` kwargs") - kwargs['format'] = fmt - return OutputNode(streams, output.__name__, kwargs=kwargs).stream() - - -__all__ = ['input', 'merge_outputs', 'output', 'overwrite_output'] diff --git a/bin/lib/ffmpeg/ffmpeg/_filters.py b/bin/lib/ffmpeg/ffmpeg/_filters.py deleted file mode 100644 index 5bca23d..0000000 --- a/bin/lib/ffmpeg/ffmpeg/_filters.py +++ /dev/null @@ -1,510 +0,0 @@ -from __future__ import unicode_literals - -from .nodes import FilterNode, filter_operator -from ._utils import escape_chars - - -@filter_operator() -def filter_multi_output(stream_spec, filter_name, *args, **kwargs): - """Apply custom filter with one or more outputs. - - This is the same as ``filter`` except that the filter can produce more than one - output. - - To reference an output stream, use either the ``.stream`` operator or bracket - shorthand: - - Example: - - ``` - split = ffmpeg.input('in.mp4').filter_multi_output('split') - split0 = split.stream(0) - split1 = split[1] - ffmpeg.concat(split0, split1).output('out.mp4').run() - ``` - """ - return FilterNode( - stream_spec, filter_name, args=args, kwargs=kwargs, max_inputs=None - ) - - -@filter_operator() -def filter(stream_spec, filter_name, *args, **kwargs): - """Apply custom filter. - - ``filter_`` is normally used by higher-level filter functions such as ``hflip``, - but if a filter implementation is missing from ``ffmpeg-python``, you can call - ``filter_`` directly to have ``ffmpeg-python`` pass the filter name and arguments - to ffmpeg verbatim. - - Args: - stream_spec: a Stream, list of Streams, or label-to-Stream dictionary mapping - filter_name: ffmpeg filter name, e.g. `colorchannelmixer` - *args: list of args to pass to ffmpeg verbatim - **kwargs: list of keyword-args to pass to ffmpeg verbatim - - The function name is suffixed with ``_`` in order avoid confusion with the standard - python ``filter`` function. - - Example: - - ``ffmpeg.input('in.mp4').filter('hflip').output('out.mp4').run()`` - """ - return filter_multi_output(stream_spec, filter_name, *args, **kwargs).stream() - - -@filter_operator() -def filter_(stream_spec, filter_name, *args, **kwargs): - """Alternate name for ``filter``, so as to not collide with the - built-in python ``filter`` operator. - """ - return filter(stream_spec, filter_name, *args, **kwargs) - - -@filter_operator() -def split(stream): - return FilterNode(stream, split.__name__) - - -@filter_operator() -def asplit(stream): - return FilterNode(stream, asplit.__name__) - - -@filter_operator() -def setpts(stream, expr): - """Change the PTS (presentation timestamp) of the input frames. - - Args: - expr: The expression which is evaluated for each frame to construct its - timestamp. - - Official documentation: `setpts, asetpts `__ - """ - return FilterNode(stream, setpts.__name__, args=[expr]).stream() - - -@filter_operator() -def trim(stream, **kwargs): - """Trim the input so that the output contains one continuous subpart of the input. - - Args: - start: Specify the time of the start of the kept section, i.e. the frame with - the timestamp start will be the first frame in the output. - end: Specify the time of the first frame that will be dropped, i.e. the frame - immediately preceding the one with the timestamp end will be the last frame - in the output. - start_pts: This is the same as start, except this option sets the start - timestamp in timebase units instead of seconds. - end_pts: This is the same as end, except this option sets the end timestamp in - timebase units instead of seconds. - duration: The maximum duration of the output in seconds. - start_frame: The number of the first frame that should be passed to the output. - end_frame: The number of the first frame that should be dropped. - - Official documentation: `trim `__ - """ - return FilterNode(stream, trim.__name__, kwargs=kwargs).stream() - - -@filter_operator() -def overlay(main_parent_node, overlay_parent_node, eof_action='repeat', **kwargs): - """Overlay one video on top of another. - - Args: - x: Set the expression for the x coordinates of the overlaid video on the main - video. Default value is 0. In case the expression is invalid, it is set to - a huge value (meaning that the overlay will not be displayed within the - output visible area). - y: Set the expression for the y coordinates of the overlaid video on the main - video. Default value is 0. In case the expression is invalid, it is set to - a huge value (meaning that the overlay will not be displayed within the - output visible area). - eof_action: The action to take when EOF is encountered on the secondary input; - it accepts one of the following values: - - * ``repeat``: Repeat the last frame (the default). - * ``endall``: End both streams. - * ``pass``: Pass the main input through. - - eval: Set when the expressions for x, and y are evaluated. - It accepts the following values: - - * ``init``: only evaluate expressions once during the filter initialization - or when a command is processed - * ``frame``: evaluate expressions for each incoming frame - - Default value is ``frame``. - shortest: If set to 1, force the output to terminate when the shortest input - terminates. Default value is 0. - format: Set the format for the output video. - It accepts the following values: - - * ``yuv420``: force YUV420 output - * ``yuv422``: force YUV422 output - * ``yuv444``: force YUV444 output - * ``rgb``: force packed RGB output - * ``gbrp``: force planar RGB output - - Default value is ``yuv420``. - rgb (deprecated): If set to 1, force the filter to accept inputs in the RGB - color space. Default value is 0. This option is deprecated, use format - instead. - repeatlast: If set to 1, force the filter to draw the last overlay frame over - the main input until the end of the stream. A value of 0 disables this - behavior. Default value is 1. - - Official documentation: `overlay `__ - """ - kwargs['eof_action'] = eof_action - return FilterNode( - [main_parent_node, overlay_parent_node], - overlay.__name__, - kwargs=kwargs, - max_inputs=2, - ).stream() - - -@filter_operator() -def hflip(stream): - """Flip the input video horizontally. - - Official documentation: `hflip `__ - """ - return FilterNode(stream, hflip.__name__).stream() - - -@filter_operator() -def vflip(stream): - """Flip the input video vertically. - - Official documentation: `vflip `__ - """ - return FilterNode(stream, vflip.__name__).stream() - - -@filter_operator() -def crop(stream, x, y, width, height, **kwargs): - """Crop the input video. - - Args: - x: The horizontal position, in the input video, of the left edge of - the output video. - y: The vertical position, in the input video, of the top edge of the - output video. - width: The width of the output video. Must be greater than 0. - height: The height of the output video. Must be greater than 0. - - Official documentation: `crop `__ - """ - return FilterNode( - stream, crop.__name__, args=[width, height, x, y], kwargs=kwargs - ).stream() - - -@filter_operator() -def drawbox(stream, x, y, width, height, color, thickness=None, **kwargs): - """Draw a colored box on the input image. - - Args: - x: The expression which specifies the top left corner x coordinate of the box. - It defaults to 0. - y: The expression which specifies the top left corner y coordinate of the box. - It defaults to 0. - width: Specify the width of the box; if 0 interpreted as the input width. It - defaults to 0. - height: Specify the height of the box; if 0 interpreted as the input height. It - defaults to 0. - color: Specify the color of the box to write. For the general syntax of this - option, check the "Color" section in the ffmpeg-utils manual. If the - special value invert is used, the box edge color is the same as the video - with inverted luma. - thickness: The expression which sets the thickness of the box edge. Default - value is 3. - w: Alias for ``width``. - h: Alias for ``height``. - c: Alias for ``color``. - t: Alias for ``thickness``. - - Official documentation: `drawbox `__ - """ - if thickness: - kwargs['t'] = thickness - return FilterNode( - stream, drawbox.__name__, args=[x, y, width, height, color], kwargs=kwargs - ).stream() - - -@filter_operator() -def drawtext(stream, text=None, x=0, y=0, escape_text=True, **kwargs): - """Draw a text string or text from a specified file on top of a video, using the - libfreetype library. - - To enable compilation of this filter, you need to configure FFmpeg with - ``--enable-libfreetype``. To enable default font fallback and the font option you - need to configure FFmpeg with ``--enable-libfontconfig``. To enable the - text_shaping option, you need to configure FFmpeg with ``--enable-libfribidi``. - - Args: - box: Used to draw a box around text using the background color. The value must - be either 1 (enable) or 0 (disable). The default value of box is 0. - boxborderw: Set the width of the border to be drawn around the box using - boxcolor. The default value of boxborderw is 0. - boxcolor: The color to be used for drawing box around text. For the syntax of - this option, check the "Color" section in the ffmpeg-utils manual. The - default value of boxcolor is "white". - line_spacing: Set the line spacing in pixels of the border to be drawn around - the box using box. The default value of line_spacing is 0. - borderw: Set the width of the border to be drawn around the text using - bordercolor. The default value of borderw is 0. - bordercolor: Set the color to be used for drawing border around text. For the - syntax of this option, check the "Color" section in the ffmpeg-utils - manual. The default value of bordercolor is "black". - expansion: Select how the text is expanded. Can be either none, strftime - (deprecated) or normal (default). See the Text expansion section below for - details. - basetime: Set a start time for the count. Value is in microseconds. Only - applied in the deprecated strftime expansion mode. To emulate in normal - expansion mode use the pts function, supplying the start time (in seconds) - as the second argument. - fix_bounds: If true, check and fix text coords to avoid clipping. - fontcolor: The color to be used for drawing fonts. For the syntax of this - option, check the "Color" section in the ffmpeg-utils manual. The default - value of fontcolor is "black". - fontcolor_expr: String which is expanded the same way as text to obtain dynamic - fontcolor value. By default this option has empty value and is not - processed. When this option is set, it overrides fontcolor option. - font: The font family to be used for drawing text. By default Sans. - fontfile: The font file to be used for drawing text. The path must be included. - This parameter is mandatory if the fontconfig support is disabled. - alpha: Draw the text applying alpha blending. The value can be a number between - 0.0 and 1.0. The expression accepts the same variables x, y as well. The - default value is 1. Please see fontcolor_expr. - fontsize: The font size to be used for drawing text. The default value of - fontsize is 16. - text_shaping: If set to 1, attempt to shape the text (for example, reverse the - order of right-to-left text and join Arabic characters) before drawing it. - Otherwise, just draw the text exactly as given. By default 1 (if supported). - ft_load_flags: The flags to be used for loading the fonts. The flags map the - corresponding flags supported by libfreetype, and are a combination of the - following values: - - * ``default`` - * ``no_scale`` - * ``no_hinting`` - * ``render`` - * ``no_bitmap`` - * ``vertical_layout`` - * ``force_autohint`` - * ``crop_bitmap`` - * ``pedantic`` - * ``ignore_global_advance_width`` - * ``no_recurse`` - * ``ignore_transform`` - * ``monochrome`` - * ``linear_design`` - * ``no_autohint`` - - Default value is "default". For more information consult the documentation - for the FT_LOAD_* libfreetype flags. - shadowcolor: The color to be used for drawing a shadow behind the drawn text. - For the syntax of this option, check the "Color" section in the ffmpeg-utils - manual. The default value of shadowcolor is "black". - shadowx: The x offset for the text shadow position with respect to the position - of the text. It can be either positive or negative values. The default value - is "0". - shadowy: The y offset for the text shadow position with respect to the position - of the text. It can be either positive or negative values. The default value - is "0". - start_number: The starting frame number for the n/frame_num variable. The - default value is "0". - tabsize: The size in number of spaces to use for rendering the tab. Default - value is 4. - timecode: Set the initial timecode representation in "hh:mm:ss[:;.]ff" format. - It can be used with or without text parameter. timecode_rate option must be - specified. - rate: Set the timecode frame rate (timecode only). - timecode_rate: Alias for ``rate``. - r: Alias for ``rate``. - tc24hmax: If set to 1, the output of the timecode option will wrap around at 24 - hours. Default is 0 (disabled). - text: The text string to be drawn. The text must be a sequence of UTF-8 encoded - characters. This parameter is mandatory if no file is specified with the - parameter textfile. - textfile: A text file containing text to be drawn. The text must be a sequence - of UTF-8 encoded characters. This parameter is mandatory if no text string - is specified with the parameter text. If both text and textfile are - specified, an error is thrown. - reload: If set to 1, the textfile will be reloaded before each frame. Be sure - to update it atomically, or it may be read partially, or even fail. - x: The expression which specifies the offset where text will be drawn within - the video frame. It is relative to the left border of the output image. The - default value is "0". - y: The expression which specifies the offset where text will be drawn within - the video frame. It is relative to the top border of the output image. The - default value is "0". See below for the list of accepted constants and - functions. - - Expression constants: - The parameters for x and y are expressions containing the following constants - and functions: - - dar: input display aspect ratio, it is the same as ``(w / h) * sar`` - - hsub: horizontal chroma subsample values. For example for the pixel format - "yuv422p" hsub is 2 and vsub is 1. - - vsub: vertical chroma subsample values. For example for the pixel format - "yuv422p" hsub is 2 and vsub is 1. - - line_h: the height of each text line - - lh: Alias for ``line_h``. - - main_h: the input height - - h: Alias for ``main_h``. - - H: Alias for ``main_h``. - - main_w: the input width - - w: Alias for ``main_w``. - - W: Alias for ``main_w``. - - ascent: the maximum distance from the baseline to the highest/upper grid - coordinate used to place a glyph outline point, for all the rendered glyphs. - It is a positive value, due to the grid's orientation with the Y axis - upwards. - - max_glyph_a: Alias for ``ascent``. - - descent: the maximum distance from the baseline to the lowest grid - coordinate used to place a glyph outline - point, for all the rendered glyphs. This is a negative value, due to the - grid's orientation, with the Y axis upwards. - - max_glyph_d: Alias for ``descent``. - - max_glyph_h: maximum glyph height, that is the maximum height for all the - glyphs contained in the rendered text, it is equivalent to ascent - descent. - - max_glyph_w: maximum glyph width, that is the maximum width for all the - glyphs contained in the rendered text. - - n: the number of input frame, starting from 0 - - rand(min, max): return a random number included between min and max - - sar: The input sample aspect ratio. - - t: timestamp expressed in seconds, NAN if the input timestamp is unknown - - text_h: the height of the rendered text - - th: Alias for ``text_h``. - - text_w: the width of the rendered text - - tw: Alias for ``text_w``. - - x: the x offset coordinates where the text is drawn. - - y: the y offset coordinates where the text is drawn. - - These parameters allow the x and y expressions to refer each other, so you can - for example specify ``y=x/dar``. - - Official documentation: `drawtext `__ - """ - if text is not None: - if escape_text: - text = escape_chars(text, '\\\'%') - kwargs['text'] = text - if x != 0: - kwargs['x'] = x - if y != 0: - kwargs['y'] = y - return filter(stream, drawtext.__name__, **kwargs) - - -@filter_operator() -def concat(*streams, **kwargs): - """Concatenate audio and video streams, joining them together one after the other. - - The filter works on segments of synchronized video and audio streams. All segments - must have the same number of streams of each type, and that will also be the number - of streams at output. - - Args: - unsafe: Activate unsafe mode: do not fail if segments have a different format. - - Related streams do not always have exactly the same duration, for various reasons - including codec frame size or sloppy authoring. For that reason, related - synchronized streams (e.g. a video and its audio track) should be concatenated at - once. The concat filter will use the duration of the longest stream in each segment - (except the last one), and if necessary pad shorter audio streams with silence. - - For this filter to work correctly, all segments must start at timestamp 0. - - All corresponding streams must have the same parameters in all segments; the - filtering system will automatically select a common pixel format for video streams, - and a common sample format, sample rate and channel layout for audio streams, but - other settings, such as resolution, must be converted explicitly by the user. - - Different frame rates are acceptable but will result in variable frame rate at - output; be sure to configure the output file to handle it. - - Official documentation: `concat `__ - """ - video_stream_count = kwargs.get('v', 1) - audio_stream_count = kwargs.get('a', 0) - stream_count = video_stream_count + audio_stream_count - if len(streams) % stream_count != 0: - raise ValueError( - 'Expected concat input streams to have length multiple of {} (v={}, a={}); got {}'.format( - stream_count, video_stream_count, audio_stream_count, len(streams) - ) - ) - kwargs['n'] = int(len(streams) / stream_count) - return FilterNode(streams, concat.__name__, kwargs=kwargs, max_inputs=None).stream() - - -@filter_operator() -def zoompan(stream, **kwargs): - """Apply Zoom & Pan effect. - - Args: - zoom: Set the zoom expression. Default is 1. - x: Set the x expression. Default is 0. - y: Set the y expression. Default is 0. - d: Set the duration expression in number of frames. This sets for how many - number of frames effect will last for single input image. - s: Set the output image size, default is ``hd720``. - fps: Set the output frame rate, default is 25. - z: Alias for ``zoom``. - - Official documentation: `zoompan `__ - """ - return FilterNode(stream, zoompan.__name__, kwargs=kwargs).stream() - - -@filter_operator() -def hue(stream, **kwargs): - """Modify the hue and/or the saturation of the input. - - Args: - h: Specify the hue angle as a number of degrees. It accepts an expression, and - defaults to "0". - s: Specify the saturation in the [-10,10] range. It accepts an expression and - defaults to "1". - H: Specify the hue angle as a number of radians. It accepts an expression, and - defaults to "0". - b: Specify the brightness in the [-10,10] range. It accepts an expression and - defaults to "0". - - Official documentation: `hue `__ - """ - return FilterNode(stream, hue.__name__, kwargs=kwargs).stream() - - -@filter_operator() -def colorchannelmixer(stream, *args, **kwargs): - """Adjust video input frames by re-mixing color channels. - - Official documentation: `colorchannelmixer `__ - """ - return FilterNode(stream, colorchannelmixer.__name__, kwargs=kwargs).stream() - - -__all__ = [ - 'colorchannelmixer', - 'concat', - 'crop', - 'drawbox', - 'drawtext', - 'filter', - 'filter_', - 'filter_multi_output', - 'hflip', - 'hue', - 'overlay', - 'setpts', - 'trim', - 'vflip', - 'zoompan', -] diff --git a/bin/lib/ffmpeg/ffmpeg/_probe.py b/bin/lib/ffmpeg/ffmpeg/_probe.py deleted file mode 100644 index fdb4e72..0000000 --- a/bin/lib/ffmpeg/ffmpeg/_probe.py +++ /dev/null @@ -1,30 +0,0 @@ -import json -import subprocess -from ._run import Error -from ._utils import convert_kwargs_to_cmd_line_args - - -def probe(filename, cmd='ffprobe', timeout=None, **kwargs): - """Run ffprobe on the specified file and return a JSON representation of the output. - - Raises: - :class:`ffmpeg.Error`: if ffprobe returns a non-zero exit code, - an :class:`Error` is returned with a generic error message. - The stderr output can be retrieved by accessing the - ``stderr`` property of the exception. - """ - args = [cmd, '-show_format', '-show_streams', '-of', 'json'] - args += convert_kwargs_to_cmd_line_args(kwargs) - args += [filename] - - p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) - communicate_kwargs = {} - if timeout is not None: - communicate_kwargs['timeout'] = timeout - out, err = p.communicate(**communicate_kwargs) - if p.returncode != 0: - raise Error('ffprobe', out, err) - return json.loads(out.decode('utf-8')) - - -__all__ = ['probe'] diff --git a/bin/lib/ffmpeg/ffmpeg/_run.py b/bin/lib/ffmpeg/ffmpeg/_run.py deleted file mode 100644 index f42d1d7..0000000 --- a/bin/lib/ffmpeg/ffmpeg/_run.py +++ /dev/null @@ -1,347 +0,0 @@ -from __future__ import unicode_literals -from .dag import get_outgoing_edges, topo_sort -from ._utils import basestring, convert_kwargs_to_cmd_line_args -from builtins import str -from functools import reduce -import copy -import operator -import subprocess - -from ._ffmpeg import input, output -from .nodes import ( - get_stream_spec_nodes, - FilterNode, - GlobalNode, - InputNode, - OutputNode, - output_operator, -) - -try: - from collections.abc import Iterable -except ImportError: - from collections import Iterable - - -class Error(Exception): - def __init__(self, cmd, stdout, stderr): - super(Error, self).__init__( - '{} error (see stderr output for detail)'.format(cmd) - ) - self.stdout = stdout - self.stderr = stderr - - -def _get_input_args(input_node): - if input_node.name == input.__name__: - kwargs = copy.copy(input_node.kwargs) - filename = kwargs.pop('filename') - fmt = kwargs.pop('format', None) - video_size = kwargs.pop('video_size', None) - args = [] - if fmt: - args += ['-f', fmt] - if video_size: - args += ['-video_size', '{}x{}'.format(video_size[0], video_size[1])] - args += convert_kwargs_to_cmd_line_args(kwargs) - args += ['-i', filename] - else: - raise ValueError('Unsupported input node: {}'.format(input_node)) - return args - - -def _format_input_stream_name(stream_name_map, edge, is_final_arg=False): - prefix = stream_name_map[edge.upstream_node, edge.upstream_label] - if not edge.upstream_selector: - suffix = '' - else: - suffix = ':{}'.format(edge.upstream_selector) - if is_final_arg and isinstance(edge.upstream_node, InputNode): - ## Special case: `-map` args should not have brackets for input - ## nodes. - fmt = '{}{}' - else: - fmt = '[{}{}]' - return fmt.format(prefix, suffix) - - -def _format_output_stream_name(stream_name_map, edge): - return '[{}]'.format(stream_name_map[edge.upstream_node, edge.upstream_label]) - - -def _get_filter_spec(node, outgoing_edge_map, stream_name_map): - incoming_edges = node.incoming_edges - outgoing_edges = get_outgoing_edges(node, outgoing_edge_map) - inputs = [ - _format_input_stream_name(stream_name_map, edge) for edge in incoming_edges - ] - outputs = [ - _format_output_stream_name(stream_name_map, edge) for edge in outgoing_edges - ] - filter_spec = '{}{}{}'.format( - ''.join(inputs), node._get_filter(outgoing_edges), ''.join(outputs) - ) - return filter_spec - - -def _allocate_filter_stream_names(filter_nodes, outgoing_edge_maps, stream_name_map): - stream_count = 0 - for upstream_node in filter_nodes: - outgoing_edge_map = outgoing_edge_maps[upstream_node] - for upstream_label, downstreams in sorted(outgoing_edge_map.items()): - if len(downstreams) > 1: - # TODO: automatically insert `splits` ahead of time via graph transformation. - raise ValueError( - 'Encountered {} with multiple outgoing edges with same upstream ' - 'label {!r}; a `split` filter is probably required'.format( - upstream_node, upstream_label - ) - ) - stream_name_map[upstream_node, upstream_label] = 's{}'.format(stream_count) - stream_count += 1 - - -def _get_filter_arg(filter_nodes, outgoing_edge_maps, stream_name_map): - _allocate_filter_stream_names(filter_nodes, outgoing_edge_maps, stream_name_map) - filter_specs = [ - _get_filter_spec(node, outgoing_edge_maps[node], stream_name_map) - for node in filter_nodes - ] - return ';'.join(filter_specs) - - -def _get_global_args(node): - return list(node.args) - - -def _get_output_args(node, stream_name_map): - if node.name != output.__name__: - raise ValueError('Unsupported output node: {}'.format(node)) - args = [] - - if len(node.incoming_edges) == 0: - raise ValueError('Output node {} has no mapped streams'.format(node)) - - for edge in node.incoming_edges: - # edge = node.incoming_edges[0] - stream_name = _format_input_stream_name( - stream_name_map, edge, is_final_arg=True - ) - if stream_name != '0' or len(node.incoming_edges) > 1: - args += ['-map', stream_name] - - kwargs = copy.copy(node.kwargs) - filename = kwargs.pop('filename') - if 'format' in kwargs: - args += ['-f', kwargs.pop('format')] - if 'video_bitrate' in kwargs: - args += ['-b:v', str(kwargs.pop('video_bitrate'))] - if 'audio_bitrate' in kwargs: - args += ['-b:a', str(kwargs.pop('audio_bitrate'))] - if 'video_size' in kwargs: - video_size = kwargs.pop('video_size') - if not isinstance(video_size, basestring) and isinstance(video_size, Iterable): - video_size = '{}x{}'.format(video_size[0], video_size[1]) - args += ['-video_size', video_size] - args += convert_kwargs_to_cmd_line_args(kwargs) - args += [filename] - return args - - -@output_operator() -def get_args(stream_spec, overwrite_output=False): - """Build command-line arguments to be passed to ffmpeg.""" - nodes = get_stream_spec_nodes(stream_spec) - args = [] - # TODO: group nodes together, e.g. `-i somefile -r somerate`. - sorted_nodes, outgoing_edge_maps = topo_sort(nodes) - input_nodes = [node for node in sorted_nodes if isinstance(node, InputNode)] - output_nodes = [node for node in sorted_nodes if isinstance(node, OutputNode)] - global_nodes = [node for node in sorted_nodes if isinstance(node, GlobalNode)] - filter_nodes = [node for node in sorted_nodes if isinstance(node, FilterNode)] - stream_name_map = {(node, None): str(i) for i, node in enumerate(input_nodes)} - filter_arg = _get_filter_arg(filter_nodes, outgoing_edge_maps, stream_name_map) - args += reduce(operator.add, [_get_input_args(node) for node in input_nodes]) - if filter_arg: - args += ['-filter_complex', filter_arg] - args += reduce( - operator.add, [_get_output_args(node, stream_name_map) for node in output_nodes] - ) - args += reduce(operator.add, [_get_global_args(node) for node in global_nodes], []) - if overwrite_output: - args += ['-y'] - return args - - -@output_operator() -def compile(stream_spec, cmd='ffmpeg', overwrite_output=False): - """Build command-line for invoking ffmpeg. - - The :meth:`run` function uses this to build the command line - arguments and should work in most cases, but calling this function - directly is useful for debugging or if you need to invoke ffmpeg - manually for whatever reason. - - This is the same as calling :meth:`get_args` except that it also - includes the ``ffmpeg`` command as the first argument. - """ - if isinstance(cmd, basestring): - cmd = [cmd] - elif type(cmd) != list: - cmd = list(cmd) - return cmd + get_args(stream_spec, overwrite_output=overwrite_output) - - -@output_operator() -def run_async( - stream_spec, - cmd='ffmpeg', - pipe_stdin=False, - pipe_stdout=False, - pipe_stderr=False, - quiet=False, - overwrite_output=False, - cwd=None, -): - """Asynchronously invoke ffmpeg for the supplied node graph. - - Args: - pipe_stdin: if True, connect pipe to subprocess stdin (to be - used with ``pipe:`` ffmpeg inputs). - pipe_stdout: if True, connect pipe to subprocess stdout (to be - used with ``pipe:`` ffmpeg outputs). - pipe_stderr: if True, connect pipe to subprocess stderr. - quiet: shorthand for setting ``capture_stdout`` and - ``capture_stderr``. - **kwargs: keyword-arguments passed to ``get_args()`` (e.g. - ``overwrite_output=True``). - - Returns: - A `subprocess Popen`_ object representing the child process. - - Examples: - Run and stream input:: - - process = ( - ffmpeg - .input('pipe:', format='rawvideo', pix_fmt='rgb24', s='{}x{}'.format(width, height)) - .output(out_filename, pix_fmt='yuv420p') - .overwrite_output() - .run_async(pipe_stdin=True) - ) - process.communicate(input=input_data) - - Run and capture output:: - - process = ( - ffmpeg - .input(in_filename) - .output('pipe:', format='rawvideo', pix_fmt='rgb24') - .run_async(pipe_stdout=True, pipe_stderr=True) - ) - out, err = process.communicate() - - Process video frame-by-frame using numpy:: - - process1 = ( - ffmpeg - .input(in_filename) - .output('pipe:', format='rawvideo', pix_fmt='rgb24') - .run_async(pipe_stdout=True) - ) - - process2 = ( - ffmpeg - .input('pipe:', format='rawvideo', pix_fmt='rgb24', s='{}x{}'.format(width, height)) - .output(out_filename, pix_fmt='yuv420p') - .overwrite_output() - .run_async(pipe_stdin=True) - ) - - while True: - in_bytes = process1.stdout.read(width * height * 3) - if not in_bytes: - break - in_frame = ( - np - .frombuffer(in_bytes, np.uint8) - .reshape([height, width, 3]) - ) - out_frame = in_frame * 0.3 - process2.stdin.write( - frame - .astype(np.uint8) - .tobytes() - ) - - process2.stdin.close() - process1.wait() - process2.wait() - - .. _subprocess Popen: https://docs.python.org/3/library/subprocess.html#popen-objects - """ - args = compile(stream_spec, cmd, overwrite_output=overwrite_output) - stdin_stream = subprocess.PIPE if pipe_stdin else None - stdout_stream = subprocess.PIPE if pipe_stdout else None - stderr_stream = subprocess.PIPE if pipe_stderr else None - if quiet: - stderr_stream = subprocess.STDOUT - stdout_stream = subprocess.DEVNULL - return subprocess.Popen( - args, - stdin=stdin_stream, - stdout=stdout_stream, - stderr=stderr_stream, - cwd=cwd, - ) - - -@output_operator() -def run( - stream_spec, - cmd='ffmpeg', - capture_stdout=False, - capture_stderr=False, - input=None, - quiet=False, - overwrite_output=False, - cwd=None, -): - """Invoke ffmpeg for the supplied node graph. - - Args: - capture_stdout: if True, capture stdout (to be used with - ``pipe:`` ffmpeg outputs). - capture_stderr: if True, capture stderr. - quiet: shorthand for setting ``capture_stdout`` and ``capture_stderr``. - input: text to be sent to stdin (to be used with ``pipe:`` - ffmpeg inputs) - **kwargs: keyword-arguments passed to ``get_args()`` (e.g. - ``overwrite_output=True``). - - Returns: (out, err) tuple containing captured stdout and stderr data. - """ - process = run_async( - stream_spec, - cmd, - pipe_stdin=input is not None, - pipe_stdout=capture_stdout, - pipe_stderr=capture_stderr, - quiet=quiet, - overwrite_output=overwrite_output, - cwd=cwd, - ) - out, err = process.communicate(input) - retcode = process.poll() - if retcode: - raise Error('ffmpeg', out, err) - return out, err - - -__all__ = [ - 'compile', - 'Error', - 'get_args', - 'run', - 'run_async', -] diff --git a/bin/lib/ffmpeg/ffmpeg/_utils.py b/bin/lib/ffmpeg/ffmpeg/_utils.py deleted file mode 100644 index 9baa2c7..0000000 --- a/bin/lib/ffmpeg/ffmpeg/_utils.py +++ /dev/null @@ -1,108 +0,0 @@ -from __future__ import unicode_literals -from builtins import str -from past.builtins import basestring -import hashlib -import sys - - -if sys.version_info.major == 2: - # noinspection PyUnresolvedReferences,PyShadowingBuiltins - str = str - -try: - from collections.abc import Iterable -except ImportError: - from collections import Iterable - - -# `past.builtins.basestring` module can't be imported on Python3 in some environments (Ubuntu). -# This code is copy-pasted from it to avoid crashes. -class BaseBaseString(type): - def __instancecheck__(cls, instance): - return isinstance(instance, (bytes, str)) - - def __subclasshook__(cls, thing): - # TODO: What should go here? - raise NotImplemented - - -def with_metaclass(meta, *bases): - class metaclass(meta): - __call__ = type.__call__ - __init__ = type.__init__ - - def __new__(cls, name, this_bases, d): - if this_bases is None: - return type.__new__(cls, name, (), d) - return meta(name, bases, d) - - return metaclass('temporary_class', None, {}) - - -if sys.version_info.major >= 3: - - class basestring(with_metaclass(BaseBaseString)): - pass - -else: - # noinspection PyUnresolvedReferences,PyCompatibility - from builtins import basestring - - -def _recursive_repr(item): - """Hack around python `repr` to deterministically represent dictionaries. - - This is able to represent more things than json.dumps, since it does not require - things to be JSON serializable (e.g. datetimes). - """ - if isinstance(item, basestring): - result = str(item) - elif isinstance(item, list): - result = '[{}]'.format(', '.join([_recursive_repr(x) for x in item])) - elif isinstance(item, dict): - kv_pairs = [ - '{}: {}'.format(_recursive_repr(k), _recursive_repr(item[k])) - for k in sorted(item) - ] - result = '{' + ', '.join(kv_pairs) + '}' - else: - result = repr(item) - return result - - -def get_hash(item): - repr_ = _recursive_repr(item).encode('utf-8') - return hashlib.md5(repr_).hexdigest() - - -def get_hash_int(item): - return int(get_hash(item), base=16) - - -def escape_chars(text, chars): - """Helper function to escape uncomfortable characters.""" - text = str(text) - chars = list(set(chars)) - if '\\' in chars: - chars.remove('\\') - chars.insert(0, '\\') - for ch in chars: - text = text.replace(ch, '\\' + ch) - return text - - -def convert_kwargs_to_cmd_line_args(kwargs): - """Helper function to build command line arguments out of dict.""" - args = [] - for k in sorted(kwargs.keys()): - v = kwargs[k] - if isinstance(v, Iterable) and not isinstance(v, str): - for value in v: - args.append('-{}'.format(k)) - if value is not None: - args.append('{}'.format(value)) - continue - args.append('-{}'.format(k)) - if v is not None: - args.append('{}'.format(v)) - return args diff --git a/bin/lib/ffmpeg/ffmpeg/_view.py b/bin/lib/ffmpeg/ffmpeg/_view.py deleted file mode 100644 index 31955af..0000000 --- a/bin/lib/ffmpeg/ffmpeg/_view.py +++ /dev/null @@ -1,108 +0,0 @@ -from __future__ import unicode_literals - -from builtins import str -from .dag import get_outgoing_edges -from ._run import topo_sort -import tempfile - -from ffmpeg.nodes import ( - FilterNode, - get_stream_spec_nodes, - InputNode, - OutputNode, - stream_operator, -) - - -_RIGHT_ARROW = '\u2192' - - -def _get_node_color(node): - if isinstance(node, InputNode): - color = '#99cc00' - elif isinstance(node, OutputNode): - color = '#99ccff' - elif isinstance(node, FilterNode): - color = '#ffcc00' - else: - color = None - return color - - -@stream_operator() -def view(stream_spec, detail=False, filename=None, pipe=False, **kwargs): - try: - import graphviz - except ImportError: - raise ImportError( - 'failed to import graphviz; please make sure graphviz is installed (e.g. ' - '`pip install graphviz`)' - ) - - show_labels = kwargs.pop('show_labels', True) - if pipe and filename is not None: - raise ValueError('Can\'t specify both `filename` and `pipe`') - elif not pipe and filename is None: - filename = tempfile.mktemp() - - nodes = get_stream_spec_nodes(stream_spec) - - sorted_nodes, outgoing_edge_maps = topo_sort(nodes) - graph = graphviz.Digraph(format='png') - graph.attr(rankdir='LR') - if len(list(kwargs.keys())) != 0: - raise ValueError( - 'Invalid kwargs key(s): {}'.format(', '.join(list(kwargs.keys()))) - ) - - for node in sorted_nodes: - color = _get_node_color(node) - - if detail: - lines = [node.short_repr] - lines += ['{!r}'.format(arg) for arg in node.args] - lines += [ - '{}={!r}'.format(key, node.kwargs[key]) for key in sorted(node.kwargs) - ] - node_text = '\n'.join(lines) - else: - node_text = node.short_repr - graph.node( - str(hash(node)), node_text, shape='box', style='filled', fillcolor=color - ) - outgoing_edge_map = outgoing_edge_maps.get(node, {}) - - for edge in get_outgoing_edges(node, outgoing_edge_map): - kwargs = {} - up_label = edge.upstream_label - down_label = edge.downstream_label - up_selector = edge.upstream_selector - - if show_labels and ( - up_label is not None - or down_label is not None - or up_selector is not None - ): - if up_label is None: - up_label = '' - if up_selector is not None: - up_label += ":" + up_selector - if down_label is None: - down_label = '' - if up_label != '' and down_label != '': - middle = ' {} '.format(_RIGHT_ARROW) - else: - middle = '' - kwargs['label'] = '{} {} {}'.format(up_label, middle, down_label) - upstream_node_id = str(hash(edge.upstream_node)) - downstream_node_id = str(hash(edge.downstream_node)) - graph.edge(upstream_node_id, downstream_node_id, **kwargs) - - if pipe: - return graph.pipe() - else: - graph.view(filename, cleanup=True) - return stream_spec - - -__all__ = ['view'] diff --git a/bin/lib/ffmpeg/ffmpeg/dag.py b/bin/lib/ffmpeg/ffmpeg/dag.py deleted file mode 100644 index 4bdac44..0000000 --- a/bin/lib/ffmpeg/ffmpeg/dag.py +++ /dev/null @@ -1,240 +0,0 @@ -from __future__ import unicode_literals - -from ._utils import get_hash, get_hash_int -from builtins import object -from collections import namedtuple - - -class DagNode(object): - """Node in a directed-acyclic graph (DAG). - - Edges: - DagNodes are connected by edges. An edge connects two nodes with a label for - each side: - - ``upstream_node``: upstream/parent node - - ``upstream_label``: label on the outgoing side of the upstream node - - ``downstream_node``: downstream/child node - - ``downstream_label``: label on the incoming side of the downstream node - - For example, DagNode A may be connected to DagNode B with an edge labelled - "foo" on A's side, and "bar" on B's side: - - _____ _____ - | | | | - | A >[foo]---[bar]> B | - |_____| |_____| - - Edge labels may be integers or strings, and nodes cannot have more than one - incoming edge with the same label. - - DagNodes may have any number of incoming edges and any number of outgoing - edges. DagNodes keep track only of their incoming edges, but the entire graph - structure can be inferred by looking at the furthest downstream nodes and - working backwards. - - Hashing: - DagNodes must be hashable, and two nodes are considered to be equivalent if - they have the same hash value. - - Nodes are immutable, and the hash should remain constant as a result. If a - node with new contents is required, create a new node and throw the old one - away. - - String representation: - In order for graph visualization tools to show useful information, nodes must - be representable as strings. The ``repr`` operator should provide a more or - less "full" representation of the node, and the ``short_repr`` property should - be a shortened, concise representation. - - Again, because nodes are immutable, the string representations should remain - constant. - """ - - def __hash__(self): - """Return an integer hash of the node.""" - raise NotImplementedError() - - def __eq__(self, other): - """Compare two nodes; implementations should return True if (and only if) - hashes match. - """ - raise NotImplementedError() - - def __repr__(self, other): - """Return a full string representation of the node.""" - raise NotImplementedError() - - @property - def short_repr(self): - """Return a partial/concise representation of the node.""" - raise NotImplementedError() - - @property - def incoming_edge_map(self): - """Provides information about all incoming edges that connect to this node. - - The edge map is a dictionary that maps an ``incoming_label`` to - ``(outgoing_node, outgoing_label)``. Note that implicitly, ``incoming_node`` is - ``self``. See "Edges" section above. - """ - raise NotImplementedError() - - -DagEdge = namedtuple( - 'DagEdge', - [ - 'downstream_node', - 'downstream_label', - 'upstream_node', - 'upstream_label', - 'upstream_selector', - ], -) - - -def get_incoming_edges(downstream_node, incoming_edge_map): - edges = [] - for downstream_label, upstream_info in list(incoming_edge_map.items()): - upstream_node, upstream_label, upstream_selector = upstream_info - edges += [ - DagEdge( - downstream_node, - downstream_label, - upstream_node, - upstream_label, - upstream_selector, - ) - ] - return edges - - -def get_outgoing_edges(upstream_node, outgoing_edge_map): - edges = [] - for upstream_label, downstream_infos in sorted(outgoing_edge_map.items()): - for downstream_info in downstream_infos: - downstream_node, downstream_label, downstream_selector = downstream_info - edges += [ - DagEdge( - downstream_node, - downstream_label, - upstream_node, - upstream_label, - downstream_selector, - ) - ] - return edges - - -class KwargReprNode(DagNode): - """A DagNode that can be represented as a set of args+kwargs.""" - - @property - def __upstream_hashes(self): - hashes = [] - for downstream_label, upstream_info in list(self.incoming_edge_map.items()): - upstream_node, upstream_label, upstream_selector = upstream_info - hashes += [ - hash(x) - for x in [ - downstream_label, - upstream_node, - upstream_label, - upstream_selector, - ] - ] - return hashes - - @property - def __inner_hash(self): - props = {'args': self.args, 'kwargs': self.kwargs} - return get_hash(props) - - def __get_hash(self): - hashes = self.__upstream_hashes + [self.__inner_hash] - return get_hash_int(hashes) - - def __init__(self, incoming_edge_map, name, args, kwargs): - self.__incoming_edge_map = incoming_edge_map - self.name = name - self.args = args - self.kwargs = kwargs - self.__hash = self.__get_hash() - - def __hash__(self): - return self.__hash - - def __eq__(self, other): - return hash(self) == hash(other) - - @property - def short_hash(self): - return '{:x}'.format(abs(hash(self)))[:12] - - def long_repr(self, include_hash=True): - formatted_props = ['{!r}'.format(arg) for arg in self.args] - formatted_props += [ - '{}={!r}'.format(key, self.kwargs[key]) for key in sorted(self.kwargs) - ] - out = '{}({})'.format(self.name, ', '.join(formatted_props)) - if include_hash: - out += ' <{}>'.format(self.short_hash) - return out - - def __repr__(self): - return self.long_repr() - - @property - def incoming_edges(self): - return get_incoming_edges(self, self.incoming_edge_map) - - @property - def incoming_edge_map(self): - return self.__incoming_edge_map - - @property - def short_repr(self): - return self.name - - -def topo_sort(downstream_nodes): - marked_nodes = [] - sorted_nodes = [] - outgoing_edge_maps = {} - - def visit( - upstream_node, - upstream_label, - downstream_node, - downstream_label, - downstream_selector=None, - ): - if upstream_node in marked_nodes: - raise RuntimeError('Graph is not a DAG') - - if downstream_node is not None: - outgoing_edge_map = outgoing_edge_maps.get(upstream_node, {}) - outgoing_edge_infos = outgoing_edge_map.get(upstream_label, []) - outgoing_edge_infos += [ - (downstream_node, downstream_label, downstream_selector) - ] - outgoing_edge_map[upstream_label] = outgoing_edge_infos - outgoing_edge_maps[upstream_node] = outgoing_edge_map - - if upstream_node not in sorted_nodes: - marked_nodes.append(upstream_node) - for edge in upstream_node.incoming_edges: - visit( - edge.upstream_node, - edge.upstream_label, - edge.downstream_node, - edge.downstream_label, - edge.upstream_selector, - ) - marked_nodes.remove(upstream_node) - sorted_nodes.append(upstream_node) - - unmarked_nodes = [(node, None) for node in downstream_nodes] - while unmarked_nodes: - upstream_node, upstream_label = unmarked_nodes.pop() - visit(upstream_node, upstream_label, None, None) - return sorted_nodes, outgoing_edge_maps diff --git a/bin/lib/ffmpeg/ffmpeg/nodes.py b/bin/lib/ffmpeg/ffmpeg/nodes.py deleted file mode 100644 index e8b2838..0000000 --- a/bin/lib/ffmpeg/ffmpeg/nodes.py +++ /dev/null @@ -1,380 +0,0 @@ -from __future__ import unicode_literals - -from past.builtins import basestring -from .dag import KwargReprNode -from ._utils import escape_chars, get_hash_int -from builtins import object -import os - - -def _is_of_types(obj, types): - valid = False - for stream_type in types: - if isinstance(obj, stream_type): - valid = True - break - return valid - - -def _get_types_str(types): - return ', '.join(['{}.{}'.format(x.__module__, x.__name__) for x in types]) - - -class Stream(object): - """Represents the outgoing edge of an upstream node; may be used to create more - downstream nodes. - """ - - def __init__( - self, upstream_node, upstream_label, node_types, upstream_selector=None - ): - if not _is_of_types(upstream_node, node_types): - raise TypeError( - 'Expected upstream node to be of one of the following type(s): {}; got {}'.format( - _get_types_str(node_types), type(upstream_node) - ) - ) - self.node = upstream_node - self.label = upstream_label - self.selector = upstream_selector - - def __hash__(self): - return get_hash_int([hash(self.node), hash(self.label)]) - - def __eq__(self, other): - return hash(self) == hash(other) - - def __repr__(self): - node_repr = self.node.long_repr(include_hash=False) - selector = '' - if self.selector: - selector = ':{}'.format(self.selector) - out = '{}[{!r}{}] <{}>'.format( - node_repr, self.label, selector, self.node.short_hash - ) - return out - - def __getitem__(self, index): - """ - Select a component (audio, video) of the stream. - - Example: - Process the audio and video portions of a stream independently:: - - input = ffmpeg.input('in.mp4') - audio = input['a'].filter("aecho", 0.8, 0.9, 1000, 0.3) - video = input['v'].hflip() - out = ffmpeg.output(audio, video, 'out.mp4') - """ - if self.selector is not None: - raise ValueError('Stream already has a selector: {}'.format(self)) - elif not isinstance(index, basestring): - raise TypeError("Expected string index (e.g. 'a'); got {!r}".format(index)) - return self.node.stream(label=self.label, selector=index) - - @property - def audio(self): - """Select the audio-portion of a stream. - - Some ffmpeg filters drop audio streams, and care must be taken - to preserve the audio in the final output. The ``.audio`` and - ``.video`` operators can be used to reference the audio/video - portions of a stream so that they can be processed separately - and then re-combined later in the pipeline. This dilemma is - intrinsic to ffmpeg, and ffmpeg-python tries to stay out of the - way while users may refer to the official ffmpeg documentation - as to why certain filters drop audio. - - ``stream.audio`` is a shorthand for ``stream['a']``. - - Example: - Process the audio and video portions of a stream independently:: - - input = ffmpeg.input('in.mp4') - audio = input.audio.filter("aecho", 0.8, 0.9, 1000, 0.3) - video = input.video.hflip() - out = ffmpeg.output(audio, video, 'out.mp4') - """ - return self['a'] - - @property - def video(self): - """Select the video-portion of a stream. - - Some ffmpeg filters drop audio streams, and care must be taken - to preserve the audio in the final output. The ``.audio`` and - ``.video`` operators can be used to reference the audio/video - portions of a stream so that they can be processed separately - and then re-combined later in the pipeline. This dilemma is - intrinsic to ffmpeg, and ffmpeg-python tries to stay out of the - way while users may refer to the official ffmpeg documentation - as to why certain filters drop audio. - - ``stream.video`` is a shorthand for ``stream['v']``. - - Example: - Process the audio and video portions of a stream independently:: - - input = ffmpeg.input('in.mp4') - audio = input.audio.filter("aecho", 0.8, 0.9, 1000, 0.3) - video = input.video.hflip() - out = ffmpeg.output(audio, video, 'out.mp4') - """ - return self['v'] - - -def get_stream_map(stream_spec): - if stream_spec is None: - stream_map = {} - elif isinstance(stream_spec, Stream): - stream_map = {None: stream_spec} - elif isinstance(stream_spec, (list, tuple)): - stream_map = dict(enumerate(stream_spec)) - elif isinstance(stream_spec, dict): - stream_map = stream_spec - return stream_map - - -def get_stream_map_nodes(stream_map): - nodes = [] - for stream in list(stream_map.values()): - if not isinstance(stream, Stream): - raise TypeError('Expected Stream; got {}'.format(type(stream))) - nodes.append(stream.node) - return nodes - - -def get_stream_spec_nodes(stream_spec): - stream_map = get_stream_map(stream_spec) - return get_stream_map_nodes(stream_map) - - -class Node(KwargReprNode): - """Node base""" - - @classmethod - def __check_input_len(cls, stream_map, min_inputs, max_inputs): - if min_inputs is not None and len(stream_map) < min_inputs: - raise ValueError( - 'Expected at least {} input stream(s); got {}'.format( - min_inputs, len(stream_map) - ) - ) - elif max_inputs is not None and len(stream_map) > max_inputs: - raise ValueError( - 'Expected at most {} input stream(s); got {}'.format( - max_inputs, len(stream_map) - ) - ) - - @classmethod - def __check_input_types(cls, stream_map, incoming_stream_types): - for stream in list(stream_map.values()): - if not _is_of_types(stream, incoming_stream_types): - raise TypeError( - 'Expected incoming stream(s) to be of one of the following types: {}; got {}'.format( - _get_types_str(incoming_stream_types), type(stream) - ) - ) - - @classmethod - def __get_incoming_edge_map(cls, stream_map): - incoming_edge_map = {} - for downstream_label, upstream in list(stream_map.items()): - incoming_edge_map[downstream_label] = ( - upstream.node, - upstream.label, - upstream.selector, - ) - return incoming_edge_map - - def __init__( - self, - stream_spec, - name, - incoming_stream_types, - outgoing_stream_type, - min_inputs, - max_inputs, - args=[], - kwargs={}, - ): - stream_map = get_stream_map(stream_spec) - self.__check_input_len(stream_map, min_inputs, max_inputs) - self.__check_input_types(stream_map, incoming_stream_types) - incoming_edge_map = self.__get_incoming_edge_map(stream_map) - - super(Node, self).__init__(incoming_edge_map, name, args, kwargs) - self.__outgoing_stream_type = outgoing_stream_type - self.__incoming_stream_types = incoming_stream_types - - def stream(self, label=None, selector=None): - """Create an outgoing stream originating from this node. - - More nodes may be attached onto the outgoing stream. - """ - return self.__outgoing_stream_type(self, label, upstream_selector=selector) - - def __getitem__(self, item): - """Create an outgoing stream originating from this node; syntactic sugar for - ``self.stream(label)``. It can also be used to apply a selector: e.g. - ``node[0:'a']`` returns a stream with label 0 and selector ``'a'``, which is - the same as ``node.stream(label=0, selector='a')``. - - Example: - Process the audio and video portions of a stream independently:: - - input = ffmpeg.input('in.mp4') - audio = input[:'a'].filter("aecho", 0.8, 0.9, 1000, 0.3) - video = input[:'v'].hflip() - out = ffmpeg.output(audio, video, 'out.mp4') - """ - if isinstance(item, slice): - return self.stream(label=item.start, selector=item.stop) - else: - return self.stream(label=item) - - -class FilterableStream(Stream): - def __init__(self, upstream_node, upstream_label, upstream_selector=None): - super(FilterableStream, self).__init__( - upstream_node, upstream_label, {InputNode, FilterNode}, upstream_selector - ) - - -# noinspection PyMethodOverriding -class InputNode(Node): - """InputNode type""" - - def __init__(self, name, args=[], kwargs={}): - super(InputNode, self).__init__( - stream_spec=None, - name=name, - incoming_stream_types={}, - outgoing_stream_type=FilterableStream, - min_inputs=0, - max_inputs=0, - args=args, - kwargs=kwargs, - ) - - @property - def short_repr(self): - return os.path.basename(self.kwargs['filename']) - - -# noinspection PyMethodOverriding -class FilterNode(Node): - def __init__(self, stream_spec, name, max_inputs=1, args=[], kwargs={}): - super(FilterNode, self).__init__( - stream_spec=stream_spec, - name=name, - incoming_stream_types={FilterableStream}, - outgoing_stream_type=FilterableStream, - min_inputs=1, - max_inputs=max_inputs, - args=args, - kwargs=kwargs, - ) - - """FilterNode""" - - def _get_filter(self, outgoing_edges): - args = self.args - kwargs = self.kwargs - if self.name in ('split', 'asplit'): - args = [len(outgoing_edges)] - - out_args = [escape_chars(x, '\\\'=:') for x in args] - out_kwargs = {} - for k, v in list(kwargs.items()): - k = escape_chars(k, '\\\'=:') - v = escape_chars(v, '\\\'=:') - out_kwargs[k] = v - - arg_params = [escape_chars(v, '\\\'=:') for v in out_args] - kwarg_params = ['{}={}'.format(k, out_kwargs[k]) for k in sorted(out_kwargs)] - params = arg_params + kwarg_params - - params_text = escape_chars(self.name, '\\\'=:') - - if params: - params_text += '={}'.format(':'.join(params)) - return escape_chars(params_text, '\\\'[],;') - - -# noinspection PyMethodOverriding -class OutputNode(Node): - def __init__(self, stream, name, args=[], kwargs={}): - super(OutputNode, self).__init__( - stream_spec=stream, - name=name, - incoming_stream_types={FilterableStream}, - outgoing_stream_type=OutputStream, - min_inputs=1, - max_inputs=None, - args=args, - kwargs=kwargs, - ) - - @property - def short_repr(self): - return os.path.basename(self.kwargs['filename']) - - -class OutputStream(Stream): - def __init__(self, upstream_node, upstream_label, upstream_selector=None): - super(OutputStream, self).__init__( - upstream_node, - upstream_label, - {OutputNode, GlobalNode, MergeOutputsNode}, - upstream_selector=upstream_selector, - ) - - -# noinspection PyMethodOverriding -class MergeOutputsNode(Node): - def __init__(self, streams, name): - super(MergeOutputsNode, self).__init__( - stream_spec=streams, - name=name, - incoming_stream_types={OutputStream}, - outgoing_stream_type=OutputStream, - min_inputs=1, - max_inputs=None, - ) - - -# noinspection PyMethodOverriding -class GlobalNode(Node): - def __init__(self, stream, name, args=[], kwargs={}): - super(GlobalNode, self).__init__( - stream_spec=stream, - name=name, - incoming_stream_types={OutputStream}, - outgoing_stream_type=OutputStream, - min_inputs=1, - max_inputs=1, - args=args, - kwargs=kwargs, - ) - - -def stream_operator(stream_classes={Stream}, name=None): - def decorator(func): - func_name = name or func.__name__ - [setattr(stream_class, func_name, func) for stream_class in stream_classes] - return func - - return decorator - - -def filter_operator(name=None): - return stream_operator(stream_classes={FilterableStream}, name=name) - - -def output_operator(name=None): - return stream_operator(stream_classes={OutputStream}, name=name) - - -__all__ = ['Stream'] diff --git a/bin/lib/ffmpeg/ffmpeg/tests/__init__.py b/bin/lib/ffmpeg/ffmpeg/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/bin/lib/ffmpeg/ffmpeg/tests/sample_data/in1.mp4 b/bin/lib/ffmpeg/ffmpeg/tests/sample_data/in1.mp4 deleted file mode 100644 index 2c7d59e9f56cdfc41b3f502f8feaa5ad4c8d0bac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336833 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%0DtjR4MpDIq%YCfq9>x7LQkaI*?>j3oj$=5#>Sc zhk;3rfLSmoq(lHy4)I24J9zkyPwHyc!sYp40lQe zw=2tRP@Z$1<^W~z0<~GI9J9&qd-o@?w)pn1=(zDVE7igi2+TAD+(&IL=OsL`#}k4% zK)&CN)3{0Ci(~G0fJ@9X3IQ|XGs;nv3GDARCm?^f+D_Rz_LB=#XN1_LiUXW>*wC1` z{{CQ|_Cn=#B0s%#ac4H5{G163Poy}yYB9%-b0wBodWg>R1VIs0kl#qgZ@NZXvGH1J zVE07b3?lm^4yL1?FRHWxPQZt%h!&WfIweBhC@Ki~<51nP}t%>#9d9#YcP^==F2-<8y*TT-&dVw{z82KDDU&Aj{nMEj$&An_MxmLpPoig3EJcFlAuheS&;^uph zXHNYSVfd5zU!Z&`6aRoR7UU866Bp|v2z_f;@N0Jv4u=L>rdcyGVt|3UuV(n^wN3b?7mh^FWL*bm1Lpf0d`1w zVSuV4$g6n`PA-HZ?XVj)0Nh_y_f~sxU)*NlO z=A0MXN}E$yC4pn7GP+eV#?k@@&`gO|h%caCtl|HO`9H+`cS6AXpPi6@yd3Zq4vvh2 zk?l%_x-n%t3zP(KXl}Gmxlk4ECpA;%=tTvkKeh=T6MYRxYpeePN_OT;IYz`(q@pRJ zLE{szKV)*wO`&ZxD-*oYM9QQ5@To$FSRKeWcjLNZAg}CPhJ_@UApKFD$6Qw!8(ZIj z*_0D_YqN88{CI37NK&d&Jhy&iQ0za1VciEs5Zb|nc}*aD-g<5UMP>L}Ap%rulN7^kTKvX|tQWNk4{f z4Z5<5ukc=ExJiuDN_o7vKua?|38#04vgDpko9QY?VOG*H(V+2p1?AkiMH62_34T=8 zq3=%~@9>yBEx`*08cIRNv}08;M=h8n`KVEJ1K5k*PM(;F%si zvj9lWB>bS?KgNmK6laI-_*X+P>1>6nuy{3P&Hh94xWP7g)U(z9Rt$^+fzybDlV^Kl<})yxi?;fR$q?i`+s ziflE^LRiRP3~9&)V_rz0h8iInR&mp77@??m{N6R?&7o97} z?T}N+`U}UUN8hHIjd@?zAYH>_oopuRf-Ul23)s5#`3;?|g5C{VZc1j3uQO`YC@E?6 zX5>zqY@bjF6KlmC-*1ry2`cHrSy?6r3t*SGvKtf1+qLQ~NA4Y*8Y=>}U

~!pjL5x!?<+)|8nVn(ie;7tlsU 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 z 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%0DG7%o`ErkmH=RhPuq8zq>}UWpb>x){?( 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 diff --git a/bin/lib/ffmpeg/ffmpeg/tests/sample_data/overlay.png b/bin/lib/ffmpeg/ffmpeg/tests/sample_data/overlay.png deleted file mode 100644 index 5da00872380603597b66abf33577615a9287688c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2212 zcmV;V2wV4wP)Ge0+TN`}Qv{FPE2>w6wGUcmVJ3?C?hpP#MLtt*ZzPM}V`;Jq4%8aACaSF2aN z*}QYRbNd6`S^xkCx=BPqRCt{2nQ3F9IuwSH)rGAV1=j%t>w>m*I`{wov`bDFAjEb$ z;|=!%?}wS12tJ;i^X3Em|ai&^wa4@ zF5>>p(|DP;9YZ|d+VkF%T*&i6ZOi--6U4&P1oPfWCgSWLPr#t7dpx`IbiuT0{*;=M zg(!~N4`7^~Uqw+YQB%DmAX3vQ7kUqfy52S7j+)G39V@kkrpQN9 z)tcAULNi2K(adxfM}!m~X@z@TMR9heQS{chTr`Tb#)wrEyCJOQ;)3`ht!NWhG|NS= zJJV4q63NBN7Xh*GXt_Wx&f>lF^{z~ZShw0lJbI0aj*Fk_+f^>*^p!L|)VfU$ku0>1 z5%;Hssd=|wQW*=6D;Kk#i!+vs8jj)#DqL>=sH`!g$8CTfiK5m(++)PDcayrSFia zF{6$T0`ZCDqNYQ?xPK#W(ad+{UG0>S?{q5DA&9S~(Ra&Ob~>UHATu5FbyvQA*E?jS zrc>Kp;wB>r+Ao@%>CjxfK@_K?Ig=bm{2Z5< z4sB`mmg!v4>**WuNjxo0@yEjRxT8KfNAGD%YjTL*>s~6O5}((nUGu1qAKuj#de=ZS zpWfvnA~;B{I%30gNVzaX?N#onum(zx`g+TBFd{W6?M;3Z2_k>guS^G5G}{oLJBuQ# zXtUXM^9x<(VpmVjDqkdR1$$D)A^zxYq1p3AVmcIY0Z0|%P4bT(HAGg?aSjDEp zd{XZ&iZmB>K%x&!RFm^X{dL+EA~hXVf8JepyWRSZ>8RQoO_!4W1NMxb03rR5SWA1w zole!Ln+q%*8W4HNgu4!yBPonRzkoy}**@&CGyb4j7J}p}Fi?>)RqcXcb^D62-xG(tW zkDX-1UcGwtdWu&6&A`oTt+q0C>*|es%6QU7CywH&gLW=weQ#RUeFy=Cwa2gqea2xo^e4hA0 zB%ow*{1)SgCg*{Ch~dzY0P%#449=Ykyv;uFxjnSu>P?Wc8wTx9`%A_&!UHb*SOH@x z2$(VFhkamloyJ(}}yWgI))pz&bF3BKV<#F+TLPd`6#MT|pqb%y_5 zWdX^B@D5`O{!7Mmm6Ojd-&+2auTqW?Hy;ruD+7rchurNVAWKoLS@^rB91CU4hdy(_ z%x*B|j$hg1hA|$p1pRxVOvz*}WK_Z&0&WvV?kg`LjCqK=!2mAgb_vlwlZ+dT4Y?KL zWdcknNzgm9@D8I3*e@17M4( z$nuV};Uo*9M=|CReCc_4!wVpj7~EOw%%E{}?J*X5rxl_s&MySV8gGo&R{KrHykZ|xKf-bPj1lbYejI_ZwK4FFf3VMN6};F(L|T@_eZ~XsZ%97U zo@nSc*Sfmsk&IB#pgdICjB{KYlM(R}TGy7f1i@HUGvOdj)5kMza&r0H6)=W&vym0~ zBle!bsJzMz!*G;5oYA5!14`!>BX20eeFk4OLHTM~q=X*I$nt!oh~g+@ryuU*@%gAMNz14FK4a?mOlX^SaqoEuwo#Z2{sTs` z*x5H2>w@#lh#!44V+3!B{*V#Q3RYGha+14@&V9z@Ge&s0wt{FFc z+#g3d&uAnLC~Kb;>'.format( - 'dummy.mp4', in_file.node.short_hash - ) - assert repr(trim1.node) == 'trim(end_frame=20, start_frame=10) <{}>'.format( - trim1.node.short_hash - ) - assert repr(trim2.node) == 'trim(end_frame=40, start_frame=30) <{}>'.format( - trim2.node.short_hash - ) - assert repr(trim3.node) == 'trim(end_frame=60, start_frame=50) <{}>'.format( - trim3.node.short_hash - ) - assert repr(concatted.node) == 'concat(n=3) <{}>'.format(concatted.node.short_hash) - assert repr(output.node) == 'output(filename={!r}) <{}>'.format( - 'dummy2.mp4', output.node.short_hash - ) - - -def test_stream_repr(): - in_file = ffmpeg.input('dummy.mp4') - assert repr(in_file) == 'input(filename={!r})[None] <{}>'.format( - 'dummy.mp4', in_file.node.short_hash - ) - split0 = in_file.filter_multi_output('split')[0] - assert repr(split0) == 'split()[0] <{}>'.format(split0.node.short_hash) - dummy_out = in_file.filter_multi_output('dummy')['out'] - assert repr(dummy_out) == 'dummy()[{!r}] <{}>'.format( - dummy_out.label, dummy_out.node.short_hash - ) - - -def test_repeated_args(): - out_file = ffmpeg.input('dummy.mp4').output( - 'dummy2.mp4', streamid=['0:0x101', '1:0x102'] - ) - assert out_file.get_args() == [ - '-i', - 'dummy.mp4', - '-streamid', - '0:0x101', - '-streamid', - '1:0x102', - 'dummy2.mp4', - ] - - -def test__get_args__simple(): - out_file = ffmpeg.input('dummy.mp4').output('dummy2.mp4') - assert out_file.get_args() == ['-i', 'dummy.mp4', 'dummy2.mp4'] - - -def test_global_args(): - out_file = ( - ffmpeg.input('dummy.mp4') - .output('dummy2.mp4') - .global_args('-progress', 'someurl') - ) - assert out_file.get_args() == [ - '-i', - 'dummy.mp4', - 'dummy2.mp4', - '-progress', - 'someurl', - ] - - -def _get_simple_example(): - return ffmpeg.input(TEST_INPUT_FILE1).output(TEST_OUTPUT_FILE1) - - -def _get_complex_filter_example(): - split = ffmpeg.input(TEST_INPUT_FILE1).vflip().split() - split0 = split[0] - split1 = split[1] - - overlay_file = ffmpeg.input(TEST_OVERLAY_FILE) - overlay_file = ffmpeg.crop(overlay_file, 10, 10, 158, 112) - return ( - ffmpeg.concat( - split0.trim(start_frame=10, end_frame=20), - split1.trim(start_frame=30, end_frame=40), - ) - .overlay(overlay_file.hflip()) - .drawbox(50, 50, 120, 120, color='red', thickness=5) - .output(TEST_OUTPUT_FILE1) - .overwrite_output() - ) - - -def test__get_args__complex_filter(): - out = _get_complex_filter_example() - args = ffmpeg.get_args(out) - assert args == [ - '-i', - TEST_INPUT_FILE1, - '-i', - TEST_OVERLAY_FILE, - '-filter_complex', - '[0]vflip[s0];' - '[s0]split=2[s1][s2];' - '[s1]trim=end_frame=20:start_frame=10[s3];' - '[s2]trim=end_frame=40:start_frame=30[s4];' - '[s3][s4]concat=n=2[s5];' - '[1]crop=158:112:10:10[s6];' - '[s6]hflip[s7];' - '[s5][s7]overlay=eof_action=repeat[s8];' - '[s8]drawbox=50:50:120:120:red:t=5[s9]', - '-map', - '[s9]', - TEST_OUTPUT_FILE1, - '-y', - ] - - -def test_combined_output(): - i1 = ffmpeg.input(TEST_INPUT_FILE1) - i2 = ffmpeg.input(TEST_OVERLAY_FILE) - out = ffmpeg.output(i1, i2, TEST_OUTPUT_FILE1) - assert out.get_args() == [ - '-i', - TEST_INPUT_FILE1, - '-i', - TEST_OVERLAY_FILE, - '-map', - '0', - '-map', - '1', - TEST_OUTPUT_FILE1, - ] - - -@pytest.mark.parametrize('use_shorthand', [True, False]) -def test_filter_with_selector(use_shorthand): - i = ffmpeg.input(TEST_INPUT_FILE1) - if use_shorthand: - v1 = i.video.hflip() - a1 = i.audio.filter('aecho', 0.8, 0.9, 1000, 0.3) - else: - v1 = i['v'].hflip() - a1 = i['a'].filter('aecho', 0.8, 0.9, 1000, 0.3) - out = ffmpeg.output(a1, v1, TEST_OUTPUT_FILE1) - assert out.get_args() == [ - '-i', - TEST_INPUT_FILE1, - '-filter_complex', - '[0:a]aecho=0.8:0.9:1000:0.3[s0];' '[0:v]hflip[s1]', - '-map', - '[s0]', - '-map', - '[s1]', - TEST_OUTPUT_FILE1, - ] - - -def test_get_item_with_bad_selectors(): - input = ffmpeg.input(TEST_INPUT_FILE1) - - with pytest.raises(ValueError) as excinfo: - input['a']['a'] - assert str(excinfo.value).startswith('Stream already has a selector:') - - with pytest.raises(TypeError) as excinfo: - input[:'a'] - assert str(excinfo.value).startswith("Expected string index (e.g. 'a')") - - with pytest.raises(TypeError) as excinfo: - input[5] - assert str(excinfo.value).startswith("Expected string index (e.g. 'a')") - - -def _get_complex_filter_asplit_example(): - split = ffmpeg.input(TEST_INPUT_FILE1).vflip().asplit() - split0 = split[0] - split1 = split[1] - - return ( - ffmpeg.concat( - split0.filter('atrim', start=10, end=20), - split1.filter('atrim', start=30, end=40), - ) - .output(TEST_OUTPUT_FILE1) - .overwrite_output() - ) - - -def test_filter_concat__video_only(): - in1 = ffmpeg.input('in1.mp4') - in2 = ffmpeg.input('in2.mp4') - args = ffmpeg.concat(in1, in2).output('out.mp4').get_args() - assert args == [ - '-i', - 'in1.mp4', - '-i', - 'in2.mp4', - '-filter_complex', - '[0][1]concat=n=2[s0]', - '-map', - '[s0]', - 'out.mp4', - ] - - -def test_filter_concat__audio_only(): - in1 = ffmpeg.input('in1.mp4') - in2 = ffmpeg.input('in2.mp4') - args = ffmpeg.concat(in1, in2, v=0, a=1).output('out.mp4').get_args() - assert args == [ - '-i', - 'in1.mp4', - '-i', - 'in2.mp4', - '-filter_complex', - '[0][1]concat=a=1:n=2:v=0[s0]', - '-map', - '[s0]', - 'out.mp4', - ] - - -def test_filter_concat__audio_video(): - in1 = ffmpeg.input('in1.mp4') - in2 = ffmpeg.input('in2.mp4') - joined = ffmpeg.concat(in1.video, in1.audio, in2.hflip(), in2['a'], v=1, a=1).node - args = ffmpeg.output(joined[0], joined[1], 'out.mp4').get_args() - assert args == [ - '-i', - 'in1.mp4', - '-i', - 'in2.mp4', - '-filter_complex', - '[1]hflip[s0];[0:v][0:a][s0][1:a]concat=a=1:n=2:v=1[s1][s2]', - '-map', - '[s1]', - '-map', - '[s2]', - 'out.mp4', - ] - - -def test_filter_concat__wrong_stream_count(): - in1 = ffmpeg.input('in1.mp4') - in2 = ffmpeg.input('in2.mp4') - with pytest.raises(ValueError) as excinfo: - ffmpeg.concat(in1.video, in1.audio, in2.hflip(), v=1, a=1).node - assert ( - str(excinfo.value) - == 'Expected concat input streams to have length multiple of 2 (v=1, a=1); got 3' - ) - - -def test_filter_asplit(): - out = _get_complex_filter_asplit_example() - args = out.get_args() - assert args == [ - '-i', - TEST_INPUT_FILE1, - '-filter_complex', - ( - '[0]vflip[s0];' - '[s0]asplit=2[s1][s2];' - '[s1]atrim=end=20:start=10[s3];' - '[s2]atrim=end=40:start=30[s4];' - '[s3][s4]concat=n=2[s5]' - ), - '-map', - '[s5]', - TEST_OUTPUT_FILE1, - '-y', - ] - - -def test__output__bitrate(): - args = ( - ffmpeg.input('in') - .output('out', video_bitrate=1000, audio_bitrate=200) - .get_args() - ) - assert args == ['-i', 'in', '-b:v', '1000', '-b:a', '200', 'out'] - - -@pytest.mark.parametrize('video_size', [(320, 240), '320x240']) -def test__output__video_size(video_size): - args = ffmpeg.input('in').output('out', video_size=video_size).get_args() - assert args == ['-i', 'in', '-video_size', '320x240', 'out'] - - -def test_filter_normal_arg_escape(): - """Test string escaping of normal filter args (e.g. ``font`` param of ``drawtext`` - filter). - """ - - def _get_drawtext_font_repr(font): - """Build a command-line arg using drawtext ``font`` param and extract the - ``-filter_complex`` arg. - """ - args = ( - ffmpeg.input('in') - .drawtext('test', font='a{}b'.format(font)) - .output('out') - .get_args() - ) - assert args[:3] == ['-i', 'in', '-filter_complex'] - assert args[4:] == ['-map', '[s0]', 'out'] - match = re.match( - r'\[0\]drawtext=font=a((.|\n)*)b:text=test\[s0\]', - args[3], - re.MULTILINE, - ) - assert match is not None, 'Invalid -filter_complex arg: {!r}'.format(args[3]) - return match.group(1) - - expected_backslash_counts = { - 'x': 0, - '\'': 3, - '\\': 3, - '%': 0, - ':': 2, - ',': 1, - '[': 1, - ']': 1, - '=': 2, - '\n': 0, - } - for ch, expected_backslash_count in list(expected_backslash_counts.items()): - expected = '{}{}'.format('\\' * expected_backslash_count, ch) - actual = _get_drawtext_font_repr(ch) - assert expected == actual - - -def test_filter_text_arg_str_escape(): - """Test string escaping of normal filter args (e.g. ``text`` param of ``drawtext`` - filter). - """ - - def _get_drawtext_text_repr(text): - """Build a command-line arg using drawtext ``text`` param and extract the - ``-filter_complex`` arg. - """ - args = ffmpeg.input('in').drawtext('a{}b'.format(text)).output('out').get_args() - assert args[:3] == ['-i', 'in', '-filter_complex'] - assert args[4:] == ['-map', '[s0]', 'out'] - match = re.match(r'\[0\]drawtext=text=a((.|\n)*)b\[s0\]', args[3], re.MULTILINE) - assert match is not None, 'Invalid -filter_complex arg: {!r}'.format(args[3]) - return match.group(1) - - expected_backslash_counts = { - 'x': 0, - '\'': 7, - '\\': 7, - '%': 4, - ':': 2, - ',': 1, - '[': 1, - ']': 1, - '=': 2, - '\n': 0, - } - for ch, expected_backslash_count in list(expected_backslash_counts.items()): - expected = '{}{}'.format('\\' * expected_backslash_count, ch) - actual = _get_drawtext_text_repr(ch) - assert expected == actual - - -# def test_version(): -# subprocess.check_call(['ffmpeg', '-version']) - - -def test__compile(): - out_file = ffmpeg.input('dummy.mp4').output('dummy2.mp4') - assert out_file.compile() == ['ffmpeg', '-i', 'dummy.mp4', 'dummy2.mp4'] - assert out_file.compile(cmd='ffmpeg.old') == [ - 'ffmpeg.old', - '-i', - 'dummy.mp4', - 'dummy2.mp4', - ] - - -@pytest.mark.parametrize('pipe_stdin', [True, False]) -@pytest.mark.parametrize('pipe_stdout', [True, False]) -@pytest.mark.parametrize('pipe_stderr', [True, False]) -@pytest.mark.parametrize('cwd', [None, '/tmp']) -def test__run_async(mocker, pipe_stdin, pipe_stdout, pipe_stderr, cwd): - process__mock = mock.Mock() - popen__mock = mocker.patch.object(subprocess, 'Popen', return_value=process__mock) - stream = _get_simple_example() - process = ffmpeg.run_async( - stream, - pipe_stdin=pipe_stdin, - pipe_stdout=pipe_stdout, - pipe_stderr=pipe_stderr, - cwd=cwd, - ) - assert process is process__mock - - expected_stdin = subprocess.PIPE if pipe_stdin else None - expected_stdout = subprocess.PIPE if pipe_stdout else None - expected_stderr = subprocess.PIPE if pipe_stderr else None - (args,), kwargs = popen__mock.call_args - assert args == ffmpeg.compile(stream) - assert kwargs == dict( - stdin=expected_stdin, - stdout=expected_stdout, - stderr=expected_stderr, - cwd=cwd, - ) - - -def test__run(): - stream = _get_complex_filter_example() - out, err = ffmpeg.run(stream) - assert out is None - assert err is None - - -@pytest.mark.parametrize('capture_stdout', [True, False]) -@pytest.mark.parametrize('capture_stderr', [True, False]) -def test__run__capture_out(mocker, capture_stdout, capture_stderr): - mocker.patch.object(ffmpeg._run, 'compile', return_value=['echo', 'test']) - stream = _get_simple_example() - out, err = ffmpeg.run( - stream, capture_stdout=capture_stdout, capture_stderr=capture_stderr - ) - if capture_stdout: - assert out == 'test\n'.encode() - else: - assert out is None - if capture_stderr: - assert err == ''.encode() - else: - assert err is None - - -def test__run__input_output(mocker): - mocker.patch.object(ffmpeg._run, 'compile', return_value=['cat']) - stream = _get_simple_example() - out, err = ffmpeg.run(stream, input='test'.encode(), capture_stdout=True) - assert out == 'test'.encode() - assert err is None - - -@pytest.mark.parametrize('capture_stdout', [True, False]) -@pytest.mark.parametrize('capture_stderr', [True, False]) -def test__run__error(mocker, capture_stdout, capture_stderr): - mocker.patch.object(ffmpeg._run, 'compile', return_value=['ffmpeg']) - stream = _get_complex_filter_example() - with pytest.raises(ffmpeg.Error) as excinfo: - out, err = ffmpeg.run( - stream, capture_stdout=capture_stdout, capture_stderr=capture_stderr - ) - assert str(excinfo.value) == 'ffmpeg error (see stderr output for detail)' - out = excinfo.value.stdout - err = excinfo.value.stderr - if capture_stdout: - assert out == ''.encode() - else: - assert out is None - if capture_stderr: - assert err.decode().startswith('ffmpeg version') - else: - assert err is None - - -def test__run__multi_output(): - in_ = ffmpeg.input(TEST_INPUT_FILE1) - out1 = in_.output(TEST_OUTPUT_FILE1) - out2 = in_.output(TEST_OUTPUT_FILE2) - ffmpeg.run([out1, out2], overwrite_output=True) - - -def test__run__dummy_cmd(): - stream = _get_complex_filter_example() - ffmpeg.run(stream, cmd='true') - - -def test__run__dummy_cmd_list(): - stream = _get_complex_filter_example() - ffmpeg.run(stream, cmd=['true', 'ignored']) - - -def test__filter__custom(): - stream = ffmpeg.input('dummy.mp4') - stream = ffmpeg.filter(stream, 'custom_filter', 'a', 'b', kwarg1='c') - stream = ffmpeg.output(stream, 'dummy2.mp4') - assert stream.get_args() == [ - '-i', - 'dummy.mp4', - '-filter_complex', - '[0]custom_filter=a:b:kwarg1=c[s0]', - '-map', - '[s0]', - 'dummy2.mp4', - ] - - -def test__filter__custom_fluent(): - stream = ( - ffmpeg.input('dummy.mp4') - .filter('custom_filter', 'a', 'b', kwarg1='c') - .output('dummy2.mp4') - ) - assert stream.get_args() == [ - '-i', - 'dummy.mp4', - '-filter_complex', - '[0]custom_filter=a:b:kwarg1=c[s0]', - '-map', - '[s0]', - 'dummy2.mp4', - ] - - -def test__merge_outputs(): - in_ = ffmpeg.input('in.mp4') - out1 = in_.output('out1.mp4') - out2 = in_.output('out2.mp4') - assert ffmpeg.merge_outputs(out1, out2).get_args() == [ - '-i', - 'in.mp4', - 'out1.mp4', - 'out2.mp4', - ] - assert ffmpeg.get_args([out1, out2]) == ['-i', 'in.mp4', 'out2.mp4', 'out1.mp4'] - - -def test__input__start_time(): - assert ffmpeg.input('in', ss=10.5).output('out').get_args() == [ - '-ss', - '10.5', - '-i', - 'in', - 'out', - ] - assert ffmpeg.input('in', ss=0.0).output('out').get_args() == [ - '-ss', - '0.0', - '-i', - 'in', - 'out', - ] - - -def test_multi_passthrough(): - out1 = ffmpeg.input('in1.mp4').output('out1.mp4') - out2 = ffmpeg.input('in2.mp4').output('out2.mp4') - out = ffmpeg.merge_outputs(out1, out2) - assert ffmpeg.get_args(out) == [ - '-i', - 'in1.mp4', - '-i', - 'in2.mp4', - 'out1.mp4', - '-map', - '1', - 'out2.mp4', - ] - assert ffmpeg.get_args([out1, out2]) == [ - '-i', - 'in2.mp4', - '-i', - 'in1.mp4', - 'out2.mp4', - '-map', - '1', - 'out1.mp4', - ] - - -def test_passthrough_selectors(): - i1 = ffmpeg.input(TEST_INPUT_FILE1) - args = ffmpeg.output(i1['1'], i1['2'], TEST_OUTPUT_FILE1).get_args() - assert args == [ - '-i', - TEST_INPUT_FILE1, - '-map', - '0:1', - '-map', - '0:2', - TEST_OUTPUT_FILE1, - ] - - -def test_mixed_passthrough_selectors(): - i1 = ffmpeg.input(TEST_INPUT_FILE1) - args = ffmpeg.output(i1['1'].hflip(), i1['2'], TEST_OUTPUT_FILE1).get_args() - assert args == [ - '-i', - TEST_INPUT_FILE1, - '-filter_complex', - '[0:1]hflip[s0]', - '-map', - '[s0]', - '-map', - '0:2', - TEST_OUTPUT_FILE1, - ] - - -def test_pipe(): - width = 32 - height = 32 - frame_size = width * height * 3 # 3 bytes for rgb24 - frame_count = 10 - start_frame = 2 - - out = ( - ffmpeg.input( - 'pipe:0', - format='rawvideo', - pixel_format='rgb24', - video_size=(width, height), - framerate=10, - ) - .trim(start_frame=start_frame) - .output('pipe:1', format='rawvideo') - ) - - args = out.get_args() - assert args == [ - '-f', - 'rawvideo', - '-video_size', - '{}x{}'.format(width, height), - '-framerate', - '10', - '-pixel_format', - 'rgb24', - '-i', - 'pipe:0', - '-filter_complex', - '[0]trim=start_frame=2[s0]', - '-map', - '[s0]', - '-f', - 'rawvideo', - 'pipe:1', - ] - - cmd = ['ffmpeg'] + args - p = subprocess.Popen( - cmd, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - - in_data = bytes( - bytearray([random.randint(0, 255) for _ in range(frame_size * frame_count)]) - ) - p.stdin.write(in_data) # note: this could block, in which case need to use threads - p.stdin.close() - - out_data = p.stdout.read() - assert len(out_data) == frame_size * (frame_count - start_frame) - assert out_data == in_data[start_frame * frame_size :] - - -def test__probe(): - data = ffmpeg.probe(TEST_INPUT_FILE1) - assert set(data.keys()) == {'format', 'streams'} - assert data['format']['duration'] == '7.036000' - - -@pytest.mark.skipif(sys.version_info < (3, 3), reason='requires python3.3 or higher') -def test__probe_timeout(): - with pytest.raises(subprocess.TimeoutExpired) as excinfo: - ffmpeg.probe(TEST_INPUT_FILE1, timeout=0) - assert 'timed out after 0 seconds' in str(excinfo.value) - - -def test__probe__exception(): - with pytest.raises(ffmpeg.Error) as excinfo: - ffmpeg.probe(BOGUS_INPUT_FILE) - assert str(excinfo.value) == 'ffprobe error (see stderr output for detail)' - assert 'No such file or directory'.encode() in excinfo.value.stderr - - -def test__probe__extra_args(): - data = ffmpeg.probe(TEST_INPUT_FILE1, show_frames=None) - assert set(data.keys()) == {'format', 'streams', 'frames'} - - -def get_filter_complex_input(flt, name): - m = re.search(r'\[([^]]+)\]{}(?=[[;]|$)'.format(name), flt) - if m: - return m.group(1) - else: - return None - - -def get_filter_complex_outputs(flt, name): - m = re.search(r'(^|[];]){}((\[[^]]+\])+)(?=;|$)'.format(name), flt) - if m: - return m.group(2)[1:-1].split('][') - else: - return None - - -def test__get_filter_complex_input(): - assert get_filter_complex_input('', 'scale') is None - assert get_filter_complex_input('scale', 'scale') is None - assert get_filter_complex_input('scale[s3][s4];etc', 'scale') is None - assert get_filter_complex_input('[s2]scale', 'scale') == 's2' - assert get_filter_complex_input('[s2]scale;etc', 'scale') == 's2' - assert get_filter_complex_input('[s2]scale[s3][s4];etc', 'scale') == 's2' - - -def test__get_filter_complex_outputs(): - assert get_filter_complex_outputs('', 'scale') is None - assert get_filter_complex_outputs('scale', 'scale') is None - assert get_filter_complex_outputs('scalex[s0][s1]', 'scale') is None - assert get_filter_complex_outputs('scale[s0][s1]', 'scale') == ['s0', 's1'] - assert get_filter_complex_outputs('[s5]scale[s0][s1]', 'scale') == ['s0', 's1'] - assert get_filter_complex_outputs('[s5]scale[s1][s0]', 'scale') == ['s1', 's0'] - assert get_filter_complex_outputs('[s5]scale[s1]', 'scale') == ['s1'] - assert get_filter_complex_outputs('[s5]scale[s1];x', 'scale') == ['s1'] - assert get_filter_complex_outputs('y;[s5]scale[s1];x', 'scale') == ['s1'] - - -def test__multi_output_edge_label_order(): - scale2ref = ffmpeg.filter_multi_output( - [ffmpeg.input('x'), ffmpeg.input('y')], 'scale2ref' - ) - out = ffmpeg.merge_outputs( - scale2ref[1].filter('scale').output('a'), - scale2ref[10000].filter('hflip').output('b'), - ) - - args = out.get_args() - flt_cmpl = args[args.index('-filter_complex') + 1] - out1, out2 = get_filter_complex_outputs(flt_cmpl, 'scale2ref') - assert out1 == get_filter_complex_input(flt_cmpl, 'scale') - assert out2 == get_filter_complex_input(flt_cmpl, 'hflip') diff --git a/bin/lib/ffmpeg/pyproject.toml b/bin/lib/ffmpeg/pyproject.toml deleted file mode 100644 index de71e58..0000000 --- a/bin/lib/ffmpeg/pyproject.toml +++ /dev/null @@ -1,15 +0,0 @@ -[tool.black] -skip-string-normalization = true -target_version = ['py27'] # TODO: drop Python 2 support (... "Soon"). -include = '\.pyi?$' -exclude = ''' -( - /( - \.eggs - | \.git - | \.tox - | \venv - | dist - )/ -) -''' diff --git a/bin/lib/ffmpeg/pytest.ini b/bin/lib/ffmpeg/pytest.ini deleted file mode 100644 index 01ab5ea..0000000 --- a/bin/lib/ffmpeg/pytest.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pytest] -testpaths = ffmpeg/tests diff --git a/bin/lib/ffmpeg/setup.cfg b/bin/lib/ffmpeg/setup.cfg deleted file mode 100644 index b7e4789..0000000 --- a/bin/lib/ffmpeg/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[aliases] -test=pytest diff --git a/bin/lib/ffmpeg/setup.py b/bin/lib/ffmpeg/setup.py deleted file mode 100644 index 72f381c..0000000 --- a/bin/lib/ffmpeg/setup.py +++ /dev/null @@ -1,100 +0,0 @@ -from setuptools import setup -from textwrap import dedent - -version = '0.2.0' -download_url = 'https://github.com/kkroening/ffmpeg-python/archive/v{}.zip'.format( - version -) - -long_description = dedent( - '''\ - ffmpeg-python: Python bindings for FFmpeg - ========================================= - - :Github: https://github.com/kkroening/ffmpeg-python - :API Reference: https://kkroening.github.io/ffmpeg-python/ -''' -) - - -file_formats = [ - 'aac', - 'ac3', - 'avi', - 'bmp', - 'flac', - 'gif', - 'mov', - 'mp3', - 'mp4', - 'png', - 'raw', - 'rawvideo', - 'wav', -] -file_formats += ['.{}'.format(x) for x in file_formats] - -misc_keywords = [ - '-vf', - 'a/v', - 'audio', - 'dsp', - 'FFmpeg', - 'ffmpeg', - 'ffprobe', - 'filtering', - 'filter_complex', - 'movie', - 'render', - 'signals', - 'sound', - 'streaming', - 'streams', - 'vf', - 'video', - 'wrapper', -] - -keywords = misc_keywords + file_formats - -setup( - name='ffmpeg-python', - packages=['ffmpeg'], - version=version, - description='Python bindings for FFmpeg - with complex filtering support', - author='Karl Kroening', - author_email='karlk@kralnet.us', - url='https://github.com/kkroening/ffmpeg-python', - download_url=download_url, - keywords=keywords, - long_description=long_description, - install_requires=['future'], - extras_require={ - 'dev': [ - 'future==0.17.1', - 'numpy==1.16.4', - 'pytest-mock==1.10.4', - 'pytest==4.6.1', - 'Sphinx==2.1.0', - 'tox==3.12.1', - ] - }, - classifiers=[ - 'Intended Audience :: Developers', - 'License :: OSI Approved :: Apache Software License', - 'Natural Language :: English', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - ], -) diff --git a/bin/lib/ffmpeg/tox.ini b/bin/lib/ffmpeg/tox.ini deleted file mode 100644 index 9881407..0000000 --- a/bin/lib/ffmpeg/tox.ini +++ /dev/null @@ -1,24 +0,0 @@ -# Tox (https://tox.readthedocs.io/) is a tool for running tests -# in multiple virtualenvs. This configuration file will run the -# test suite on all supported python versions. To use it, "pip install tox" -# and then run "tox" from this directory. - -[tox] -envlist = py27, py35, py36, py37, py38, py39, py310 - -[gh-actions] -python = - 2.7: py27 - 3.5: py35 - 3.6: py36 - 3.7: py37 - 3.8: py38 - 3.9: py39 - 3.10: py310 - -[testenv] -commands = py.test -vv -deps = - future - pytest - pytest-mock diff --git a/fsrimagevideoupscaler-cli.py b/fsrimagevideoupscaler-cli.py index 3097bd9..becd31f 100644 --- a/fsrimagevideoupscaler-cli.py +++ b/fsrimagevideoupscaler-cli.py @@ -9,19 +9,39 @@ import argparse import bin.handler +import os +import time ap = argparse.ArgumentParser( description='FSRImageVideoUpscaler - CLI' ) ap.add_argument( 'inputfile', help='File path for the video / image to be upscaled' ) ap.add_argument( 'outputfile', help='File path for the video / image that was upscaled' ) ap.add_argument( '-s', '--scalefactor', help='Scale factor for the video / image' ) +ap.add_argument( '-T', '--threads', help='Thread count to use. Cannot exceed CPU thread count. Scaling non-linear (using 2 threads is not exactly 2x the speed of 1 thread)' ) args = ap.parse_args() handler = bin.handler.Handler() -if ( args.scalefactor ): - if ( args.scalefactor[ len(args.scalefactor) -1: ] == 'x' ): - handler.handler( 'bin/lib/FidelityFX_CLI.exe', args.inputfile, 'custom', args.scalefactor, args.outputfile ) +go = True; + +if ( os.path.exists( args.outputfile ) ): + if ( input( 'File already exists. Do you want to replace it? (y/n) ' ).lower() == 'y' ): + go = True + os.remove( args.outputfile ); else: - raise NameError( 'Argument Scale does require to be of form 2x! (it has to end in x)' ) -else: - handler.handler( 'bin/lib/FidelityFX_CLI.exe', args.inputfile, 'custom', '2x', args.outputfile ) \ No newline at end of file + print( '\nRefusing to Upscale video. Please delete the file or specify another filepath!') + go = False + +if ( go ): + if ( args.scalefactor ): + if ( args.scalefactor[ len(args.scalefactor) -1: ] == 'x' ): + if ( args.threads != None ): + handler.handler( 'bin/lib/FidelityFX_CLI.exe', args.inputfile, 'custom', args.scalefactor, args.outputfile, threads=int( args.threads ) ); + else: + handler.handler( 'bin/lib/FidelityFX_CLI.exe', args.inputfile, 'custom', args.scalefactor, args.outputfile ); + else: + raise NameError( 'Argument Scale does require to be of form 2x! (it has to end in x)' ) + else: + if ( args.threads != None ): + handler.handler( 'bin/lib/FidelityFX_CLI.exe', args.inputfile, 'custom', '2x', args.outputfile, threads=int( args.threads ) ); + else: + handler.handler( 'bin/lib/FidelityFX_CLI.exe', args.inputfile, 'custom', '2x', args.outputfile ) \ No newline at end of file