I - MOTIVATIONS
Comme lundi c'était mon anniversaire, je ne travaillais pas donc j'ai décidé de faire un petit film sur Simba, mon gros chat d'amour! Seulement je voulais faire à partir des films issus de mon appareil numérique en. Je me suis donc compliqué la tà¢che, histoire de me remplir la journée comme il faut. J'ai donc décidé de tout faire en MinG.
Je me suis surtout inspiré de ce billet http://www.ioncannon.net/php/110/using-flash-video-metadata-to-display-annotations/
II - CODE PHP et FICHIER XML
II.a) le code php
Je me suis pour celà inspiré du code fourni en faisant pour moi dans un fichier flahsplayer.php
<?php
function createImage($img)
{
$shape = new SWFShape();
$shape->setRightFill($shape->addFill(new SWFBitmap(fopen($img, "rb"))));
$shape->drawLine(16,0);
$shape->drawLine(0,16);
$shape->drawLine(-16,0);
$shape->drawLine(0,-16);
return $shape;
}
function createButton($movie, $name, $loc, $script)
{
$button = new SWFButton();
$button->addShape(createImage("control_" . $name . ".png"), SWFBUTTON_UP);
$button->addShape(createImage("control_" . $name . "_blue.png"), SWFBUTTON_DOWN | SWFBUTTON_HIT | SWFBUTTON_OVER);
$button->addAction(new SWFAction($script), SWFBUTTON_HIT);
$item=$movie->add($button);
$item->moveto($loc,248);
}
Ming_setScale(20.0000000);
ming_useswfversion(7);
$movie = new SWFMovie(7);
$movie->setDimension(320,270); // width x height
$movie->setBackground(0,0,0);
$movie->setRate(8);
createButton($movie, "start", 10, "_root.videoStream.seek(0);");
createButton($movie, "pause", 40, "_root.videoStream.pause(true);");
createButton($movie, "play", 70, "_root.videoStream.pause(false);");
$strAction = "
this.createTextField('video_txt', 999, 0, 0, 100, 100);
video_txt.autoSize = 'left';
video_txt.multiline = true;
video_txt.textColor = 0xeeeeee;
stop();
nc=new NetConnection();
nc.connect(null);
videoStream=new NetStream(nc);
videoStreamItem.attachVideo(videoStream);
videoStream.setBufferTime(10);
videoStream.play('http://www.davidgis.fr/download/swf/simbafilm.flv');
videoStream.pause();
videoStream.onCuePoint = function(infoObject)
{
video_txt.text = '' + infoObject.name + '\n';
if( infoObject.parameters != undefined )
{
video_txt.text += ' ' + infoObject.parameters['mydata'] + '\n';
}
else
{
video_txt.text = ' \n';;
}
};
";
$stream = new SWFVideoStream();
$stream->setDimension(320, 240);
$item=$movie->add($stream);
$item->setName("videoStreamItem");
$movie->add(new SWFAction($strAction));
$movie->nextFrame();//video_txt.text += 'Info: undef\n';
$movie->save("simbafilm.swf");
?>
II.b) le code XML
Ici j'ai adapté le code à mon usage personnel. J'ai donc créé un fichier tags.xml
dont le contenu est
<tags>
<metatag event="onCuePoint" overwrite="true">
<name>SIMBA DANS TOUTE SA SPLENDEUR</name>
<timestamp>1000</timestamp>
<parameters>
<mydata>TOUJOURS PRET A JOUER</mydata>
</parameters>
<type>event</type>
</metatag>
<metatag event="onCuePoint" overwrite="true">
<name> </name>
<timestamp>4000</timestamp>
<parameters>
<mydata>..UN PETIT RIEN L'AMUSE...</mydata>
</parameters>
<type>event</type>
</metatag>
<metatag event="onCuePoint" overwrite="true">
<name>MAIS OUI, MAIS OUI...!</name>
<timestamp>10000</timestamp>
<parameters>
<mydata>FELIN REDOUTABLE, SPLENDIDE</mydata>
</parameters>
<type>event</type>
</metatag>
<metatag event="onCuePoint" overwrite="true">
<name>Simba</name>
<timestamp>12000</timestamp>
<parameters>
<mydata>JEUNE, BEAU, VIF...</mydata>
</parameters>
<type>event</type>
</metatag>
<metatag event="onCuePoint" overwrite="true">
<name> </name>
<timestamp>14000</timestamp>
<parameters>
<mydata>ADMIREZ LA RAPIDITE ET LA PRECISION DU FELIN</mydata>
</parameters>
<type>event</type>
</metatag>
II.c) Ajout des boutons
Comme sur le billet de l'auteur pour avoir mes boutons, j'ai téléchargé les images
wget http://www.famfamfam.com/lab/icons/silk/icons/control_pause.png
wget http://www.famfamfam.com/lab/icons/silk/icons/control_pause_blue.png
wget http://www.famfamfam.com/lab/icons/silk/icons/control_start.png
wget http://www.famfamfam.com/lab/icons/silk/icons/control_start_blue.png
wget http://www.famfamfam.com/lab/icons/silk/icons/control_play.png
wget http://www.famfamfam.com/lab/icons/silk/icons/control_play_blue.png
III - Conversion du fichier .MOV en .FLV
III.a) Commandes et souci avec ffmpeg
Normalement les deux lignes à saisir pour la conversion
mencoder -mc 0 -noskip -oac pcm -ovc lavc -ffourcc DX50 -vop scale=320:240 -o simba.avi pict0943.mov
ffmpeg -i simba.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv simbafilm.flv
Or pour avoir le son dans le fichier flv, il faut que ffmpeg ait été compilé avec l'option --enable-mp3lame. La première commande ne pose aucun problème pour le son!
Ce qui n'était pas le cas pour moi! Donc je suis allé sur http://doc.ubuntu-fr.org/formats_non-libres#activer_le_support_du_mp3_et_de_l_amr_dans_ffmpeg. J'ai donc adapté mon /etc/apt/source.list
pour avoir le dépà´t multiverse comme il faut et ensuite j'ai fait
cd /usr/local/src
apt-get install dpkg-dev libimlib2-dev texi2html liblame-dev libfaad2-dev libmp4v2-dev libfaac-dev \
libxvidcore4-dev debhelper libogg-dev libvorbis-dev liba52-dev libdts-dev libsdl1.2debian-all \
libraw1394-dev libdc1394-13-dev libtheora-dev libgsm1-dev
wget http://blogger.rukker.org/dl/ffmpeg_enable_amr.patch.bz2
apt-get source ffmpeg
cd ffmpeg-0.cvs20050918 <----- le nom de répertoire est différent pour moi
bzcat ../ffmpeg_enable_amr.patch.bz2 | sudo patch -p1
DEB_BUILD_OPTIONS=”risky” sudo dpkg-buildpackage
cd ..
dpkg -i ffmpeg_0.cvs20060823-5ubuntu1_i386.deb
Et la nouvelle installation de ffmepg m'a permis de pouvoir vérifier que j'avais bien le support --enable-mp3lame
IV - AJOUT DES METATAGS DU FICHIER XML AU FICHIER FLV
IV.a) Pré-requis
J'avais déjà ruby d'installé donc je pouvais passer à la suite
IV.b) Compilation de FFVTOOL2
flvtool2 est l'utilitaire qui va me permettre d'ajouter de combiner mon fichier xml à mon fichier flv. J'ai donc commencé à l'installer
wget http://rubyforge.org/frs/download.php/9225/flvtool2_1.0.5_rc6.tgz
tar xvzf flvtool2_1.0.5_rc6.tgz
J'ai ensuite suivi les instructions fournis dans le fichier flvtool2_1.0.5_rc6/README
ruby setup.rb config
ruby setup.rb setup
sudo ruby setup.rb install
IV.c) Utilisation de flvtool2
Il m'a suffit de faire
flvtool2 -AUtP tags.xml simbafilm.flv