8000 Start fixing escaping for pan filter (which uses `|`) · yoyonel/ffmpeg-python@0a5c5c2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0a5c5c2

Browse files
committed
Start fixing escaping for pan filter (which uses |)
1 parent e500364 commit 0a5c5c2

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

ffmpeg/nodes.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -148,22 +148,31 @@ def __init__(self, stream_spec, name, max_inputs=1, args=[], kwargs={}):
148148
kwargs=kwargs
149149
)
150150

151-
"""FilterNode"""
152-
def _get_filter(self, outgoing_edges):
153-
args = self.args
154-
kwargs = self.kwargs
155-
if self.name == 'split':
156-
args = [len(outgoing_edges)]
151+
@classmethod
152+
def _get_item_param(cls, item):
153+
return escape_chars(item, '\\\'=:')
157154

158-
out_args = [escape_chars(x, '\\\'=:') for x in args]
155+
@classmethod
156+
def _get_dict_params(cls, d):
159157
out_kwargs = {}
160-
for k, v in list(kwargs.items()):
158+
for k, v in list(d.items()):
161159
k = escape_chars(k, '\\\'=:')
162160
v = escape_chars(v, '\\\'=:')
163161
out_kwargs[k] = v
162+
return ['{}={}'.format(k, out_kwargs[k]) for k in sorted(out_kwargs)]
163+
164+
@classmethod
165+
def _get_list_params(cls, l):
166+
out_args = [cls._get_item_param(x) for x in l]
167+
return [escape_chars(v, '\\\'=:') for v in out_args]
168+
169+
def _get_filter(self, outgoing_edges):
170+
args = self.args
171+
if self.name == 'split':
172+
args = [len(outgoing_edges)]
164173

165-
arg_params = [escape_chars(v, '\\\'=:') for v in out_args]
166-
kwarg_params = ['{}={}'.format(k, out_kwargs[k]) for k in sorted(out_kwargs)]
174+
arg_params = self._get_list_params(args)
175+
kwarg_params = self._get_dict_params(self.kwargs)
167176
params = arg_params + kwarg_params
168177

169178
params_text = escape_chars(self.name, '\\\'=:')

ffmpeg/tests/test_ffmpeg.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,18 @@ def test_custom_filter():
265265
]
266266

267267

268+
def test_custom_filter_escaped():
269+
stream = ffmpeg.input('dummy.mp4')
270+
stream = ffmpeg.filter_(stream, 'bogus=stuff', 'a=b\'', **{'c\\d': 'e=f'})
271+
stream = ffmpeg.output(stream, 'dummy2.mp4')
272+
assert stream.get_args() == [
273+
'-i', 'dummy.mp4',
274+
'-filter_complex', '[0]bogus\\\\=stuff=a\\\\\\\\\\\\=b\\\\\\\\\\\\\\\':c\\\\\\\\d=e\\\\=f[s0]',
275+
'-map', '[s0]',
276+
'dummy2.mp4'
277+
]
278+
279+
268280
def test_custom_filter_fluent():
269281
stream = (ffmpeg
270282
.input('dummy.mp4')

0 commit comments

Comments
 (0)
0