8
votes

Puis-je utiliser l'API Gstreamer pour fusionner 2 vidéos?

J'aimerais écrire une application Simple Linux CLI pouvant prendre 2 sources vidéo (1 d'un présentateur parlant et 1 avec leurs diapositives et aucun audio) et les fusionner.

J'aimerais que toute la vidéo de sortie soit les deux vidéos originales, côte à côte. À défaut, ma deuxième meilleure option serait une vidéo de style "image dans l'image", avec le présentateur dans un petit cadre dans le coin.

De quelques heures de recherche, Gstreamer ressemble à celui-ci pourrait pouvoir faire cela. Quelqu'un peut-il le confirmer avant que je passe plus de temps à essayer?

S'il ne peut pas, y a-t-il d'autres API là-bas que je pourrais être en mesure d'utiliser?


0 commentaires

4 Réponses :


0
votes

Avisynth me vient à mon esprit. Je l'ai utilisé il y a de nombreuses années sous Windows et c'est très bien au post-traitement arbitraire. Avisynth V3 est censé fonctionner de manière native Linux mais est encore loin de préparer. Il existe des outils pour exécuter une version précédente avec du vin, cependant.


0 commentaires

0
votes

Mencoder peut le faire de manière native sur Linux. Vous pouvez forcer leur code ou invoquer le binaire.


0 commentaires

7
votes

Il s'avère que Gstreamer peut fusionner deux vidéos, les plaçant côte à côte dans une vidéo de sortie à l'aide du filtre Videomixer.

Un pipeline de base qui prend deux fichiers d'entrée, les écaille comme la même taille, puis la fusionne et Les codes dans une vidéo théora peut ressembler à ceci: xxx

Comment implémenter ce pipeline dépend de la langue. J'ai prototypé avec les fixations de rubis, et cela fonctionne vraiment bien.


5 commentaires

Je vérifie actuellement Gstreamer pour une application similaire. Il semble être une excellente solution. Avez-vous écrit la demande de fin en C ou Ruby?


J'ai fini par écrire l'application dans C. Les applications de base Gstreamer exigent vraiment très peu de C, et les liaisons de rubis manquaient quelques fonctionnalités dont j'avais besoin.


Le code est-il ouvert? Je serais intéressé à y jeter un coup d'œil. Si vous ne pouvez pas la partager, ça va, je vais le comprendre éventuellement ...


Malheureusement non. J'étais pour un projet client. Si vous me tirez un email, je serais heureux de vous aider à résoudre cependant, mes détails sont chez YOB.ID.AU . Je ne suis aucun expert C ou Gstreamer Hacker, mais je pourrais peut-être repérer votre problème.


Salut Sr. Pourriez-vous s'il vous plaît donner le pipeline complet? Je ne sais pas comment mettre en œuvre le pipeline que vous avez mentionné, je suis NEWBIE en utilisant Gstreamer. J'espère que ce n'est pas trop tard pour demander cela-



15
votes

Voici une installation simple (fonctionnelle) à l'aide du lancement de la GST (installer le package gstreamer-outils sur Ubuntu / Debian):

Périphérique V4L2SRC V4L2SRC = / Dev / Video1! Vidéosale! FFMPEGCOLORSPACE! Vidéo / x-brut-yuv, largeur = 640, hauteur = 480! videobox borde-alpha = 0 gauche = -640! Nom Videomixer = Mélange! FFMPEGCOLORSPACE! xvimagesink v4l2src! Vidéosale! FFMPEGCOLORSPACE! Vidéo / x-brut-yuv, largeur = 640, hauteur = 480! VideoBox Droite = -640! mélanger.

Ceci lit essentiellement deux vidéos utilisant la vidéo 4 Linux 2, l'une du périphérique par défaut et un autre flux de / dev / vidéo1. Vous voudrez peut-être changer cela si votre configuration est différente.

La première partie (non audacolaire) est responsable de la lecture de la vidéo à partir du périphérique de capture, de la négociation d'une taille et d'espace de couleurs (Viecoscale! Ffmpegcolorspace), forçant un format vidéo spécifique (vidéo / x-yuv, largeur = 640 , Hauteur = 480), ajout de 640 pixels transparents à gauche (déplaçant ainsi l'image à droite) et créez un vidéomixeur avec le nom "MIX". Enfin, il négocie automatiquement l'espace de courant de couleur et affiche le résultat à l'aide d'une fenêtre XVideo.

La deuxième partie (en gras) lit le deuxième flux vidéo (à partir du périphérique de capture par défaut, ajoutez périphérique = / dev / videox pour choisir un autre périphérique), puis fait le même espace de courant, la même taille Sélection de la négociation et du format vidéo Comme pour le premier flux, puis déplace la vidéo 640 pixels vers la gauche et alimentez le résultat à l'élément nommé mix (notre mélangeur vidéo). Le point à la fin est requis et indique à Gstreamer de rechercher un élément existant nommé "MIX" au lieu de chercher un filtre.

Vous pouvez remplacer Device V4L2SRC = / dev / Video1 avec filesRC emplacement = video.avi! Decodebin Pour obtenir l'entrée d'un fichier vidéo.

Remplacez xvimagesink avec jpegenc! Avimux! fichierink emplacement = out.avi Pour écrire le résultat à un fichier vidéo.