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
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
Salut,
Normalement cat video1 video2 > video3 devrait le faire, avec un même format de fichiers en entrée, non ?
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,
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...
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
Je ne comprends pas la différence avec:
à 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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cat *.avi > /tmp/D.mpg ffmpeg -i /tmp/D.mpg Final.ts
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager