diff --git a/ffmpeg/nodes.py b/ffmpeg/nodes.py index e8b2838..cf9a35a 100644 --- a/ffmpeg/nodes.py +++ b/ffmpeg/nodes.py @@ -289,7 +289,13 @@ class FilterNode(Node): out_kwargs = {} for k, v in list(kwargs.items()): k = escape_chars(k, '\\\'=:') - v = escape_chars(v, '\\\'=:') + if isinstance(v, dict): + v = ','.join(['{}={}'.format( + escape_chars(vk, '\\\'=:'), + escape_chars(v[vk], '\\\'=:') + ) for vk in sorted(v)]) + else: + v = escape_chars(v, '\\\'=:') out_kwargs[k] = v arg_params = [escape_chars(v, '\\\'=:') for v in out_args] diff --git a/ffmpeg/tests/test_ffmpeg.py b/ffmpeg/tests/test_ffmpeg.py index 8dbc271..8c28bc9 100644 --- a/ffmpeg/tests/test_ffmpeg.py +++ b/ffmpeg/tests/test_ffmpeg.py @@ -131,6 +131,19 @@ def test_repeated_args(): 'dummy2.mp4', ] +def test_filter_sub_options(): + subtitle_filter = ffmpeg.input('dummy.mp4').filter('subtitles', force_style={ + 'Alignement': '6', 'Fontsize': '48'}).output('dummy2.mp4') + assert subtitle_filter.get_args() == [ + '-i', + 'dummy.mp4', + '-filter_complex', + r'[0]subtitles=force_style=Alignement=6\,Fontsize=48[s0]', + '-map', + '[s0]', + 'dummy2.mp4' + ] + def test__get_args__simple(): out_file = ffmpeg.input('dummy.mp4').output('dummy2.mp4')