Support ffmpeg and avconv depending on which you have

This commit is contained in:
Mikael Nordfeldth 2016-02-07 01:02:59 +01:00
parent 41e36e1f28
commit 55546a5aab

View File

@ -2,7 +2,7 @@
/** /**
* GNU social - a federating social network * GNU social - a federating social network
* *
* Plugin to make thumbnails of video files with avconv * Plugin to make thumbnails of video files with ffmpeg/avconv
* *
* PHP version 5 * PHP version 5
* *
@ -31,13 +31,13 @@ if (!defined('GNUSOCIAL')) { exit(1); }
/* /*
* Dependencies: * Dependencies:
* avconv (external program call) * ffmpeg/avconv (external program call)
* php5-gd * php5-gd
* *
* Todo: * Todo:
* Make sure we support ffmpeg too, so we're not super Debian oriented. * Make sure we support ffmpeg too, so we're not super Debian oriented.
* *
* Video support will depend on your avconv. * Video support will depend on your ffmpeg/avconv.
*/ */
class VideoThumbnailsPlugin extends Plugin class VideoThumbnailsPlugin extends Plugin
@ -56,16 +56,25 @@ class VideoThumbnailsPlugin extends Plugin
} }
// Let's save our frame to a temporary file. If we fail, remove it. // Let's save our frame to a temporary file. If we fail, remove it.
$imgPath = tempnam(sys_get_temp_dir(), 'socialthumb-'); $tmp_imgPath = tempnam(sys_get_temp_dir(), 'socialthumb-');
$result = exec('avconv -i '.escapeshellarg($file->getPath()).' -vcodec mjpeg -vframes 1 -f image2 -an '.escapeshellarg($imgPath)); $cmd = null;
if (shell_exec('which ffmpeg')) {
if (!getimagesize($imgPath)) { $cmd = 'ffmpeg';
common_debug('exec of "avconv" produced a bad/nonexisting image it seems'); } elseif (shell_exec('which avconv')) {
@unlink($imgPath); $cmd = 'avconv';
$imgPath = null; // pretend we didn't touch it } else {
common_log(LOG_ERR, 'Neither ffmpeg nor avconv was found in your PATH. Cannot create video thumbnail.');
return true; return true;
} }
$result = exec($cmd.' -i '.escapeshellarg($file->getPath()).' -vcodec mjpeg -vframes 1 -f image2 -an '.escapeshellarg($imgPath));
if (!getimagesize($tmp_imgPath)) {
common_debug('exec of "avconv" produced a bad/nonexisting image it seems');
@unlink($tmp_imgPath);
return true;
}
$imgPath = $tmp_imgPath;
return false; return false;
} }