ffmpeg-php для создания эскиза видео - PullRequest
6 голосов
/ 12 октября 2010

Я пытаюсь использовать этот скрипт для создания миниатюры видео, используя ffmpeg . Сначала я использовал phpinfo(); и обнаружил, что на моем сервере установлен ffmpeg.

Затем я скопировал ffmpeg-php на свой сервер и запустил тестовый файл

Я узнал, что многие функции работают на моем сервере

Я получил вывод, как это

Выход: -

Functions available in /usr/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so extension:

Methods available in class ffmpeg_movie:
__construct
getduration
getframecount
getframerate
getfilename
getcomment
gettitle
getauthor
getartist
getcopyright
getalbum
getgenre
getyear
gettracknumber
getframewidth
getframeheight
getframenumber
getpixelformat
getbitrate
hasaudio
hasvideo
getnextkeyframe
getframe
getvideocodec
getaudiocodec
getvideostreamid
getaudiostreamid
getaudiochannels
getaudiosamplerate
getaudiobitrate
getvideobitrate
getpixelaspectratio
getpixelaspectratio
getvideobitrate
getaudiobitrate
getaudiosamplerate
getaudiochannels
getaudiostreamid
getvideostreamid
getaudiocodec
getvideocodec
getframe
getnextkeyframe
hasvideo
hasaudio
getbitrate
getpixelformat
getframenumber
getframeheight
getframewidth
gettracknumber
getyear
getgenre
getalbum
getcopyright
getartist
getauthor
gettitle
getcomment
getfilename
getframerate
getframecount
getduration
__construct

Я написал этот код и попробовал любой возможный путь для присвоения $ffmpeg;

<?php

    $thumb_stdout;
    $retval=0;
    $ffmpeg = '/home/lib/ffmpeg';

// change "demo.mpg" to your mpg file name!
$video  = dirname(__FILE__) . 'demo.mpg';

// change "demo.jpg" to whichever name you like or don't
// for this example, the name of the output jpg file does not matter
$image  = dirname(__FILE__) . 'demo.jpg';

$second = 1;

$cmd = "$ffmpeg -i $video 2>&1";
if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', '$cmd', $time)) {
    $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];
    $second = rand(1, ($total - 1));
}

//$cmd = "$ffmpeg -i $video -deinterlace -an -ss $second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg $image 2>&1";
$cmd = "$ffmpeg -i $video -r 1 -ss 00:00:05 -t 00:00:01 -s 250x250 -f image2 $image";
echo $cmd;
exec($cmd);
//$return = '$cmd';

echo '<br>done!';
?>

Ответы [ 2 ]

8 голосов
/ 14 октября 2010

Наконец-то я получил код благодаря Anubhaw . Ваша ссылка помогла вам много. Попробуйте этот код.*

с уважением,

Васим

5 голосов
/ 08 ноября 2014

Посмотрел код, сделал его проще и работоспособнее, может быть, это поможет некоторым из вас.

class VideoTile
{
    public static function createMovieThumb($srcFile, $destFile = "test.jpg")
    {
        // Change the path according to your server.
        $ffmpeg_path = 'D:\\ffmpeg\\bin\\';

        $output = array();

        $cmd = sprintf('%sffmpeg -i %s -an -ss 00:00:05 -r 1 -vframes 1 -y %s', 
            $ffmpeg_path, $srcFile, $destFile);

        if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
            $cmd = str_replace('/', DIRECTORY_SEPARATOR, $cmd);
        else
            $cmd = str_replace('\\', DIRECTORY_SEPARATOR, $cmd);

        exec($cmd, $output, $retval);

        if ($retval)
            return false;

        return $destFile;
    }
}

Использование

$file = VideoTile::createMovieThumb("../video3.mp4");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...