<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.digitalspirit.org/blog/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>DigitalSpirit - Tag - manipulation</title>
  <link>http://www.digitalspirit.org/blog/index.php/</link>
  <atom:link href="http://www.digitalspirit.org/blog/index.php/feed/tag/manipulation/rss2" rel="self" type="application/rss+xml"/>
  <description>Blog personnel de Charles Rincheval contenant des descriptions de projets réalisés dans les domaines du logiciels libres en encore dans des développements de systèmes embarqués</description>
  <language>fr</language>
  <pubDate>Mon, 06 Feb 2012 16:31:19 +0100</pubDate>
  <copyright>© 2008 Charles Rincheval. Ce billet a été originellement publié sur le site www.DigitalSpirit.org</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Manipulez des vidéos en Php avec ffmpeg-php</title>
    <link>http://www.digitalspirit.org/blog/index.php/post/2008/10/09/Ffmpeg-et-Php</link>
    <guid isPermaLink="false">urn:md5:a571545e7309ea2695fb8e0e264c257c</guid>
    <pubDate>Fri, 10 Oct 2008 10:15:00 +0200</pubDate>
    <dc:creator>hugo</dc:creator>
        <category>Php</category>
        <category>ffmpeg</category><category>ffmpeg-php</category><category>gd</category><category>manipulation</category><category>php</category><category>tutoriel</category><category>vidéo</category>    
    <description>&lt;p&gt;
Le projet ffmpeg-php est, comme son l'indique, une interface Php au projet &lt;a href=&quot;http://ffmpeg.mplayerhq.hu&quot; hreflang=&quot;en&quot;&gt;ffmpeg&lt;/a&gt;, une application conçue pour manipuler les flux audios et vidéos et basé sur &lt;a href=&quot;http://fr.wikipedia.org/wiki/Libavcodec&quot; hreflang=&quot;fr&quot;&gt;libavcodec&lt;/a&gt;, ce qui lui permet de gérer un grand nombre de format de compression dont : MPEG-1, MPEG-2, MPEG-4 Part 2, H.264, WMV,
MJPEG, Theora, FLAC, MP2, MP3, RealAudio 1.0, RealAudio 2.0, Vorbis, Windows Media Audio...
&lt;br /&gt;
ffmpeg-php est notamment utilisé par &lt;a href=&quot;http://www.vimeo.com/&quot; hreflang=&quot;en&quot;&gt;Vimeo&lt;/a&gt; pour la création des vignettes lors du téléchargement des vidéos, c'est le gage d'une application stable et optimisée.
&lt;/p&gt;
&lt;h2&gt;L'installation&lt;/h2&gt;
&lt;p&gt;
L'installation est très simple puisque c'est une simple extension Php qu'il suffit de déclarer dans le php.ini...
&lt;/p&gt;
&lt;p&gt;
Sous &lt;a href=&quot;http://www.gentoo.org/&quot; hreflang=&quot;en&quot;&gt;Gentoo&lt;/a&gt;, l'installation peut se résumer à cette ligne de commande :
&lt;/p&gt;
&lt;pre class=&quot;shell&quot;&gt; $ sudo emerge -v ffmpeg-php&lt;/pre&gt;
&lt;p&gt;
Ensuite, il suffit d'éditer le fichier php.ini et de déclarer la nouvelle extension afin que Php la charge au démarrage :
&lt;/p&gt;
&lt;pre class=&quot;snip&quot;&gt;extension=ffmpeg.so&lt;/pre&gt;
&lt;p&gt;
Recharger la configuration de votre serveur web, et voilà, nous sommes prêt à jouer avec ffmpeg-php...
&lt;/p&gt;    &lt;h3&gt;Et maintenant, jouons !&lt;/h3&gt;
&lt;p&gt;
Comme nous l'indique la &lt;a href=&quot;http://ffmpeg-php.sourceforge.net/doc/api/index.php&quot; hreflang=&quot;en&quot;&gt;documentation de l'API&lt;/a&gt;, il existe 2 types d'objets avec ffmpeg-php :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;movie&lt;/strong&gt; qui est retourné par ffmpeg_movie(), c'est un objet contenant des méthodes permettant d'obtenir tout un tas d'informations sur le fichier courant, c'est la première fonction que nous utiliserons&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;frame&lt;/strong&gt; renvoyé par getFrame() et getNextKeyFrame(), il s'agit là d'une image fixe extraire du flux vidéo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Commençons par obtenir des informations sur la vidéo :
&lt;/p&gt;
&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;$mov = new ffmpeg_movie('/path/to/video.avi');&lt;br /&gt;&lt;br /&gt;echo sprintf('&amp;lt;p&amp;gt;Duration : %.1f, bit rate : %d, frame count : %d, video codec : %s, audio codec : %s, audio channel : %s&amp;lt;/p&amp;gt;',&lt;br /&gt;                $mov-&amp;gt;getDuration(),&lt;br /&gt;                $mov-&amp;gt;getBitRate(),&lt;br /&gt;                $mov-&amp;gt;getFrameCount(),&lt;br /&gt;                $mov-&amp;gt;getVideoCodec(),&lt;br /&gt;                $mov-&amp;gt;getAudioCodec(),&lt;br /&gt;                $mov-&amp;gt;getAudioChannels());&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;
&lt;p&gt;
Qui devait afficher quelque chose comme ceci :
&lt;/p&gt;
&lt;pre class=&quot;html_out&quot;&gt;Duration : 18.7, bit rate : 2169054, frame count : 283, video codec : mjpeg, audio codec : pcm_u8, audio channel : 1&lt;/pre&gt;
&lt;p&gt;
Essayons maintenant de lire la frame 23 et de l'envoyer au navigateur :
&lt;/p&gt;
&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;// On charge la vidéo&lt;br /&gt;$mov = new ffmpeg_movie('/path/to/video.avi');&lt;br /&gt;&lt;br /&gt;// Récupère la frame 23&lt;br /&gt;$frame = $mov-&amp;gt;getFrame(23);&lt;br /&gt;&lt;br /&gt;// Transforme la frame récupérée au dessus en ressource GD&lt;br /&gt;$img = $frame-&amp;gt;toGDImage();&lt;br /&gt;&lt;br /&gt;// Envoie l'image au navigateur&lt;br /&gt;header(&quot;Content-type: image/jpeg&quot;);&lt;br /&gt;imagejpeg($img);&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;
&lt;p&gt;
Et voilà, déconcertant de simplicité ! non ?
&lt;/p&gt;
&lt;h3&gt;La suite&lt;/h3&gt;
&lt;p&gt;
Ci-joint, en annexe, un petit bout de code qui vous affichera les informations sur la vidéo, créera 50 miniatures et affichera enfin la vidéo convertie en animation GIF.
&lt;br /&gt;
Un aperçu du résultat :
&lt;/p&gt;
&lt;a href=&quot;http://www.digitalspirit.org/blog/public/ffmpeg-php.gif&quot; title=&quot;ffmpeg-php au boulot, oct 2008&quot;&gt;
&lt;img src=&quot;http://www.digitalspirit.org/blog/public/ffmpeg-php_min.gif&quot; alt=&quot;ffmpeg-php au boulot&quot; title=&quot;ffmpeg-php au boulot, oct 2008&quot; /&gt;
&lt;/a&gt;
&lt;p&gt;
Amusez-vous bien !
&lt;/p&gt;</description>
    
          <enclosure url="http://www.digitalspirit.org/blog/public/src/ffmpeg-php.zip"
      length="4981429" type="application/zip" />
    
    
          <comments>http://www.digitalspirit.org/blog/index.php/post/2008/10/09/Ffmpeg-et-Php#comment-form</comments>
      <wfw:comment>http://www.digitalspirit.org/blog/index.php/post/2008/10/09/Ffmpeg-et-Php#comment-form</wfw:comment>
      <wfw:commentRss>http://www.digitalspirit.org/blog/index.php/feed/atom/comments/251</wfw:commentRss>
      </item>
    
</channel>
</rss>
