VideoThumbnails changed to use 'exec' call to avconv

This commit is contained in:
Mikael Nordfeldth 2015-02-25 01:36:14 +01:00
parent 9a843548c0
commit 3bbb748a08
1 changed files with 12 additions and 19 deletions

View File

@ -2,7 +2,7 @@
/**
* GNU social - a federating social network
*
* Plugin to make thumbnails of video files with ffmpeg
* Plugin to make thumbnails of video files with avconv
*
* PHP version 5
*
@ -31,10 +31,13 @@ if (!defined('GNUSOCIAL')) { exit(1); }
/*
* Dependencies:
* php5-ffmpeg
* avconv (external program call)
* php5-gd
*
* Video support will depend on your ffmpeg.
* Todo:
* Make sure we support ffmpeg too, so we're not super Debian oriented.
*
* Video support will depend on your avconv.
*/
class VideoThumbnailsPlugin extends Plugin
@ -52,23 +55,13 @@ class VideoThumbnailsPlugin extends Plugin
return true;
}
$movie = new ffmpeg_movie($file->getPath(), false);
$frames = $movie->getFrameCount();
if ($frames > 0) {
$frame = $movie->getFrame(floor($frames/2));
} else {
$frame = $movie->getNextKeyFrame();
}
// We failed to get a frame.
if (!$frame instanceof ffmpeg_frame) {
return true;
}
// Let's save our frame to a temporary file. If we fail, remove it.
$imgPath = tempnam(sys_get_temp_dir(), 'socialthumb');
if (!imagejpeg($frame->toGDImage(), $imgPath)) {
$imgPath = tempnam(sys_get_temp_dir(), 'socialthumb-');
$result = exec('avconv -i '.escapeshellarg($file->getPath()).' -vcodec mjpeg -vframes 1 -f mjpeg -an '.escapeshellarg($imgPath));
if (!getimagesize($imgPath)) {
common_debug('exec of "avconv" produced a bad/nonexisting image it seems');
@unlink($imgPath);
return true;
}