ФорумПрограммированиеPHP для идиотов → Конвертация видео средствами php ffmpeg (висы) 2

Конвертация видео средствами php ffmpeg (висы) 2

  • SHTURMAN

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz Окт. 12, 2010, 3:47 п.п.

    Добрый день!
    Подскажите, сейчас столкнулся с аналогичной проблемой, когда юзер загружает видео, оно должно перекодироваться , макс размер видео 6мб, при конвертации висит сервер. Сейчас проэкт находится на стадии разработки, поэтому на локале.
    Если делать все то же самое в консоле, то выполняется за пару секунд.
    Как решить данную проблему?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Окт. 12, 2010, 3:50 п.п., спустя 2 минуты 59 секунд

    SHTURMAN, а как вы конвертируете при "когда юзер загружает видео, оно должно перекодироваться "? Код в студию
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • SHTURMAN

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz Окт. 12, 2010, 3:53 п.п., спустя 2 минуты 47 секунд

    function run_external( $cmd, &$code )
    {
    $descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("pipe", "w")
    );

    $pipes = array();
    $process = proc_open($cmd, $descriptorspec, $pipes);
    $output = "";

    if (!is_resource($process)) return false;
    fclose($pipes[0]);

    stream_set_blocking($pipes[1],false);
    stream_set_blocking($pipes[2],false);

    $todo= array($pipes[1],$pipes[2]);

    while(true)
    {
    $read = array();
    if(!feof($pipes[1])) $read[] = $pipes[1];
    if(!feof($pipes[2])) $read[] = $pipes[2];

    if (!$read) break;

    $ready = stream_select($read, $write = NULL, $ex = NULL, 2);

    if ($ready === false) {
    break;
    }

    foreach ($read as $r)
    {
    $s = fread($r,1024);
    $output .= $s;
    }
    }

    fclose($pipes[1]);
    fclose($pipes[2]);

    $code = proc_close($process);

    return $output;
    }

    $dir_ffmpeg = $HTTP_SERVER_VARS['DOCUMENT_ROOT'].'/ffmpeg/bin/';
    $err .= run_external($dir_ffmpeg.'ffmpeg -i '.$_FILES['userfile']['tmp_name'].' -y -acodec aac -s 176x144 -ar 8000 -b 57344 -vcodec h263 -ab 7.4k -ac 1 '.$upload_video_file, $code);

    $upload_video_file генерится, думаю не суть важно какая там ссылка.
    это код если вкратце
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Окт. 13, 2010, 3:28 д.п., спустя 11 часов 35 минут 30 секунд

    простите, а зачем run_external() нужен?
    почему не использовать [man]exec[/man]() например?
    Спустя 75 сек.
    ну и еще код надо форматировать прежде чем заливать сюда, дальше первх 10-ти строк я не читал даже, это просто каша
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • SHTURMAN

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz Окт. 13, 2010, 11:21 д.п., спустя 7 часов 52 минуты 27 секунд

    прошу прощения, т.к. не часто пользуюсь форумами :-)
    вчера еще делал встроеными функциями php
    так вот какая штука выходит
    в таком вот случае:


    $err .= exec($dir_ffmpeg.'ffmpeg -formats', $new);
    var_dump($new);


    возвращает массив значений, а вот когда пишу:


    $err .= exec($dir_ffmpeg.'ffmpeg -i '.$_FILES['userfile']['tmp_name'].' -y -acodec aac -s 176x144 -ar 8000 -b 57344 -vcodec h263 -ab 7.4k -ac 1 '.$upload_video_file, $new);
    var_dump($new);


    то возвращается пустая строка и видео даже не кодируется…
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Окт. 13, 2010, 1:14 п.п., спустя 1 час 53 минуты 12 секунд


    $cmd = $dir_ffmpeg . 'ffmpeg -i ' . escapeshellcmd($_FILES['userfile']['tmp_name']) . ' -y -acodec aac -s 176x144 -ar 8000 -b 57344 -vcodec h263 -ab 7.4k -ac 1 ' . escapeshellcmd($upload_video_file);

    $res = exec($cmd, $out, $ret);

    var_dump($cmd, $res, $out, $ret);


    Что выводит?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • SHTURMAN

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz Окт. 13, 2010, 5:11 п.п., спустя 3 часа 56 минут 54 секунды

    adw0rd, спасибо за помощь, я уже разобрался.
    оказалось, что кодек aac какой-то ограниченный и там пришлось дописать еще, чтобы оно заработало :-)
    А не подскажешь, каким образом можно сделать превью видео, чтобы оно было .gif? т.е. взять несколько кадров и слепить .gif?
    т.к. не использую класса php-ffmpeg, думаю так вытащить количество кадров, высчитать какие кадры взять, сделать скриншоты во временную папку и затем слепить .gif.
    или может есть более просто способ или более "правильный" ?
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz Окт. 13, 2010, 6:36 п.п., спустя 1 час 24 минуты 40 секунд

    если ты про анимированные превью
    то делать гифы думаю не очень хорошая идея. общепринято нарезать несколько jpg и крутить их JS
  • SHTURMAN

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz Окт. 13, 2010, 7:39 п.п., спустя 1 час 3 минуты 30 секунд

    я делаю под wap. а мобилы не все понимают JS
    а можешь прояснить почем не очень хорошая идея?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Окт. 13, 2010, 8:48 п.п., спустя 1 час 9 минут

    SHTURMAN, что за сайт в вапе?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz Окт. 13, 2010, 9:19 п.п., спустя 31 минуту 13 секунд

    понятно
  • arvitaly

    Сообщения: 292 Репутация: N Группа: Адекваты

    Spritz Окт. 13, 2010, 9:53 п.п., спустя 34 минуты 11 секунд

    думаю так вытащить количество кадров, высчитать какие кадры взять, сделать скриншоты во временную папку и затем слепить .gif.


    Да есть классы готовые
  • SHTURMAN

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz Окт. 14, 2010, 11:33 д.п., спустя 13 часов 39 минут 22 секунды

    adw0rd, загрузка и просмотр картинок, видеороликов :-)
    А на форуме есть что-то про watermark? а то уже столько перечитал в гугле, но что-то никак не поддается он мне :-(
    arvitaly, ты о php_ffmpeg? тоже задумался о нем, т.к. наверно будет проще подключить еще библиотеку, чем делать так как я хотел :)
  • arvitaly

    Сообщения: 292 Репутация: N Группа: Адекваты

    Spritz Окт. 14, 2010, 12:02 п.п., спустя 29 минут 8 секунд

    arvitaly, ты о php_ffmpeg? тоже задумался о нем, т.к. наверно будет проще подключить еще библиотеку, чем делать так как я хотел :)

    нет не о php_ffmpeg, хотя и на нем я делал правда давно)
  • SHTURMAN

    Сообщения: 16 Репутация: N Группа: Кто попало

    Spritz Окт. 14, 2010, 12:25 п.п., спустя 23 минуты 7 секунд

    arvitaly, назови тогда уже классы, пожалуйста, а то так могу очень долго угадывать :-)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!