Подтвердить что ты не робот

Создать изображение предварительного просмотра из видеофайла?

Есть ли способ PHP для видеофайла (.mov, .mp4) для создания предварительного просмотра эскизов?

4b9b3361

Ответ 2

Решение № 1 (более старое) (не рекомендуется)

Сначала установите проект ffmpeg-php (http://ffmpeg-php.sourceforge.net/)

И тогда вы можете использовать этот простой код:

<?php
$frame = 10;
$movie = 'test.mp4';
$thumbnail = 'thumbnail.png';

$mov = new ffmpeg_movie($movie);
$frame = $mov->getFrame($frame);
if ($frame) {
    $gd_image = $frame->toGDImage();
    if ($gd_image) {
        imagepng($gd_image, $thumbnail);
        imagedestroy($gd_image);
        echo '<img src="'.$thumbnail.'">';
    }
}
?>

Описание: Этот проект использует двоичное расширение .so файл. Это очень старое и последнее обновление было в 2008 году. Так что, возможно, не работает с более новой версией FFMpeg или PHP.


Решение № 2 (обновление 2018) (рекомендуется)

Сначала установите проект PHP-FFMpeg (https://github.com/PHP-FFMpeg/PHP-FFMpeg)
(просто запустите для установки: composer require php-ffmpeg/php-ffmpeg)

И тогда вы можете использовать этот простой код:

<?php
require 'vendor/autoload.php';

$sec = 10;
$movie = 'test.mp4';
$thumbnail = 'thumbnail.png';

$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open($movie);
$frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds($sec));
$frame->save($thumbnail);
echo '<img src="'.$thumbnail.'">';

Описание: Это более новый и более современный проект и работает с последней версией FFMpeg и PHP. Обратите внимание, что это требуется для PHP-функции proc_open().

Ответ 3

Приходят на ум два способа:

  • Используя инструмент командной строки, такой как популярный ffmpeg, вам почти всегда понадобится собственный сервер (или очень хороший сервер/хостинг-компания), чтобы получить это

  • Используя плагин screenshoot "для LongTail Video Player, который позволяет создавать ручные скриншоты, которые затем отправляются на сервер script.

Ответ 4

Попробуйте с ffprobe который устанавливается самостоятельно при установке ffmpeg

function get_video_attributes($video,$ffprobe) {

        $command = "$ffprobe $video 2>&1";
        $output = shell_exec($command);

        $regex_sizes = "/Video: ([^,]*), (.*), ([0-9]{1,4})x([0-9]{1,4}), ([0-9]{1,4}) kb\/s/";
        if (preg_match($regex_sizes, $output, $regs)) {
            $v_codec = $regs[1] ? $regs[1] : null;
            $width = $regs[3] ? $regs[3] : null;
            $height = $regs[4] ? $regs[4] : null;
            $v_bps = $regs[5] ? $regs[5] : null;
        }

        $regex_sizes = "/Audio: ([^,]*), ([^,]*) Hz, (.*), ([0-9]{1,4}) kb\/s/";
        if (preg_match($regex_sizes, $output, $regs)) {
            $a_codec = $regs[1] ? $regs[1] : null;
            $hz = $regs[2] ? $regs[2] : null;
            $a_bps = $regs[4] ? $regs[4] : null;
        }

        $regex_duration = "/Duration: ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}).([0-9]{1,2}), (.*) ([0-9]{1,4}) kb\/s/";
        if (preg_match($regex_duration, $output, $regs)) {
            $hours = $regs[1] ? $regs[1] : null;
            $mins = $regs[2] ? $regs[2] : null;
            $secs = $regs[3] ? $regs[3] : null;
            $ms = $regs[4] ? $regs[4] : null;
            $bps = $regs[6] ? $regs[6] : null;
        }

        return array(
            'width' => $width ? $width : null,
            'height' => $height ? $height : null,
            'hours' => $hours ? $hours : null,
            'mins' => $mins ? $mins : null,
            'secs' => $secs ? $secs : null,
            'ms' => $ms ? $ms : null,
            'hz' => $hz ? $hz : null,
            'v_codec' => $v_codec ? $v_codec : null,
            'a_codec' => $a_codec ? $a_codec : null,
            'bps' => $bps ? $bps : null,
            'v_bps' => $v_bps ? $v_bps : null,
            'a_bps' => $a_bps ? $a_bps : null
        );
    }