diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py
--- a/src/PIL/GifImagePlugin.py
+++ b/src/PIL/GifImagePlugin.py
@@ -457,7 +457,8 @@ def _save_all(im, fp, filename):
 
 
 def _save(im, fp, filename, save_all=False):
-    im.encoderinfo.update(im.info)
+    for k, v in im.info.items():
+        im.encoderinfo.setdefault(k, v)
     # header
     try:
         palette = im.encoderinfo["palette"]

diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py
--- a/Tests/test_file_gif.py
+++ b/Tests/test_file_gif.py
@@ -305,9 +305,12 @@ def test_duration(self):
 
         out = self.tempfile('temp.gif')
         im = Image.new('L', (100, 100), '#000')
+
+        # Check that the argument has priority over the info settings
+        im.info['duration'] = 100
         im.save(out, duration=duration)
-        reread = Image.open(out)
 
+        reread = Image.open(out)
         self.assertEqual(reread.info['duration'], duration)
 
     def test_multiple_duration(self):

Gif duration setting is ignored
### What versions of Pillow and Python are you using?
Python 3.6.4
Pillow 5.0

Any animated gif I have tried the following lines of code on show no affect on the gif frame duration:

```python
> from PIL import Image
> f = Image.open('in.gif')
> f.save('out.gif', save_all=True, duration=400)
```

Hi. To help with your immediate problem, try this -

```python
from PIL import Image
f = Image.open('in.gif')
f.info['duration'] = 400
f.save('out.gif', save_all=True)
```

What I'm guessing is happening is that the images you are opening already have a `duration` key, and this key is overwriting the `duration` argument you are passing in on save.