diff --git a/ffmpeg/nodes.py b/ffmpeg/nodes.py
index cacab8ee45e4b889d12bcdfc1d5b13adfd0e67fe..0558e8028b906adfb36d4c9ea5ec1abeb03364e3 100644
--- a/ffmpeg/nodes.py
+++ b/ffmpeg/nodes.py
@@ -286,7 +286,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 51ee258726884fb44400f1eee5b9a920aed95bed..20f368a33f4675b4ca0812c7c7e14a4d8a24ff80 100644
--- a/ffmpeg/tests/test_ffmpeg.py
+++ b/ffmpeg/tests/test_ffmpeg.py
@@ -120,6 +120,19 @@ def test_repeated_args():
     out_file = ffmpeg.input('dummy.mp4').output('dummy2.mp4', streamid=['0:0x101', '1:0x102'])
     assert out_file.get_args() == ['-i', 'dummy.mp4', '-streamid', '0:0x101', '-streamid', '1:0x102', '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')