From 3e68bc8c9a518f1570998454e87484cded33c844 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Wed, 9 May 2018 03:09:21 -0500 Subject: [PATCH 1/2] #30: add `global_args` operator --- ffmpeg/_ffmpeg.py | 9 ++++++++- ffmpeg/_run.py | 6 +----- ffmpeg/tests/test_ffmpeg.py | 5 +++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/ffmpeg/_ffmpeg.py b/ffmpeg/_ffmpeg.py index 1e7690e..b73e998 100644 --- a/ffmpeg/_ffmpeg.py +++ b/ffmpeg/_ffmpeg.py @@ -26,13 +26,20 @@ def input(filename, **kwargs): 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__).stream() + return GlobalNode(stream, overwrite_output.__name__, ['-y']).stream() @output_operator() diff --git a/ffmpeg/_run.py b/ffmpeg/_run.py index 804264d..4e5faf4 100644 --- a/ffmpeg/_run.py +++ b/ffmpeg/_run.py @@ -10,7 +10,6 @@ import subprocess as _subprocess from ._ffmpeg import ( input, output, - overwrite_output, ) from .nodes import ( get_stream_spec_nodes, @@ -92,10 +91,7 @@ def _get_filter_arg(filter_nodes, outgoing_edge_maps, stream_name_map): def _get_global_args(node): - if node.name == overwrite_output.__name__: - return ['-y'] - else: - raise ValueError('Unsupported global node: {}'.format(node)) + return list(node.args) def _get_output_args(node, stream_name_map): diff --git a/ffmpeg/tests/test_ffmpeg.py b/ffmpeg/tests/test_ffmpeg.py index 1f43158..3ad4113 100644 --- a/ffmpeg/tests/test_ffmpeg.py +++ b/ffmpeg/tests/test_ffmpeg.py @@ -105,6 +105,11 @@ def test_get_args_simple(): 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_complex_filter_example(): split = (ffmpeg .input(TEST_INPUT_FILE1) From 84355d419c9b633aca8104f5f3362a834cd37508 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Wed, 9 May 2018 03:15:12 -0500 Subject: [PATCH 2/2] #30: re-futurize --- ffmpeg/_ffmpeg.py | 1 + ffmpeg/_run.py | 2 ++ ffmpeg/_utils.py | 4 +++- ffmpeg/dag.py | 4 ++-- ffmpeg/nodes.py | 1 + ffmpeg/tests/test_ffmpeg.py | 1 + 6 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ffmpeg/_ffmpeg.py b/ffmpeg/_ffmpeg.py index b73e998..7ea3be2 100644 --- a/ffmpeg/_ffmpeg.py +++ b/ffmpeg/_ffmpeg.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +from past.builtins import basestring from ._utils import basestring from .nodes import ( diff --git a/ffmpeg/_run.py b/ffmpeg/_run.py index 4e5faf4..cec8bfb 100644 --- a/ffmpeg/_run.py +++ b/ffmpeg/_run.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +from builtins import str +from past.builtins import basestring from .dag import get_outgoing_edges, topo_sort from functools import reduce from ._utils import basestring diff --git a/ffmpeg/_utils.py b/ffmpeg/_utils.py index 20eb1af..3514409 100644 --- a/ffmpeg/_utils.py +++ b/ffmpeg/_utils.py @@ -1,10 +1,12 @@ 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 = unicode + str = str # `past.builtins.basestring` module can't be imported on Python3 in some environments (Ubuntu). diff --git a/ffmpeg/dag.py b/ffmpeg/dag.py index 335a060..fb51c6a 100644 --- a/ffmpeg/dag.py +++ b/ffmpeg/dag.py @@ -75,7 +75,7 @@ DagEdge = namedtuple('DagEdge', ['downstream_node', 'downstream_label', 'upstrea def get_incoming_edges(downstream_node, incoming_edge_map): edges = [] - for downstream_label, upstream_info in incoming_edge_map.items(): + 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 @@ -97,7 +97,7 @@ class KwargReprNode(DagNode): @property def __upstream_hashes(self): hashes = [] - for downstream_label, upstream_info in self.incoming_edge_map.items(): + 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 diff --git a/ffmpeg/nodes.py b/ffmpeg/nodes.py index e861822..46b7897 100644 --- a/ffmpeg/nodes.py +++ b/ffmpeg/nodes.py @@ -1,5 +1,6 @@ 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 diff --git a/ffmpeg/tests/test_ffmpeg.py b/ffmpeg/tests/test_ffmpeg.py index 3ad4113..c7805fa 100644 --- a/ffmpeg/tests/test_ffmpeg.py +++ b/ffmpeg/tests/test_ffmpeg.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +from builtins import str from builtins import bytes from builtins import range import ffmpeg