Conversion swf -> avi
#1
Posté 01 décembre 2011 - 05:07
Mon besoin est plutôt simple à décrire, mais je n'arrive pas à trouver le moyen ou l'outil pour le faire.
Je cherche à convertir une animation .SWF en fichier vidéo .avi (au format MPEG1) ... côté serveur.
L'idée est de pouvoir générer un swf sur un serveur web, avec des données dynamique, et transformer cela en une vidéo exportable chez l'utilisateur.
Est-ce que les logiciels Flash Media Server pourraient répondre à mon besoin ? des librairies php ? Que ce soit dans Google ou dans le forum de Médiabox, je n'ai pour l'instant pas trouvé de réponse à ça (mais je ne suis qu'un humain et je n'ai pas tout parcouru les sujets un par un !)
Est-ce que mon problème parle à quelqu'un ?
Si oui, d'avance je vous remercie bien fort !
#2
Posté 01 décembre 2011 - 07:40
J'ai fait plusieurs fois des recherches pour obtenir des vidéos à partir d'animations flash.
La piste la plus simple semble être d'utiliser l'exportation d'un projet en .mov (quicktime) depuis flash professional. Si j'ai bien compris cela marche aussi bien avec de la timeline que du code. Mais je ne voulais pas faire comme cela, donc je n'ai jamais creusé.
J'ai trouvé 3 autres solutions:
1- Utiliser un logiciel de capture vidéo d'écran. Si besoin faire jouer l'animation au ralenti pour être sûr de ne rater aucune image. Une façon semble être d'utiliser AIR et VLC: http://www.adobe.com...nrecording.html
2- Utiliser une classe qui permet de générer en actionscript un FLV à la volée, à partir des images de l'animation. De mémoire les classes qui existent pour cela (chercher FLVEncoder, surement) ne font pas de compression. Puis utiliser un programme externe qui va créer le .avi, comme ffmpeg. Là aussi l'usage de AIR va permettre:
D'enregistrer le FLV sur le système de fichier local su serveur
D'appeler ffmpeg pour convertir le .flv en .avi
3- Utiliser une classe de type PNGEncoder pour créer sur le disque du serveur une image .png pour chaque image de l'animation. Puis ffmpeg pour assembler les images en un .avi
Là aussi il faut utiliser AIR, pour les même raisons que la solution 2.
Est-il possible d'utiliser AIR sur un serveur? Je n'en sais rien du tout, je n'y connais rien de ce côté là.
L'inconvénient de la méthode 1 c'est qu'il faut être sûr que le serveur va être assez rapide pour capturer toutes les images sans en sauter aucune. Si plusieurs utilisateurs demandent un encodage en même temps, ça me semble difficile à contrôler (mais je redis: je n'y connais rien en serveur).
L'avantage des méthodes 2 et 3 c'est qu'on est sûr de ne rater aucune image, la génération du .avi se faisant en seconde passe. Mais cela demande de créer le swf avec une fonctionnalité supplémentaire, celle d'enregistrer chaque image de l'animation (dans le flv ou dans un .png). J'ai pour ma part déjà mis en place la solution 3, pour une application locale. Ça marche, mais bien sûr ce n'est pas très rapide vu le nombre de fichiers png à créer (si l'animation est longue).
Dans l'absolu, il semblerait possible d'envoyer directement des bitmaps à ffmpeg depuis flash, via un pipe, et ffmpeg ferait l'encodage à la volée. Ce serait une solution plus efficace. J'ai passé du temps à chercher comment faire cela, mais j'ai abandonné, c'était trop technique pour moi. De mémoire, il y a peut-être des personnes qui l'ont fait sous linux, mais pas sous windows.
Voilà, je ne sais pas si ça va t'aider. Ma conclusion serait que pour l'instant, flash ne semble pas un outil facile pour faire cela. Je ne demande qu'à être détrompé
Es-tu obligé de passer par un swf? Ne peux-tu utiliser une autre façon de générer ton animation?
#3
Posté 07 février 2012 - 05:52
Une solution a t elle été trouvée??
(on peut s'entraider...)
#4
Posté 08 février 2012 - 07:04
Quand j'ai fait cela, pour mettre en oeuvre la 3eme solution dans la liste, ça demandait de coder l'animation de façon à pouvoir controler son déroulement pas à pas: composer une image de l'animation, l'exporter en png, passer à la suivante, l'exporter en png, etc. Donc selon la capacité de la machine, cela pouvait être plus où moins rapide.
Je faisais ceci dans une application AIR locale. Si l'interface doit être affichée par le client, et l'encodage fait sur le serveur, je ne saurais pas dire quelles sont les solutions possibles, ni laquelle serait la meilleure, entre:
- l'application client calcule les images, les encode, les envoie au serveur au fur et à mesure. Le serveur les enregistre. A la fin le client envoie une requête qui déclenche l'encodage sur le serveur. Je n'ai pas la moindre idée de comment on lance une application (ffmpeg) installée sur un serveur, en php par exemple. Ceci va demander à l'utilisateur de ne pas fermer l'application (et peut-être même de laisser le focus à flash) tant que l'envoi des images n'est pas terminé.
- l'application client envoie une requête où elle passe au serveur les paramètres controlant l'animation choisis par l'utilisateur. Le serveur exécute l'animation avec une application AIR locale, et c'est cette application qui encode les images et déclenche l'encodage. Si c'est possible, cela devrait économiser de la bande passante. L'utilisateur n'assistera pas au processus de création des images, et sera notifié à la fin de l'encodage que son film est prêt.
Il faudrait tout de même chercher s'il n'y a pas des solutions toutes faites qui fonctionnent. Du côté de FMS?
#5
Posté 08 février 2012 - 07:55
merci pour cette réponse.
Au fait, c'est ça, il faudrait que tout soit gérer côté serveur... Et j'ignore si ta solution est adaptable.
Ffmpeg est déjà installé et convertit des vidéos, mais il ne gère pas les .swf. Hors c'est justement ça qu'il faudrait.
Dans le déroulement, tes solutions sont intéressantes. Mais concrètement,
Calcule des images/ encodes/ Envoi au serveur/ Enregistrement/ requete pour encodage sur le serveur
==>> Comment faire tout ceci?
Sinon si ca peut t'aider à m'aider, quelques précisions:
les animations ne dépasseront pas 10 secondes.
Format 800/600.
En swf comprenant des éléments dynamique (texte et images entrés par l'utilisateur)
Voilà, si tu as des précisions à apporter n'hésites pas.
De mon côté je tiens au courant si du neuf est trouvé.
FMS, qu'est ce ?
Sylvester
#6
Posté 08 février 2012 - 09:02
sylvester, le 08 février 2012 - 07:55 , dit :
sylvester, le 08 février 2012 - 07:55 , dit :
Calcule des images/ encodes/ Envoi au serveur/ Enregistrement/ requete pour encodage sur le serveur
==>> Comment faire tout ceci?
Imaginons que ton animation soit simplement une movie clip contenant 10 images. Tu devras faire un gotoAndStop(1), puis utiliser PNGEncoder pour encoder ceci en png, puis envoyer ces données encodées au serveur. Quand à la façon de faire cet envoi, je ne m'y connais pas trop, je ne peux te renseigner, et puis cela dépend de ton serveur (php? java? autre chose?). Une fois ces données envoyées, il faudra faire un gotoAndStop(2), répéter l'opération, etc. Selon la machine client tu peux t'attendre à une rapidité d'exécution assez limitée, quelques images par secondes seulement. Et la bande passante limitera elle aussi la rapidité, puisqu'il faudra envoyer 10*25=250 images pour une animation de 10 secondes à 25 images par seconde.
Côté serveur il faudra prévoir la réception des données et leur enregistrement dans des fichiers .png. Là encore la façon de faire dépendra de la techno utilisée côté serveur. Et finalement, le serveur devra lancer ffmpeg, et ça je disais que je ne sais pas comment on fait non plus, ni même si c'est possible en php par exemple. ça m'étonnerait qu'on ne puisse pas le faire.
Cela c'était pour ma méthode 1. Pour la méthode 2 il faut que le serveur reçoive les paramètres de l'application, et lance une application AIR qui reçoit d'une façon ou d'une autre les paramètres. Comment on fait? Je ne sais pas.
Tu vois que c'est quand même de la bonne bidouille tout ça, qui demande d'avoir bien les mains dans le camboui.
sylvester, le 08 février 2012 - 07:55 , dit :
J'en ai parlé pour le citer, au cas où ça puisse servir en te fournissant une solution toute faite adaptée. Mais je ne connais pas moi-même, et c'est peut-être tout à fait inadapté.
Sinon, dernière piste: Sais-tu que tu peux compiler à la volée des swf côté serveur? Avec le programme mxmlc qui fait partir du SDK Flex. Si tu arrives à lancer ffmpeg côté serveur, tu pourras aussi bien lancer mxmlc. Pourquoi j'en parle? Parce-qu'on pourrait imaginer que plutôt que fournir une vidéo aux utilisateurs, tu leur fournisse un swf. Dans l'ordre ça donnerait: L'utilisateur entre ses paramètres, clique sur "générer l'animation", le client envoie les paramètres au serveur, le serveur modifie un fichier .as pour donner aux variables controlant l'animation les bonnes valeurs, puis compile le projet avec ces valeurs, ce qui génère un swf personnalisé.
La question que j'ai sur ce point c'est: Qu'est-ce que ça donne quand on ouvre un fichier .swf hors du navigateur sur une machine qui n'a pas le flash player standalone installé? Est-ce que le navigateur s'ouvre et lit l'animation? Si oui ce pourrait être une bonne solution pour toi, plus simple que l'encodage d'une vidéo.
Tiens, une autre idée encore plus simple:
Tu crées une animation flash (appelons-la player.swf) qui charge des paramètres depuis un simple fichier texte ou xml, puis qui se joue avec ces paramètres. Ce serait donc une animation assez proche de celle que tu vas proposer sur le net (appelons-la maker.swf), sauf qu'au lieu de demander les paramètres à l'utilisateur, elle les lit dans un fichier.
ça donnerait:
- L'utilisateur, sur le net, fait mumuse avec ton animation maker.swf, et choisi les paramètres qui lui plaisent. Il clique sur "générer l'animation"
- Les paramètres sont envoyés au serveur
- Le serveur enregistre ces paramètres dans un fichier texte ou xml
- Le serveur crée une archive zip contenant player.swf, le fichier texte ou xml, et le fichier html permettant d'afficher player.swf sur une page web.
- L'utilisateur télécharge l'archive, la décompresse, puis double clique sur le fichier html. Et hop, son animation s'affiche dans son navigateur.
Qu'en penses-tu?
Voilà. Ne me demande pas trop de choses concernant les échanges de données entre client et serveur, ce n'est pas trop mon rayon
1 utilisateur(s) li(sen)t ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)









