ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Работа с видео на php с помощью php ffmpeg

Работа с видео на php с помощью php ffmpeg

  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 13 мая 2010 г. 11:22, спустя 59 минут 5 секунд

    В вашей версии php это не работает. надо 3 версию ставить
  • phpdude

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

    Spritz 13 мая 2010 г. 11:23, спустя 1 минуту 8 секунд

    Troy, умнег
    Сапожник без сапог
  • onzone

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

    Spritz 13 мая 2010 г. 11:28, спустя 4 минуты 53 секунды

    Troy, ((( Блин, не радостное известие(, а есть варианты как длину трека подругому извлечь, не используя php ffmpeg? Всю инфу извлёк тоько это осталось((
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 13 мая 2010 г. 12:49, спустя 1 час 21 минуту 17 секунд

    phpdude, у вас же и учусь :D
  • onzone

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

    Spritz 13 мая 2010 г. 13:19, спустя 30 минут 26 секунд

    Парни подскажите, пожалуйсто, как другими способами (не используя php ffmpeg) продолжительность видео файла получить, ну уж очень надо,а php пока не могу переустановить :( все сделал кроме длины(
  • phpdude

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

    Spritz 13 мая 2010 г. 14:42, спустя 1 час 22 минуты 44 секунды

    onzone, ставь пхп3 там все будет, а то 4 и 5 гавно в этом плане
    Сапожник без сапог
  • Faster

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

    Spritz 13 мая 2010 г. 15:10, спустя 27 минут 48 секунд

    onzone,
    проиграй кусок файла mplayerom и распарси вывод
  • onzone

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

    Spritz 14 мая 2010 г. 15:41, спустя 1 день 31 минуту

    Эх блин, ток одна альтернатива осталась вчера серв на 5 пыху перевёл ( Много ругатн было со скриптами ну щс вроде всё ровно ) Спс, тему можно закрывать, проблема решена, всё равно моё имхо php 4 тож рулит)
  • jenik_ok

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

    Spritz 14 мая 2010 г. 17:16, спустя 1 час 34 минуты 56 секунд

    Вот блин опоздал я )))
    кароч, я тут тоже выдергиванием инфы занялся, и чет лень мне готовые либы искать пишу потихоньку сам, что требуется, вот может кому пригодиться
    function get_move_info($file){
    global $workdirectory;
    if (!file_exists($file)) return false;
    $out=array();
    $err=0;
    $fr='';
    $fp=popen('export LD_LIBRARY_PATH=/usr/lib/ && /usr/local/bin/ffmpeg -y -i '.$file.' &> '.$workdirectory.'moveinfo.txt','r');
    if ($fp){
    while (!feof($fp))
    $fr.=fgets($fp);
    pclose($fp);
    }
    $fr=file_get_contents($workdirectory.'moveinfo.txt');

    if (preg_match_all('#Duration: ([0-9]{2}:[0-9]{2})#si',$fr,$match))
    $out['time']=$match[1][0];
    else
    $err++;
    if (preg_match_all('#Duration: ([0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{2})#si',$fr,$match))
    $out['duration']=$match[1][0];
    else
    $err++;
    if (preg_match_all('#([0-9]+x[0-9]+)#s',$fr,$match))
    {
    $out['sizeXY']=$match[1][0];
    list($out['sizeX'],$out['sizeY'])=explode('x',$out['sizeXY']);
    }
    else
    $err++;
    if (preg_match_all('#bitrate: ([0-9]+) kb\/s#s',$fr,$match))
    $out['bitrate']=$match[1][0];
    else
    $err++;
    //print_r($out);
    return ($err>0 ? false : $out);
    }


    так же еще вот функция которая шарит запущен ли ffmpeg
    function ps ()
    {
    $out=array('ffmpeg'=>false,'rar'=>false);
    $fr='';
    $fp=popen('ps aux | grep ffmpeg','r');
    if ($fp){
    while (!feof($fp))
    $fr.=fgets($fp);
    pclose($fp);
    }
    if (preg_match_all('#ffmpeg -y -i#si',$fr,$match))
    $out['ffmpeg']=true;
    return $out;
    }


    надеюсь вопросов не возникнет, только есть одна тонкость, чтобы вторая функция точно сработала, необходимо чтобы в командной строке было так "ffmpeg -y -i", иначе функция не сможет отследить
  • onzone

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

    Spritz 15 мая 2010 г. 11:07, спустя 17 часов 50 минут 54 секунды


    jenik_ok, Оба, крутая штука =)возьму на вооружение =) А те +1 ) Иногда оч даж полезна)
  • jenik_ok

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

    Spritz 18 мая 2010 г. 4:18, спустя 2 дня 17 часов 10 минут

    после некоторого времени копания в Google на предмет mapping ffmpeg я нашел интересный факт…
    как известно конкурент ffmpeg это mplayer и один из аргументов в пользу mplayer'a было то, что он делает скриншеты очень быстро…
    в общем выяснилось что ffmpeg умеет делать это так же быстро )))) хотите узнать как? отправтье смс на короткий номер хххх с текстом уу-ууу-уууу
    а если правда, то

    МЕДЛЕННО: ffmpeg -i input.file -an -ss 00:20:00 -r 1 -vframes 1 -y -f mjpeg screen.jpg
    БЫСТРО: ffmpeg -ss 00:20:00 -i input.file -an -r 1 -vframes 1 -y -f mjpeg screen.jpg

    для тех кто не уловил
    Например, если указать -ss после -i файл, вы задолбаетесь ждать, пока оно перейдёт к нужному месту в файле, потому что будет seek’ать на уровне кодека. А если указать -ss до -i файл, seek’ать оно будет на уровне контейнера и сделает это быстро.
  • phpdude

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

    Spritz 18 мая 2010 г. 4:40, спустя 21 минуту 57 секунд

    jenik_ok, скажу я вам, что ебанутый обработчик параметров вызова у ффмпега …. или логика, идиотизм кароче
    Сапожник без сапог
  • jenik_ok

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

    Spritz 18 мая 2010 г. 23:53, спустя 19 часов 13 минут 41 секунду

    phpdude, согласен, мало того что параметров чуть больше чем дофига, так еще и порядок их знать надо…
    я тут немного функцию переделал, вот так сказать вариант 2.0, как мне кажется более надежный, во всяком случае ни на одном из 44 файлов которые есть на серваке проблем не возникло
    function get_move_info($file){
    global $workdirectory;
    if (!file_exists($file)) return false;
    $out=array();
    $err=0;
    $fr='';
    $fp=popen('export LD_LIBRARY_PATH=/usr/lib/ && /usr/local/bin/ffmpeg -y -i '.$file.' &> '.$workdirectory.'moveinfo.txt','r');
    if ($fp){
    while (!feof($fp))
    $fr.=fgets($fp);
    pclose($fp);
    }
    $fr=file_get_contents($workdirectory.'moveinfo.txt');

    //Duration: 01:34:18.70, start: 0.000000, bitrate: 2070 kb/s
    if (preg_match_all('#Duration: ((([0-9]{2}:[0-9]{2}):[0-9]{2})\.[0-9]+), start: ([0-9\.]+), bitrate: ([0-9]+) kb\/s#s',$fr,$match))
    {
    $out['time'] = $match[3][0];
    $out['timeHis'] = $match[2][0];
    $out['duration'] = $match[1][0];
    $out['start'] = $match[4][0];
    $out['bitrate'] = $match[5][0];
    $out['sduration'] = explode(':',$out['duration']);
    $out['sduration'] = (60*$out['sduration'][0]+$out['sduration'][1])*60+$out['sduration'][2];
    //print_r($match);
    }
    else $err++;

    $count=preg_match_all("#Stream \#([0-9]+)\.([0-9]+)(.*?)\n#si",$fr,$matchSt);
    if ($count)
    {
    //print_r($matchSt);
    $astream=0;
    for ($i=0;$i<$count;$i++)
    {
    //$input=$matchSt[1][$i];
    //$stream=$matchSt[2][$i];
    if (strpos($matchSt[0][$i],'Video:'))
    {
    if (preg_match_all('#([0-9]+x[0-9]+)#s',$matchSt[3][$i],$match))
    {
    $out['sizeXY']=$match[1][0];
    list($out['sizeX'],$out['sizeY'])=explode('x',$out['sizeXY']);
    }
    else $err++;
    }elseif(strpos($matchSt[0][$i],'Audio:'))
    {
    $out['audio'][$astream]['stream']=$matchSt[2][$i];
    $astream++;
    }
    }
    }else $err++;
    //print_r($out);
    return ($err>0 ? false : $out);
    }

    если кому пригодиться в реальной жизни, в благодарность приму бутылочку пива ;)
  • Butcher

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

    Spritz 15 ноября 2010 г. 14:33, спустя 180 дней 15 часов 39 минут

    А какjq кодек лучше заюзать при конвертировании ffmpeg-ом ? . На хабре про VP6 писали…
    Может кто пробовал разные кодеки?. Интересует какой использовать кодек, чтоб качество в конечном flv был получше ).
  • Faster

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

    Spritz 15 ноября 2010 г. 16:42, спустя 2 часа 8 минут 43 секунды

    бытует мнение, что h264 и .mp4 получше будет.
    Спустя 65 сек.
    кстати vp6 не так просто заюзать

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