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

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

  • SHTURMAN

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

    Spritz 12 октября 2010 г. 7:47

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

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

    Spritz 12 октября 2010 г. 7:50, спустя 2 минуты 59 секунд

    SHTURMAN, а как вы конвертируете при "когда юзер загружает видео, оно должно перекодироваться "? Код в студию
    adw/0
  • SHTURMAN

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

    Spritz 12 октября 2010 г. 7: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

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

    Spritz 12 октября 2010 г. 19:28, спустя 11 часов 35 минут 30 секунд

    простите, а зачем run_external() нужен?
    почему не использовать [man]exec[/man]() например? {+++75+++} ну и еще код надо форматировать прежде чем заливать сюда, дальше первх 10-ти строк я не читал даже, это просто каша
    adw/0
  • SHTURMAN

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

    Spritz 13 октября 2010 г. 3: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

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

    Spritz 13 октября 2010 г. 5: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);


    Что выводит?
    adw/0
  • SHTURMAN

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

    Spritz 13 октября 2010 г. 9:11, спустя 3 часа 56 минут 54 секунды

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

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

    Spritz 13 октября 2010 г. 10:36, спустя 1 час 24 минуты 40 секунд

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

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

    Spritz 13 октября 2010 г. 11:39, спустя 1 час 3 минуты 30 секунд

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

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

    Spritz 13 октября 2010 г. 12:48, спустя 1 час 9 минут

    SHTURMAN, что за сайт в вапе?
    adw/0
  • Faster

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

    Spritz 13 октября 2010 г. 13:19, спустя 31 минуту 13 секунд

    понятно
  • arvitaly

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

    Spritz 13 октября 2010 г. 13:53, спустя 34 минуты 11 секунд

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


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

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

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

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

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

    Spritz 14 октября 2010 г. 4:02, спустя 29 минут 8 секунд

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

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

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

    Spritz 14 октября 2010 г. 4:25, спустя 23 минуты 7 секунд

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

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