diff --git a/lib/preview.php b/lib/preview.php
index 3fa494a2e03ac153770ada81585705e5c4243295..d49e9d3bde36712edd93594b8cdfa894ff4bd2df 100755
--- a/lib/preview.php
+++ b/lib/preview.php
@@ -9,6 +9,7 @@
 /*
 TODO:
   - delete thumbnails if files change. 
+  - make it work with external filesystem files. 
   - movies support
   - pdf support
   - mp3/id3 support
@@ -34,12 +35,17 @@ class OC_Preview {
 	static public function show($file,$maxX,$maxY,$scalingup) {
 		// get the mimetype of the file
 		$mimetype=explode('/',OC_FileSystem::getMimeType($file));
-
 		// it´s an image
 		if($mimetype[0]=='image'){
 			OCP\Response::enableCaching(3600 * 24); // 24 hour
 			$image=OC_PreviewImage::getThumbnail($file,$maxX,$maxY,$scalingup);
 			$image->show();
+
+		// it´s a video
+		}elseif($mimetype[0]=='video'){
+			OCP\Response::enableCaching(3600 * 24); // 24 hour
+			OC_PreviewMovie::getThumbnail($file,$maxX,$maxY,$scalingup);
+
 		// it´s something else. Let´s create a dummy preview
 		}else{
 			header('Content-type: image/png');
@@ -55,56 +61,59 @@ class OC_Preview {
 class OC_PreviewImage {
 
         public static function getThumbnail($path,$maxX,$maxY,$scalingup) {
-		$thumbnails_view = new \OC_FilesystemView('/'.\OCP\User::getUser() .'/'.OC_Preview::THUMBNAILS_FOLDER);
 
-		// is a preview already in the cache?
+                $thumbnails_view = new \OC_FilesystemView('/'.\OCP\User::getUser() .'/'.OC_Preview::THUMBNAILS_FOLDER);
+
+                // is a preview already in the cache?
                 if ($thumbnails_view->file_exists($path.'-'.$maxX.'-'.$maxY.'-'.$scalingup)) {
                         return new \OC_Image($thumbnails_view->getLocalFile($path.'-'.$maxX.'-'.$maxY.'-'.$scalingup));
                 }
-		
-		// does the sourcefile exist?
+
+                // does the sourcefile exist?
                 if (!\OC_Filesystem::file_exists($path)) {
                         \OC_Log::write('Preview', 'File '.$path.' don\'t exists', \OC_Log::WARN);
                         return false;
                 }
 
-		// open the source image
+                // open the source image
                 $image = new \OC_Image();
                 $image->loadFromFile(\OC_Filesystem::getLocalFile($path));
                 if (!$image->valid()) return false;
 
-		// fix the orientation
+                // fix the orientation
                 $image->fixOrientation();
-	
-		// calculate the right preview size
-		$Xsize=$image->width();
-		$Ysize=$image->height();
-		if (($Xsize/$Ysize)>($maxX/$maxY)) {
-			$factor=$maxX/$Xsize;
-		} else {
-			$factor=$maxY/$Ysize;
-		}
-		
-		// only scale up if requested
-		if($scalingup==false) {
-			if($factor>1) $factor=1;
-		}
-		$newXsize=$Xsize*$factor;
-		$newYsize=$Ysize*$factor;
 
-		// resize
+                // calculate the right preview size
+                $Xsize=$image->width();
+                $Ysize=$image->height();
+                if (($Xsize/$Ysize)>($maxX/$maxY)) {
+                        $factor=$maxX/$Xsize;
+                } else {
+                        $factor=$maxY/$Ysize;
+                }
+
+                // only scale up if requested
+                if($scalingup==false) {
+                        if($factor>1) $factor=1;
+                }
+                $newXsize=$Xsize*$factor;
+                $newYsize=$Ysize*$factor;
+
+                // resize
                 $ret = $image->preciseResize($newXsize, $newYsize);
                 if (!$ret) {
                         \OC_Log::write('Preview', 'Couldn\'t resize image', \OC_Log::ERROR);
                         unset($image);
                         return false;
                 }
-			
-		// store in cache
+
+                // store in cache
                 $l = $thumbnails_view->getLocalFile($path.'-'.$maxX.'-'.$maxY.'-'.$scalingup);
                 $image->save($l);
 
                 return $image;
+
+
         }
 
 
@@ -112,6 +121,39 @@ class OC_PreviewImage {
 }
 
 
+class OC_PreviewMovie {
+
+        public static function isAvailable() {
+		$check=shell_exec('ffmpeg');
+		if($check==NULL) return(false); else return(true);
+        }
+
+        public static function getThumbnail($path,$maxX,$maxY,$scalingup) {
+                $thumbnails_view = new \OC_FilesystemView('/'.\OCP\User::getUser() .'/'.OC_Preview::THUMBNAILS_FOLDER);
+
+                // is a preview already in the cache?
+                if ($thumbnails_view->file_exists($path.'-'.$maxX.'-'.$maxY.'-'.$scalingup)) {
+                        return new \OC_Image($thumbnails_view->getLocalFile($path.'-'.$maxX.'-'.$maxY.'-'.$scalingup));
+                }
+
+                // does the sourcefile exist?
+                if (!\OC_Filesystem::file_exists($path)) {
+                        \OC_Log::write('Preview', 'File '.$path.' don\'t exists', \OC_Log::WARN);
+                        return false;
+                }
+
+                // call ffmpeg to do the screenshot
+                shell_exec('ffmpeg -y  -i {'.escapeshellarg($path).'} -f mjpeg -vframes 1 -ss 1 -s {'.escapeshellarg($maxX).'}x{'.escapeshellarg($maxY).'} {.'.$thumbnails_view->getLocalFile($path.'-'.$maxX.'-'.$maxY.'-'.$scalingup).'}');
+
+                // output the generated Preview
+                $thumbnails_view->getLocalFile($path.'-'.$maxX.'-'.$maxY.'-'.$scalingup);
+                unset($thumbnails_view);
+        }
+
+
+}
+
+
 class OC_PreviewUnknown {
         public static function getThumbnail($maxX,$maxY) {