IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Transcodage fichier vidéo si fichier déposé


Sujet :

Windows

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 48
    Points
    48
    Par défaut Transcodage fichier vidéo si fichier déposé
    Bonjour,

    Je suis admin sys junior dans une boite qui manipule beaucoup de fichier vidéo.
    La diversité des format et des moyen d'encodage pose quelques soucis avec nos applications métiers.

    Je cherche à simplifier tout cela en convertissant automatiquement un fichier une fois celui-ci déposé dans un dossier.

    Pour le moment, j'ai tenter d'utiliser FileNotify afin que lorsqu'un fichier soit déposer dans un dossier, un fichier bat soit lancé avec un variable contenant le nom du ficher (%s), et via ffmpeg je peux transcoder facilement le fichier (via une syntaxe simple : ffmpeg -i fichier1.wmv fichier2.wmv )

    Mais la difficulté sur laquelle je butte est que dès que les premiers octets du fichiers sont déposé, filenotify lance tout de suite le fichier bat, donc le transcodage commence avant même que le fichier soit complètement déposé. Il me semble que le plus simple est de se passer de filenotify.

    J'ai tenté d'obtenir de l'aide via answers.microsoft.com, sans réponse. Le sujet est peut-être trop difficile ?
    Il me semble qu'ici il y-a pas mal de gens calé ici. Une personne aurait quelques indices à me passer ?

    Merci

  2. #2
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut tu peux faire un BAT ou autre qui boucle sur un dossier d'attente ou tu envoie les fichiers à
    traiter. Dès qu'un fichier est present dans le répertoire il est traité et le repertoire est vidé.


    AutoConvert.bat

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    @Echo off &cls
     
    ::Le dossier d'attente
    set $Dossier=""LE\CHEMIN\DU\REPERTOIRE D'ATTENTE"
     
    ::Le dossier de sortie (Où l'on va mettre le fichier traité)
    set $Sortie="LE\CHEMIN\DU\REPERTOIRE DE SORTIE"
     
    ::Les formats à attendre (à toi de définir les formats qui vont être envoyé dans le dossier d'attente)
    set "$Format=*.wmv,*.avi,*.swf,*.mp4,*.flv,*.h264,*.mov,*.3gp,*.nsv,*.3g2,*.mkv"
     
    :Boucle
    cls&echo Attente D'un fichier !!!
    for /f %%a in ('dir /b/a-d %$Dossier%\%$Format% 2^>nul') do (
     set "$Fichier=%%a"
     echo Traitement de %%a
     ffmpeg -i "%%a" "%%~na_modifier.wmv"
     
    REM on move le fichier transformé
     move "%%~na_modifier.wmv" %$Sortie%
     
    REM On détruit le fichier de base
     del "%%a" 2>nul
    )
     
    ::On met une attente
    ping localhost -n 5 >nul
     
    ::On recommence
    goto:Boucle

    Tu peux mettre ton ffmpeg.exe dans le répertoire d'attente ou mettre le path complet
    pour le traitement. Tu peux également directement mettre le path de sortie dans la commande ffmpeg
    ainsi tu pourrais garder le nom original du fichier.
    Enfin ce sont des détail à toi d'adapter pour ton cas.

    Là je t'ai fait un exemple en bat mais si tu veux un exe qui tourne en tâche de fond (Invisible) ça peut être fait en Autoit ou autre.
    Si ça t'intèresse dis le moi.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 48
    Points
    48
    Par défaut merci
    C'est bien ce principe la que je souhaite appliquer, et merci pour ton code qui est bien meilleur que le mien.

    Le fichiers original arrive petit à petit dans le dossier (via ftp).
    Le soucis étant en fait ceci "lorsque je reçois un fichier de X giga, comment lancer la conversion (ou le bat) une fois que le fichier est arrivé en entier"

    C'est ce que permet cela : for /f %%a in ('dir /b/a-d %$Dossier%\%$Format% 2^>nul') ?

    Pour faire un schema :

    Client |--fichier vidéo via ftp ---> dossier |--- transcodage via bat et ffmpeg --> fichier transcodé (avec l'original gardé)


    La si je comprend bien le bat fait ça :

    Déclaration $Dossier

    Déclaration $Sortie

    :Boucle
    pour tout fichier dans $Dossier non présent dans $Sortie et de type $Format :
    Conversion du fichier vers un dossier
    Suppression de l'original

    Attente de 5 seconde

    Puis aller à boucle.



    En fait, on reçoit environ 5 fichier par jours, et le transfert peut durer une heure pour les plus gros.

    Du coup, cela donnera ça ;

    Début de l'envoi d'une gros fichier via le ftp

    Le fichier bat est lancé

    Conversion du fichier vidéo (qui n'est pas totalement arrivé)

    Une toute petite partie du fichier vidéo est dans $Sortie

    et ... 30 minutes plus tard, le fichier vidéo original est arrivé en entier (par ftp).


    ----------------------

    Pour voir quand un fichier est arrivé, il pourrait être possible :
    - en regardant la taille d'un fichier et avec un test d'égalité il est possible de se dire "tien, la taille du fichier ne bouge plus, donc je vais le transcoder". Mais ça me parait compliqué...

    Ou en regardant l'heure la date de dernière écriture sur ce fichier fichier, du genre "si le fichier n'a pas été modifié ces 15 dernières minutes, alors je peux le transcoder" ; si l'obtention de l'heure système est facile, cela demande une fois de plus à récupérer des morceaux de texte dans un dir /TW



    Si je me forme à Autoit cela pourrait finalement être plus simple ?

  4. #4
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Lorsque un fichier est ouvert par un autres processus (download ou copy) il est locké
    et on ne peut efectuer d'écriture dessus.

    Donc en bat on peu faire un test d'écriture "fictif" sur ce fichier pour voir si il est locké ou pas. Tant que ce n'est pas possible
    on continue sur l'attente. Sinon on sait que le fichier est complet. (sauf pour le cas ou il y aurait une coupure du reseau..)

    Voici ton code adapté.

    J'ai également fait un Move du fichier original dans le répertoire de sortie
    et augmenter la temporisation à 10 Minutes (à toi de faire les réglage).

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    @Echo off &cls
     
    ::Le dossier d'attente
    set $Dossier=""LE\CHEMIN\DU\REPERTOIRE D'ATTENTE"
     
    ::Le dossier de sortie (Où l'on va mettre le fichier traité)
    set $Sortie="LE\CHEMIN\DU\REPERTOIRE DE SORTIE"
     
    ::Les formats à attendre (à toi de définir les formats qui vont être envoyé dans le dossier d'attente)
    set "$Format=*.wmv,*.avi,*.swf,*.mp4,*.flv,*.h264,*.mov,*.3gp,*.nsv,*.3g2,*.mkv"
     
    :Boucle
    cls&echo Attente D'un fichier !!!
    for /f %%a in ('dir /b/a-d %$Dossier%\%$Format% 2^>nul') do (
     set "$Fichier=%%a"
     echo Traitement de %%a
     2>nul (>>"%%a" echo off) && (
           ffmpeg -i "%%a" "%%~na_modifier.wmv"
     
           REM on move le fichier transformé
           move "%%~na_modifier.wmv" %$Sortie%
     
           REM On move egalement le fichier de base
           move "%%a" %$Sortie%)
    )
     
    ::On met une attente
    ping localhost -n 600 >nul
     
    ::On recommence
    goto:Boucle

    On pourrait également imaginer de lancer tous ça de manière invisible au travers d'un VBS.
    Mais fait d'abord des tests pour les réglages fin et lorsque c'est OK on en reparlera.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 48
    Points
    48
    Par défaut wow
    Wow !

    J'aime developpez.net xD

    Merci, je test, j'essais de mieux comprendre ton fichier bat, et je te tiens au courant

Discussions similaires

  1. Réponses: 15
    Dernier message: 28/11/2008, 17h57
  2. Récupération automatique d'images à partir d'un fichier vidéo
    Par osscour dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 15/05/2006, 09h11
  3. Travailler des fichiers vidéo (avi, mpeg wmv etc...)
    Par NetMichel dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/07/2005, 13h33
  4. Lancer un fichier vidéo
    Par Arkadius dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/09/2004, 20h20
  5. Réponses: 3
    Dernier message: 24/02/2004, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo