Advertisement
ipsBruno

(PHP) Pegar screenshoot aleatória em vídeo

Jun 8th, 2012
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.99 KB | None | 0 0
  1. <?php
  2.  
  3. set_time_limit(false);
  4.  
  5. /*
  6.  *  Copyright (c) 2012 [iPs]TeaM
  7.  *  Bruno da Silva (brunoemail@r7.com)
  8.  *  Pegar a imagem prévia de um vídeo usando php! Thubnails de forma aleatória
  9.  
  10.  * www.brunodasilva.com.br
  11.  * www.ips-team.forumeiros.com
  12. */
  13.  
  14.  
  15. // especificações básicas
  16. $video = 'Wildlife.wmv'; // aqui você deve alterar para o nome do vídeo. Se for usar em massa, use $_GET
  17. $resolucao = '800x640'; // aqui altere para o tamanho final da imagem. Lembre-se de arrumar corretamente para evitar erros
  18.  
  19. // Evitar que passthru "outpute" a execução
  20. ob_start();
  21.  
  22. // Chamar ffmpeg para pegar o tempo de vídeo
  23. passthru("ffmpeg -i \"{$video}\" 2>&1");
  24.  
  25. // Tratar a resposta de ffmpeg filtrando a duração
  26. $arrayTime = explode("Duration: ", ob_get_contents());
  27. $arrayTime = explode('.', $arrayTime[1]);
  28.  
  29. // Separar segundos, horas e minutos
  30. list($h, $m, $s) = explode(":", $arrayTime[0]);
  31. ob_end_clean();
  32.  
  33.  
  34. // Transformar horas,minutos,segundos em apenas segundos para resultado aleatorio
  35. $hms = ($h * 3600) + ($m * 60) + $s;
  36.  
  37. // Pegar valor aleatório menor que o tempo do vídeo
  38. $rhms = rand(0, $hms);
  39.  
  40. // Usar valor aleatório para transformar em tempo (menor que o tempo total de vídeo)
  41. $tempo = date('H:i:s', mktime(0,0,$rhms,0,0,0));
  42.  
  43. // Chamar passthru. Agora para tirar screenshoot
  44. passthru("start ffmpeg -ss ". $tempo." -t 1 -s ". $resolucao ." -i ". $video." -f mjpeg tempdata.png -y");
  45.  
  46.  
  47. // ler conteúdo da imagem temporaria salva
  48. $lerImagem = file_get_contents("tempdata.png");
  49.  
  50. // caso imagem for menor que 100 bytes pode significar que a screen shoot não foi tirada de forma correta
  51.  
  52. if(strlen($lerImagem) < 100) {
  53.         echo "Erro ao ler arquivo de vídeo";
  54. } else {      
  55.  
  56.         // Caso ocorrer tudo certo. Definir tipo de arquivo para imagem
  57.         header('Content-Type: image/png');
  58.  
  59.         // Escrever o conteúdo da imagem
  60.         echo ($lerImagem) ;
  61. }
  62.  
  63. // Deletar arquivo de imagem temporário
  64. unlink('tempdata.png');
  65.  
  66.  
  67. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement