Obtendo informações de arquivos de áudio e vídeo utilizando PHP + FFmpeg

13 02 2007

FFmpeg é um conjunto de componentes utilizado para manipulação de arquivos de audio e video. Veremos como utilizar uma extensão para que possamos fazer uso da FFmpeg utilizando PHP como linguagem de desenvolvimento.

Instalação do FFmpeg:
Caso já possua a FFmpeg, este passo não é necessário. O procedimento para instalação do FFmpeg é bastante simples:

Instalação do FFmpeg-php
FFmpeg-php é a extensão que possibilitará utilizar os recursos do do FFmpeg
utilizando PHP. A instalação também é bastante simples, mas vale observar que
são requisitos a propria ffmpeg (compilada com –enable-shared), PHP versão 4.0.3
ou superior (se é que alguem ainda utiliza alguma versão mais antiga) e gd, podendo
ser o próprio padrão do PHP. Os passos para instalação da extensão são:

Exemplos de uso.
Acredito que a forma mais simples de se compreender o funcionamento é através de
exemplos. Para os exemplos, serão necessários um arquivo de áudio (mp3) e um de
vídeo (avi). Há arquivos nestes formatos junto com os fontes da extensão, no
diretório “ffmpeg-php/tests/test_media/”. Os arquivos serão utilizados com os
nomes “audio.mp3” e “video.avi”.

1º Exemplo: Obtendo informações de um arquivo no formato .mp3

<?php
  // arquivo mp3info.php  // funcao e' responsavel pelo carregamento do modulo
  dl('ffmpeg.so');

  // criamos uma instancia da classe ffmpeg_movie. Atraves
  // desta instancia, poderemos obter informacoes do audio
  $au = new FFmpeg_movie('audio.mp3');

  // os proximos metodos sao utilizados para retornar informacoes contidas
  // na id3 tag do arquivo mp3. Caso a id3 tag nao esteja corretamente
  // preenchida, obviamente nao sera retornada a informacao correta
  echo sprintf('Comentario: %s%s', $au->getComment(), "n");
  echo sprintf('Titulo:     %s%s', $au->getTitle(), "n");
  echo sprintf('Grupo:      %s%s', $au->getArtist(), "n");
  echo sprintf('Estilo:     %s%s', $au->getGenre(), "n");
  echo sprintf('Faixa #:    %d%s', $au->getTrackNumber(), "n");
  echo sprintf('Ano:        %d%s', $au->getYear(), "n");

  // getBitRate retorna o bitrate do arquivo de audio, em bits
  // por segundo
  echo sprintf('Bitrate:    %dbps%s', $au->getBitrate(), "n");

  // getDuration retorna a duracao do audio, em segundos
  echo sprintf('Duracao:    %f segundos %s', $au->getDuration(), "n");
?>

Executando temos:

$ php mp3info.php
Comentario: morcheeba
Titulo: Living Hell
Grupo: Morcheeba
Estilo: Trip-Hop
Faixa #: 5
Ano: 2005
Bitrate: 128000
Duracao: 601.905122 segundos

Conforme esperado e citado nos comentários do código, as informações foram exibidas
sem problemas.

2º Exemplo: Obtendo informações de um arquivo no formato .avi

<?php

  // arquivo aviinfo.php  // funcao responsavel pelo carregamento do modulo
  dl('ffmpeg.so');

  // criamos uma instancia da classe ffmpeg_movie. Atraves
  // desta instancia, poderemos obter informacoes do video
  $vi = new FFmpeg_movie('video.avi');

  // getDuration retorna a duracao do audio, em segundos
  echo sprintf('Duracao:     %f segundos %s', $vi->getDuration(), "n");

  // getFrameRate retorna o frame rate do video, em frames por segundo (fps)
  echo sprintf('Frame rate:  %d fps%s', $vi->getFrameRate(), "n");

  // getFrameCount retorna o numero de frames do video ( frame rate * duracao )
  echo sprintf('Frame count: %d fps%s', $vi->getFrameCount(), "n");

  // getCodec retorna o nome do codec utilizado para encoding do video
  echo sprintf('Codec:       %s %s', $vi->getVideoCodec(), "n");

  // getFrameHeight e getFrameWidth sao utilizados para obter o comprimento
  // e a largura do video, em pixels
  echo sprintf('Resolucao:   %sx%s %s', $vi->getFrameHeight(), $vi->getFrameWidth(), "n");

  // getBitRate retorna o bitrate do arquivo de audio, em bits por segundo
  echo sprintf('Bitrate:     %dbps%s', $vi->getBitrate(), "n");
?>

Executando temos:

$ php aviinfo.php
Duracao: 5.000000 segundos
Frame rate: 24 fps
Frame count: 120 fps
Codec: mpeg4
Resolucao: 240×190
Bitrate: 306268bps

Novamente, bastante simples de se entender.

3º Exemplo: Transformando um filme no formato .avi em uma imagem no formato .gif (animado)

<?php

  // arquivo avi2gif.php  // funcao responsavel pelo carregamento do modulo
  dl('ffmpeg.so');

  // criamos uma instancia da classe ffmpeg_movie. Atraves
  // desta instancia, poderemos obter informacoes do video
  $vi = new FFmpeg_movie('video.avi');

  // criamos uma instancia da classe ffmpeg_animated_gif. Com essa
  // instancia poderemos criar o gif animado
  $gif = new FFmpeg_animated_gif (
                'video.gif',            // nome da imagem sendo criada
                $vi->getFrameWidth(),   // largura da imagem. A mesma do video
                $vi->getFrameHeight(),  // comprimento da imagem. Idem
                $vi->getFrameRate(),    // frame rate da imagem. Idem
                0 );                    // indica o numero de vezes que o gif ira
                                        // repetir o loop ( 0 = infinito )

  // aqui criamos um loop para capturar todos os frames do
  // video para adicionar no gif animado:
  $frames = $vi->getFrameCount();
  for ( $fCont = 1; $fCont < $frames; $fCont++ ) {
      // o metodo addFrame da classe FFmpeg_animated_gif e' utilizado para
      // adicionar um frame ao final da imagem. Ja o metodo getFrame da classe
      // FFmpeg_movie e' utilizado para obter um frame do video
      $gif->addFrame ( $vi->getFrame($fCont) );
  }
?>

Executando e analisando informações do arquivo, temos:

$ php avi2gif.php
$ file video.gif
video.gif: GIF image data, version 89a, 190 x 240
$ ls -sh video.gif
6.0M video.gif

Podemos observar que foi criado um arquivo no formato GIF, com dimensões
de 190 x 240 (as mesmas dimensões do vídeo), e com um tamanho em disco
gigantesco (o vídeo tem apenas 187k). Mas o exemplo serve para ilustrar.

Além dos métodos vistos nestes exemplos, há mais diversos na documentação do
ffmpeg-php, que pode ser encontrada em http://ffmpeg-php.sourceforge.net/apidoc.php.

Futuramente veremos como transformar um vídeo em uma animação em flash, utilizando a lib ming.

É isso.

Anúncios

Ações

Information

19 responses

19 09 2007
souljacker7

Não consigo utilizar o phpize no meu server. Diz que falta um arquivo de configuração (config.m4)

O que pode ser?

4 08 2008
fiqtejhavef

Wow. It really was responding kim kardashian naked to restrain her. My thigh. Opening her. It, she.I wanted to fuck films if you, eben as hard ray j kim kardashian tape watch free fucking.

24 08 2008
Wesley Alves QaW

E ae blz? Queria saber se tu pode me ajudar… Toda vez q tento baixar algum vídeo e depois convertê-lo aparece a mensagem : O arquivo ffmpeg encontrou um erro e precisa ser fechado… Sabe o q pode ser isso? Todo programa q eu uso para baixar e converter acontece isso e já usei uns 4 programas diferentes… certamente o erro está no pc e não no programa… como faço para corrigir? estou baixando alguns programas desse tal ffmpeg mas queria entender o q pode ser feito…
Vlw… ótimo site…

5 12 2008
7 12 2008
9 12 2008
14 01 2009
mauro

Olá, o sistema operacional de onde eu trabalho é windows xp e estou desenvolvendo um software em PHP para categorização e criação de metadados em xml e seria perfeito se eu conseguisse obter as informações dos arquivo de áudio e vídeo automáticos. Existe uma versao desse programa pra windows? ou existe alguma outra forma de fazer isso?

20 01 2009
Daniel G L Filho

Tem sim Mauro.
Tô testando e depois te digo.

22 06 2010
Elaine Watanabe

Oi, amigo!!
Obrigada pelo tutorial!!
Me ajudou mto!!
Só preciso de uma dica:
Preciso extrair as informações de um arquivo .mov.
BitRate, duração consigo normal.
Mas não consigo extrair a descrição, observações.
Você sabe se é possivel?

Obrigada!!!

8 05 2011
7 09 2011
Mlahzrpd

perfect design thanks ptsc bbs
nay

8 09 2011
Khiuvddy

Have you got any ? pedo stories bbs
jhsqhv

9 09 2011
Droavzkm

Could I ask who’s calling? prette kidz lolita underage 765342

16 09 2011
Mowvraei

What sort of music do you listen to? Fresh Pteen Models
nxou

21 09 2011
Gmdmeyev

About a year Erotic Nymphets =-((

22 09 2011
Etpnxcph

The manager Dreamzone Cp %)

24 09 2011
Htkygllb

In a meeting Silver Teen Model
zlk

13 12 2012
15 08 2014

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: