Encoder une vidéo sur un serveur

Bonjour,

Pour un client, j’aimerais proposer un sous-titrage/traduction de vidéo en ligne (pages en php) :

  • sur le serveur, la vidéo a été préalablement exportée sans les sous-titres en image par image (25 images par seconde, plein de fichiers)
  • l’utilisateur visualise une série d’images, chacune avec 1 ou 2 lignes de sous-titres proposés en français / anglais
  • il répond à un formulaire sous chaque image pour remplacer les sous-titres dans sa langue

Automatisation déjà en place :

  • le serveur avec sa bibliothèque graphique fusionne les sous-titres sur les images concernées

Jusqu’ici tout va bien…

J’aimerais ENCODER ces images en vidéo WMV directement sur le serveur…
Pouvez-vous me conseiller un module pour ça ?

(ma solution actuelle est assez simple : je télécharge les images, j’encode la vidéo sur mon PC et je la dépose sur un serveur ftp)
(mais j’aimerais automatiser cette dernière partie)

Voir du côté de ffmpeg/avconv, le couteau suisse de la vidéo.

Mais mieux vaudrait choisir un autre format de sortie que le WMV.
Préférer le .webm ou le .ogm pour une lecture directe dans le navigateur (Firefox/IceWeasel, Chromium/Chrome)

Merci, je regarde le couteau suisse :slightly_smiling:

Ces vidéos sont à intégrer dans des traductions de présentations Powerpoint (plein de filiales dans des dizaines de pays, elles font elles-mêmes leurs traductions). Donc les filiales vont préférer le wmv…

Y a opencv aussi. Par contre je sais pas s’il y a un wrapper php

Je pensais générer un fichier avec une ligne de commande sur le disque et la faire exécuter par php via un exec(), puis effacer ce fichier…
Mais si il y a un accès plus direct, oui, je préfèrerais !

[moderation]C’est de la programmation, ça ?[/moderation]

Le choix des modules, comment les mettre en oeuvre,… Désolé si ce n’est pas le projet du siècle, pour moi ça demande pas mal de recherche pour assembler une solution, c’est la première fois que j’essaie de transformer de la vidéo hors Mac ou PC !

Bonjour,

Il te faut des images avec le même format de nom et dans l’ordre numérique, par example :

ls /tmp
000001.jpg
[...] 
001500.jpg

Pour info je les ai extrait comme ça (voir man ffmpeg)

ffmpeg -ss 0 -r framerate_souvent_25ou24 -i mon_fichier.avi   -f image2 -q 0 /tmp/%06d.jpg

Tu peux obtenir le framerate (fps) en faisant [mono]ffmpeg -i mon_fichier.avi[/mono]

Après c’est doigts dans le nez pour en faire une video:

ffmpeg -f image2 -i /tmp/%06d.jpg -r meme_framerate_qua_lentree -q 0 sortie.wmv

NB: je crois pas que le ffmpeg par défaut sous Debian sait faire du wmv, il faut celui de deb-multimedia.org (attention aux conflits avec les paquets Debian officiels).

Ca c’était la version exec().

J’y connais rien avec ffmpeg en plugin sous php, à part que ça existe. Un des problèmes va être le set_time_limit de ton php.ini en cas de gros fichiers.

Merci,
J’ai testé avec Libav

isoler le son :

isoler les images :

-q:v 1 est nécessaire pour avoir les images non compressées

(puis traitement sur les images)

assemblage de la vidéo de sortie :

On est obligé d’utiliser WMV8 et pas WMV9
Il n’y a pas de patch vc-1 ou wmv3 encoder (si j’ai bien tout lu à ce sujet)

-q:v 2 est plus compressé que -q:v 1
env 3250kb/s @ 1280x720/25ips : OK pour moi
-q:v 3 commence à pixéliser

Pour l’intégration, je vais rester sur un traitement asynchrone via un exec().
Donc ajouter un script CRON pour vérifier si le fichier de sortie est généré et tout nettoyer à la fin.
(Autre méthode ?)