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

Shell et commandes GNU Discussion :

Concaténation de 2 vidéos en shell sur mac


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Concaténation de 2 vidéos en shell sur mac
    Bonjour à tous,

    Je souhaite faire un script shell permettant de concaténer 2 vidéos, sur mac.

    vidéo 1 : 5sec
    vidéo 2 : 5sec

    Vidéo 3 : video 1 + video 2 : 10sec

    Avez vous une idée?

    Merci et bonne journée

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Normalement cat video1 video2 > video3 devrait le faire, avec un même format de fichiers en entrée, non ?

  3. #3
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Bonjour,
    techniquement tu peux faire le cat "video1 video2 > video3" mais le problème que tu risques avec cette solution est que lorsque tu liras ta vidéo de sortie "video3", il se peut très probablement que la lecture se fasse jusqu'à la fin de la 1ère vidéo et que tu n'arrives pas à lire la partie de la vidéo 2 et tout ce qui s'en suivrait d'ailleurs.
    En gros, tu auras des erreurs de timestamp.
    Et si ma mémoire est bonne, le cat ne marcherait que pour des fichiers .mpeg d'ailleurs, mais pour le reste .

    En cela, je te conseille d'utiliser mencoder
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    mencoder -oac copy -ovc copy -o video_sortie video_1 video_2 ... video_n

    Tu pourrais même le faire avec ffmpeg et je t'invite à lire ceci.

    En gros, dès que dois travailler sur des fichier où il faut avoir de la synchronisation de temps (donc de fréquence) aussi bien audio et/ou vidéo, penses à utiliser mencoder ou ffmpeg qui sont fait exprès pour ça (transcoding, mux, changement format etc etc ...)

    Cordialement,

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Salut

    Si le fichier vidéo était un bête fichier ne contenant que de la vidéo il n'y aurait aucun problème. Suffirait effectivement de faire cat video1 video2 >video3.

    Le pb c'est qu'un fichier vidéo contient aussi d'autres truc. Il y a un en-tête qui décrit la vidéo (échantillonnage, durée, etc), peut-être aussi un marqueur de fin. Bref c'est une espèce de poupée russe dans laquelle il y a la vidéo pure.
    Et donc si tu crées la vidéo3 en concaténant les 2 autres, tu risques fort d'obtenir un fichier qui ne sera pas compris comme étant de la vidéo car l'en-tête du fichier 1 ne correspondra pas à la vidéo totale, l'en-tête du fichier 2 sera compris comme un flux vidéo alors qu'il n'en est pas un, etc.

    Si tu veux créer une vidéo concaténant les 2 premières, il te faut faire des manips comme
    1) lire l'en-tête du fichier 1 et du fichier 2 pour récupérer les diverses infos
    2) créer un en-tête contenant la compilation des infos récupérées
    3) aller récupérer les flux vidéo purs dans les 2 fichiers et les concaténer
    4) générer le fichier final contenant l'en-tête créé en 2 et le flux vidéo
    Et ça c'est s'il n'y a pas de marqueur de fin (et ça devient pire s'il y a en plus des marqueurs intermédiaires).

    Ces manips nécessitent de travailler au niveau binaire et ça, le shell n'est pas capable de faire (il n'a pas la précision assez importante). Te faut utiliser des langages comme C ou Perl ou Python.

    Ou alors récupérer un outil gratuit de manipulation vidéo (il doit y en avoir tout un fatras) et faire ta manip par cet outil...

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,
    Citation Envoyé par paissad Voir le message
    techniquement tu peux faire le cat "video1 video2 > video3" mais le problème que tu risques avec cette solution est que lorsque tu liras ta vidéo de sortie "video3", il se peut très probablement que la lecture se fasse jusqu'à la fin de la 1ère vidéo et que tu n'arrives pas à lire la partie de la vidéo 2 et tout ce qui s'en suivrait d'ailleurs.
    En gros, tu auras des erreurs de timestamp.
    Et si ma mémoire est bonne, le cat ne marcherait que pour des fichiers .mpeg d'ailleurs, mais pour le reste .
    Citation Envoyé par Sve@r Voir le message
    Si le fichier vidéo était un bête fichier ne contenant que de la vidéo il n'y aurait aucun problème. Suffirait effectivement de faire cat video1 video2 >video3.[...]
    Et donc si tu crées la vidéo3 en concaténant les 2 autres, tu risques fort d'obtenir un fichier qui ne sera pas compris comme étant de la vidéo car l'en-tête du fichier 1 ne correspondra pas à la vidéo totale, l'en-tête du fichier 2 sera compris comme un flux vidéo alors qu'il n'en est pas un, etc.
    Qui ne tente rien, n'a rien

    Merci pour vos explications et précisions.

    Sur ce, bon week-end @ tou(te)s.

  6. #6
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 204
    Points : 123
    Points
    123
    Par défaut
    J'avais déjà testé avec cat, mais ça ne marche pas.

    Surement à cause des méta informations de la 2ème video.

  7. #7
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par totoAussi Voir le message
    J'avais déjà testé avec cat, mais ça ne marche pas.

    Surement à cause des méta informations de la 2ème video.
    si tu fais un cat
    il faut convertir le fichier de sortie pour recréer le format

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in *.avi ; do cat $i >> /tmp/D.mpg ; done ; ffmpeg -i /tmp/D.mpg Final.ts

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Citation Envoyé par frp31 Voir le message
    si tu fais un cat
    il faut convertir le fichier de sortie pour recréer le format

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in *.avi ; do cat $i >> /tmp/D.mpg ; done
    ffmpeg -i /tmp/D.mpg Final.ts
    Je ne comprends pas la différence avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat *.avi > /tmp/D.mpg
    ffmpeg -i /tmp/D.mpg Final.ts
    à moins que /tmp/D.mpg ne soit pas vide au départ? ou que cat soit plus intelligent que je ne le pensais et fasse des choses particulières en fonction du type de fichier?

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Citation Envoyé par paissad Voir le message
    Tu pourrais même le faire avec ffmpeg et je t'invite à lire ceci.
    Merci beaucoup pour ce lien! Il m'encourage à apprendre à me servir de ffmpeg!
    (J'avais été rebuté/refroidi par ffmpegX que je n'ai jamais bien réussi à faire fonctionner de manière fiable et reproductible)

  10. #10
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Je ne comprends pas la différence avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat *.avi > /tmp/D.mpg
    ffmpeg -i /tmp/D.mpg Final.ts
    à moins que /tmp/D.mpg ne soit pas vide au départ? ou que cat soit plus intelligent que je ne le pensais et fasse des choses particulières en fonction du type de fichier?
    l'utilisation de la boucle c'est juste pour "ajouter" des fonctions, comme afficher l'avancement, interrompre en cas d'erreur etc...

    là dans un exemple "vide" forcément ça change rien.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/09/2014, 15h00
  2. Problème vidéo et overflow sur Mac
    Par gregmab dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/02/2007, 18h28
  3. Commande en shell -- Sur les fichiers
    Par OrangeBud dans le forum Linux
    Réponses: 8
    Dernier message: 18/05/2004, 13h13
  4. [FLASH MX 2004] Ouvrir un document .fla sur Mac
    Par tahiti bob dans le forum Flash
    Réponses: 2
    Dernier message: 12/05/2004, 17h53
  5. [MX] autorun sur MAC
    Par tahiti bob dans le forum Flash
    Réponses: 10
    Dernier message: 07/02/2004, 15h58

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