diff -urN youtube-dl-2017.07.02-orig/youtube_dl/utils.py youtube-dl-2017.07.02/youtube_dl/utils.py
--- youtube-dl-2017.07.02-orig/youtube_dl/utils.py	2017-06-26 12:05:56 +0900
+++ youtube-dl-2017.07.02/youtube_dl/utils.py	2017-07-10 13:56:13 +0900
@@ -485,22 +485,33 @@
     def replace_insane(char):
         if restricted and char in ACCENT_CHARS:
             return ACCENT_CHARS[char]
-        if char == '?' or ord(char) < 32 or ord(char) == 127:
+        if ord(char) < 32 or ord(char) == 127:
             return ''
-        elif char == '"':
-            return '' if restricted else '\''
-        elif char == ':':
-            return '_-' if restricted else ' -'
-        elif char in '\\/|*<>':
-            return '_'
-        if restricted and (char in '!&\'()[]{}$;`^,#' or char.isspace()):
-            return '_'
-        if restricted and ord(char) > 127:
+        if char == '/':
             return '_'
+        if platform.system() == 'Windows':
+            if char == '?':
+                return ''
+            if char == '"':
+                return '' if restricted else '\''
+            if char == ':':
+                return '_-' if restricted else ' -'
+            if char in '\\/|*<>':
+                return '_'
+        if restricted:
+            if char == '"':
+                return '' if restricted else '\''
+            if char == ':':
+                return '_-' if restricted else ' -'
+            if char in '!&\'()[]{}$;`^,#' or char.isspace():
+                return '_'
+            if ord(char) > 127:
+                return '_'
         return char
 
     # Handle timestamps
-    s = re.sub(r'[0-9]+(?::[0-9]+)+', lambda m: m.group(0).replace(':', '_'), s)
+    if platform.system() == 'Windows':
+        s = re.sub(r'[0-9]+(?::[0-9]+)+', lambda m: m.group(0).replace(':', '_'), s)
     result = ''.join(map(replace_insane, s))
     if not is_id:
         while '__' in result:
