diff -urN fceux-2.2.3-orig/src/drivers/sdl/config.cpp fceux-2.2.3/src/drivers/sdl/config.cpp
--- fceux-2.2.3-orig/src/drivers/sdl/config.cpp	2016-07-29 05:52:39 +0900
+++ fceux-2.2.3/src/drivers/sdl/config.cpp	2017-04-12 04:24:31 +0900
@@ -397,6 +397,8 @@
 	config->addOption("SDL.Zapper.0.DeviceType", "Mouse");
 	config->addOption("SDL.Zapper.0.DeviceNum", 0);
 
+	config->addOption("turbovideo", "SDL.TurboVideo", 1);
+
 	return config;
 }
 
diff -urN fceux-2.2.3-orig/src/drivers/sdl/sdl.cpp fceux-2.2.3/src/drivers/sdl/sdl.cpp
--- fceux-2.2.3-orig/src/drivers/sdl/sdl.cpp	2016-07-29 05:52:39 +0900
+++ fceux-2.2.3/src/drivers/sdl/sdl.cpp	2017-04-12 04:24:31 +0900
@@ -56,6 +56,7 @@
 int isloaded;
 
 bool turbo = false;
+bool turboVideo = true;
 
 int closeFinishedMovie = 0;
 
@@ -168,6 +169,7 @@
 #ifdef CREATE_AVI
 	puts ("--videolog     c       Calls mencoder to grab the video and audio streams to\n                         encode them. Check the documentation for more on this.");
 	puts ("--mute        {0|1}    Mutes FCEUX while still passing the audio stream to\n                         mencoder during avi creation.");
+	puts ("--turbovideo  {0|1}    Enables/disables turbo during video creation.");
 #endif
 	puts("");
 	printf("Compiled with SDL version %d.%d.%d\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL );
@@ -320,6 +322,10 @@
 	if(fourscore)
 		eoptions |= EO_FOURSCORE;
 
+	int turbo = 1;
+	g_config->getOption("SDL.TurboVideo", &turbo);
+	turboVideo = (turbo != 0);
+
 	InitInputInterface();
 	return 1;
 }
@@ -370,18 +376,35 @@
 		 );
 		delete [] MonoBuf;
 	  }
-	  Count /= 2;
-	  if(inited & 1)
+	  if((inited & 1) && !mutecapture && Count > 0 && Buffer)
 	  {
-		if(Count > GetWriteSound()) Count = GetWriteSound();
-		if (!mutecapture)
-		  if(Count > 0 && Buffer) WriteSound(Buffer,Count);   
+		int write = Count;
+		if(write > GetWriteSound()) write = GetWriteSound();
+		WriteSound(Buffer, write);
+		if(!turboVideo && !(eoptions&EO_NOTHROTTLE))
+		{
+			int32 *ptr = Buffer + write;
+			Count -= write;
+			while (Count > 0)
+			{
+				int write = Count;
+				if(write > GetWriteSound()) write = GetWriteSound();
+				WriteSound(ptr, write);
+				ptr += write;
+				Count -= write;
+			}
+		}
 	  }
 	  if(inited & 2)
 		FCEUD_UpdateInput();
 	  if(XBuf && (inited & 4)) BlitScreen(XBuf);
-	  
-	  //SpeedThrottle();
+	  if(!turboVideo && !(eoptions&EO_NOTHROTTLE))
+	  {
+		while (SpeedThrottle())
+		{
+			FCEUD_UpdateInput();
+		}
+          }
 		return;
 	 }
 	#endif
