diff --git a/ffmpeg/_run.py b/ffmpeg/_run.py index c5a2b52..1222853 100644 --- a/ffmpeg/_run.py +++ b/ffmpeg/_run.py @@ -1,10 +1,9 @@ from __future__ import unicode_literals - from .dag import get_outgoing_edges, topo_sort from ._utils import basestring from builtins import str from functools import reduce -from past.builtins import basestring +import collections import copy import operator import subprocess @@ -123,6 +122,11 @@ def _get_output_args(node, stream_name_map): fmt = kwargs.pop('format', None) if fmt: args += ['-f', fmt] + if 'video_size' in kwargs: + video_size = kwargs.pop('video_size') + if not isinstance(video_size, basestring) and isinstance(video_size, collections.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 diff --git a/ffmpeg/tests/test_ffmpeg.py b/ffmpeg/tests/test_ffmpeg.py index 25aedd1..ceb94a1 100644 --- a/ffmpeg/tests/test_ffmpeg.py +++ b/ffmpeg/tests/test_ffmpeg.py @@ -237,6 +237,17 @@ def test_filter_asplit(): ] +@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):