PHP скриншоты с видео

Тема в разделе "PHP", создана пользователем dimm666, 8 июн 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dimm666

    dimm666 Создатель

    Регистр.:
    20 мар 2009
    Сообщения:
    25
    Симпатии:
    0
    Доброго дня. Есть ролик в формате H.264 С него нужно сделать серию скринов (типа раскадровки). Может кто-нибудь подсказать, как это сделать? Может, хоть платное что-то есть?
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    установить на сервере ffmpeg или mplayer, но для mplayer нужны будут кодеки отдельно. Дальше через командную строку в php запускаем команду создания снимка, например

    ffmpeg -i video.mp4 -y -f image2 -ss 8 -sameq -t 0.001 -s 320*240 screenshot.png

    подробно команды
    http://www.ffmpeg.org/ffmpeg-doc.html

    получается php скрипт такой
    PHP:
    exec("ffmpeg -i video.mp4 -y -f image2 -ss 8 -sameq -t 0.001 -s 320*240 screenshot.png");
    тут скомпилированный ffmpeg для windows
    http://ffmpeg.arrozcru.org/autobuilds/

    например на windows подробная информация о видео файле
    PHP:
    //показать результат
    $output shell_exec("ffmpeg.exe -i video.mp4 2>&1");
    echo 
    "<pre>$output</pre>";

    //результат в массиве по строчкам
    exec("ffmpeg.exe -i video.mp4 2>&1"$output);
    echo 
    "<pre>";
    print_r($output);
    echo 
    "</pre>";
     
    KEPZ и dimm666 нравится это.
  4. dimm666

    dimm666 Создатель

    Регистр.:
    20 мар 2009
    Сообщения:
    25
    Симпатии:
    0
    Не могу понять, ffmpeg делает скрины только первых 53 кадров, а дальше - нет. Может, кто сталкивался?
     
  5. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    может скрипт не успевает за 30 сек сделать скрины, если ошибка такая
    Maximum execution time of 30 seconds exceeded
    тогда можно увечил ограничение времени выполнения скрипта по умолчанию с функцией set_time_limit(секунд)

    Ещё вариант запускать обработку видео в фоновом режиме через командную строку php, например скрипт обработки такой
    PHP:
    <?
    //параметры из командной строки
    $path $_SERVER['argv']['1']; 
    $video $_SERVER['argv']['2']; 
    $log $_SERVER['argv']['3'];
    $output shell_exec($path."ffmpeg.exe -i ".$path.$video." -y -f image2 -ss 8 -sameq -t 0.001 -s 320*240 ".$path."screenshot.png 2>&1");
    file_put_contents($path.$log$output);
    ?>
    а скрипт запуска скрипта обработки такой
    PHP:
    //запуск скрипта в фоновом режиме windows - "> nul", unix - ">/dev/null &"
    exec("/usr/local/bin/php5.exe /home/ffmpeg/convert.php /home/ffmpeg/ video1.mp4 log1.txt > nul");
    плюс что при запуске не надо ждать пока выполнится скрипт, минус не ясно когда закончится обработка но можно логи проверять, если есть лог то закончено. Ещё могут быть проблемы с видео файлом тогда по логам смотреть.
     
  6. dimm666

    dimm666 Создатель

    Регистр.:
    20 мар 2009
    Сообщения:
    25
    Симпатии:
    0
    Разобрался более-менее. Осталась только одна проблема - делает скрины не дальше 600-700 кадра (при 20000 кадрах). Потом просто тихо, без ошибок умирает. Может, какие-то ограничения на хостинге?
    $img=$movie->getFrame($frame)
     
Статус темы:
Закрыта.