|
1 | 1 | from __future__ import unicode_literals |
2 | 2 |
|
| 3 | +from functools import reduce |
3 | 4 | from past.builtins import basestring |
| 5 | +import copy |
4 | 6 | import operator as _operator |
5 | 7 | import subprocess as _subprocess |
6 | 8 |
|
|
16 | 18 | operator, |
17 | 19 | OutputNode, |
18 | 20 | ) |
19 | | -from functools import reduce |
20 | 21 |
|
21 | 22 | def _get_stream_name(name): |
22 | 23 | return '[{}]'.format(name) |
23 | 24 |
|
24 | 25 |
|
| 26 | +def _convert_kwargs_to_cmd_line_args(kwargs): |
| 27 | + args = [] |
| 28 | + for k in sorted(kwargs.keys()): |
| 29 | + v = kwargs[k] |
| 30 | + args.append('-{}'.format(k)) |
| 31 | + if v: |
| 32 | + args.append('{}'.format(v)) |
| 33 | + return args |
| 34 | + |
| 35 | + |
25 | 36 | def _get_input_args(input_node): |
26 | 37 | if input_node._name == input.__name__: |
27 | | - args = ['-i', input_node._kwargs['filename']] |
| 38 | + kwargs = copy.copy(input_node._kwargs) |
| 39 | + filename = kwargs.pop('filename') |
| 40 | + fmt = kwargs.pop('format', None) |
| 41 | + video_size = kwargs.pop('video_size', None) |
| 42 | + args = [] |
| 43 | + if fmt: |
| 44 | + args += ['-f', fmt] |
| 45 | + if video_size: |
| 46 | + args += ['-video_size', '{}x{}'.format(video_size[0], video_size[1])] |
| 47 | + args += _convert_kwargs_to_cmd_line_args(kwargs) |
| 48 | + args += ['-i', filename] |
28 | 49 | else: |
29 | 50 | assert False, 'Unsupported input node: {}'.format(input_node) |
30 | 51 | return args |
@@ -78,7 +99,13 @@ def _get_output_args(node, stream_name_map): |
78 | 99 | if stream_name != '[0]': |
79 | 100 | args += ['-map', stream_name] |
80 | 101 | if node._name == output.__name__: |
81 | | - args += [node._kwargs['filename']] |
| 102 | + kwargs = copy.copy(node._kwargs) |
| 103 | + filename = kwargs.pop('filename') |
| 104 | + fmt = kwargs.pop('format', None) |
| 105 | + if fmt: |
| 106 | + args += ['-f', fmt] |
| 107 | + args += _convert_kwargs_to_cmd_line_args(kwargs) |
| 108 | + args += [filename] |
82 | 109 | else: |
83 | 110 | assert False, 'Unsupported output node: {}'.format(node) |
84 | 111 | return args |
|
0 commit comments