Делимся секретами создания сайтов

Модуль ffmpeg, обработка видео, использование.

Об ffmpeg узнал не давно появилось много вопросов.

как получить скриншот из видео с помощью ffmpeg?

Задача: получить изображение конкретного кадра из видео (flv или avi или другого).

ffmpeg -i video.3gp -an -ss 00:01:30 -r 1 -vframes 1 -s 320×240 -y -f mjpeg screenshot.jpg

Эта команда сделает screenshot.jpg размером 320×240 из 90ойсекунды файла video.3gp.

-i — входящий фай
-f — формат исходящего файла
-s — размер исходящего файла в пикселях
-vframes 1 — количество фреймов (необязательный параметр)
-ss 15 — на какой секунде делать скрин;
-y — заменять исходящий файл, если он уже есть
-f - задает формат файла

как это написать в php

Ответы: 15 → “Модуль ffmpeg, обработка видео, использование.”

  1. Анзор Хутов Ответить

    http://vbolshov.org.ru/?ctrl=latest&page=2
    с середины страницы идет серия постов

  2. Алексей Вишняков Ответить

    SYSTEM()

  3. Дмитрий Пушкин Ответить

    предположим примерно так

    $cmd_mencoder_img = 'ffmpeg -i '.$m2["video_url"].' -an -ss 15-r 1 -vframes 1 -s 120×75 -y -f mjpeg image.jpg';
    system("$cmd_mencoder_img", $output_jpg);

    ffmpeg — путь к ffmpeg, обычно находится в /usr/bin/ffmpeg;
    video.flv — видео, с которого будем делать скрин;
    -ss 15 — на какой секунде делать скрин;
    -r — fps;
    -vframes 1 — количество фреймов (необязательный параметр);
    -s 120×75 — размеры картинки в пикселах (px);
    image.jpg — получившаяся картинка;

    как картинку вывести и куда код писать?

  4. Алексей Вишняков Ответить

    > system("$cmd_mencoder_img", $output_jpg);

    почему ты решил что $output_jpg – это картинка? Картинка у тебя в файле image.jpg

    вот ее и показывай людям

  5. Александр Усков Ответить

    вместо image.jpg можно написать stdout и получить бинарник картинки в поток, чтобы извлечь это из пхп, нужно воспользоваться функцией passthru($command,1) – тогда функция вернет весь выход.

    Но разумеется это делать не надо, картинку надо писать в файл чтобы не вызывать эту программку при каждом обновлении страницы.

    И вообще на шаред хостинге это никто вам сделать не даст (имеется ввиду вызвать шелл-команду)

  6. Кирилл Сербин Ответить

    $file='путь к файлу от корня';

    (file_exists($file))
    {
    $mov = new ffmpeg_movie($file);
    }
    else
    {
    die('невозможно найти файл');
    }

    //номер кадра
    $frame = 50;

    //ширина
    $w = $mov->GetFrameWidth();

    //высота
    $h = $mov->GetFrameHeight();

    //извлечение кадра
    $ff_frame = $mov->getFrame($frame);

    if ($ff_frame)
    {
    //в формат GD
    $gd_image = $ff_frame->toGDImage();

    if ($gd_image)
    {
    //вывод (для примера в gif)
    header('Content-type: image/gif');

    $nw=$w/4;
    $nh=$h/4;

    $idest = imagecreatetruecolor($nw, $nh);

    imagecopyresampled($idest, $gd_image, 0, 0, 0, 0, $nw, $nh, $w, $h);

    imagegif($idest);

    /*можно сделать изменение размера, нанесение копирайтов и водяных знаков, в общем все что применимо для GD*/
    }
    else
    {
    die('невозможно преобразовать в GD');
    }
    }
    else
    {
    die('невозможно извлечь кадр');
    }

  7. Дмитрий Пушкин Ответить

    //получаем скриншот по средствам php ffmpeg

    // путь до файла
    $file = $m2["video_url"];
    // кадр который будем выхватывать
    $frame = 150;

    // получаем кадр
    $movie = new ffmpeg_movie($file);
    $image = $movie->getFrame($frame);
    $show_img = $image->toGDImage();

    сделал вот так что дальше?
    как вывести?

  8. Кирилл Сербин Ответить

    ну дык сматри по примеру)

  9. Игорь Владимирович Ответить

    Знакомая тема, одно время очень долго с ним мучался, итак, ффмпег должен быть установлен на сервере, причем многие хостеры говорят что он не критичный и нах тип вообще ненужен, попросите либо их его установить, либо получите рут доступ и установите сами, или поменяйте хостера)) После этого возможно придется перевести сайт из safe mod на менее безопасный (короч отключить сайф мод) ну и после этого, пишем system,exec либо другую команду, какая вам больше подойдет, пишем в ней путь доступа к ффмпег (иногда работает и без пути, а просто ффмпег), и нужные вам команды (файлы должны быть с путями от папки программы ффмпег, либо с абсолютными), вроде все написал, остальное в мануале)) Ну или ко мне в личку, может чем еще подскажу))

    • Василий Ответить

      Наш хостер утверждает что модуль очень требовательный и “сразу жрет процессор на 100%” и соответственно система банит подобный сайт….. что в таком случаем можно сделать?

  10. Игорь Владимирович Ответить

    А расширение ffmpeg-php вроде так, имеет очень скудную ф-ть насколько помню, он вроде и конвертировать то видео не умеет

  11. Дмитрий Пушкин Ответить

    Кирилл WTLink Сербин, вроде разобрался.

    Игорь Владимирович с установкой до сих пор не понял до конца ладно что на хостинге есть. На свой локальный не могу установить может статейку кто подскажет.

  12. Игорь Владимирович Ответить

    Если винда, то просто качай экзешник, если линукс то используй менеджер apt-get yum pacman итд, смотри для каждого отдельно

  13. Дмитрий Пушкин Ответить

    Вроде все установил ну все равно работает не корректно.
    выдает ошибки

    Warning: Can't open movie file

    Fatal error: Call to a member function GetFrameWidth() on a non-object in

    может что ещё не хватает?

  14. Игорь Владимирович Ответить

    Если хочешь чтобы работала ffmpeg-php, то устанавливать надо как расширение к пхп, но оно не умеет вроде файлы конвертировать, а к обычному ффмпег обращайся через команды (функции system exec итд)

Ответить