2009-11-10 5 views
5

J'ai trois vidéos:Combiner plusieurs vidéos en un seul

  • une conférence qui a été filmé avec une caméra vidéo
  • une vidéo de la capture d'écran de l'ordinateur utilisé dans la conférence
  • et la vidéo du tableau blanc

Je veux créer une vidéo finale avec ces trois composants occupant une certaine région de l'écran.

Est-ce qu'un logiciel open-source qui me permettrait de le faire (mencoder, ffmpeg, virtualdub ..)? Lequel recommandez-vous?

Ou existe-t-il une API C/C++ qui me permettrait de créer quelque chose comme ça par programmation?

Modifier
Il y aura plusieurs conférences enregistrées dans le futur. Cela signifie que j'ai besoin d'une solution générique/automatisée.

Je vérifie actuellement si je peux écrire une application avec GStreamer pour faire ce travail. Des commentaires à ce sujet?

Résolu!
J'ai réussi à faire cela avec l'élément vidéomixer de GStreamer. J'utilise la syntaxe gst-launch pour créer un pipeline, puis le charger avec gst_parse_launch. C'est un moyen très productif de mettre en œuvre des pipelines complexes.

Voici un pipeline qui prend deux flux vidéo entrants et une image de logo, les fusionne en un flux et le duplique afin qu'il s'affiche simultanément et enregistré sur le disque.

desktop. ! queue 
      ! ffmpegcolorspace 
      ! videoscale 
      ! video/x-raw-yuv,width=640,height=480 
      ! videobox right=-320 
      ! ffmpegcolorspace 
      ! vmix.sink_0 
    webcam. ! queue 
      ! ffmpegcolorspace 
      ! videoscale 
      ! video/x-raw-yuv,width=320,height=240 
      ! vmix.sink_1 
    logo. ! queue 
     ! jpegdec 
     ! ffmpegcolorspace 
     ! videoscale 
     ! video/x-raw-yuv,width=320,height=240 
     ! vmix.sink_2 
    vmix. ! t. 
    t. ! queue 
    ! ffmpegcolorspace 
    ! ffenc_mpeg2video 
    ! filesink location="recording.mpg" 
    t. ! queue 
    ! ffmpegcolorspace 
    ! dshowvideosink 
    videotestsrc name="desktop" 
    videotestsrc name="webcam" 
    multifilesrc name="logo" location="logo.jpg" 
    videomixer name=vmix 
      sink_0::xpos=0 sink_0::ypos=0 sink_0::zorder=0 
      sink_1::xpos=640 sink_1::ypos=0 sink_1::zorder=1 
      sink_2::xpos=640 sink_2::ypos=240 sink_2::zorder=2 
    tee name="t" 
+0

Ou vous pourriez accomplir tout cela en 30 secondes avec Adobe After Effects (accordé le prix est légèrement plus élevé que gratuit) – Adam

Répondre

4

Cela peut être fait avec ffmpeg; Je l'ai fait moi-même. Cela dit, c'est techniquement complexe. Cela dit, encore, c'est ce que tout autre logiciel que vous pourriez utiliser va faire dans son essence de base.

Le procédé fonctionne comme suit:

  1. audio Demux de la source 1 à wav brut
    • audio Demux de la source 2
    • audio Demux de source 3
    • Demux vidéo provenant de la source 1 à MPEG1
    • Démultiplexer la vidéo à partir de la source 2
    • Démultiplexer la vidéo à partir de la source 3
    • Concatenate audio 1 + audio 2 + audio 3
    • Concatenate vidéo 1 + vidéo 2 + vidéo 3
    • audio Mux 123 et vidéo 123 dans la cible
    • encode au format cible

Je pense que ce qui surprend les gens, c'est que vous pouvez littéralement concaténer deux fichiers audio wav PCM bruts, et le résultat est valide. Ce qui surprend vraiment les gens, c'est que vous pouvez faire la même chose avec la vidéo MPEG1/h.261.

Comme je l'ai dit, je l'ai fait. Il y a quelques détails qui sont exclus, mais cela fonctionne très certainement. Mon programme a été fait dans un script bash avec ffmpeg. Bien que je n'ai jamais utilisé l'API C ffmpeg, je ne vois pas pourquoi vous ne pourriez pas l'utiliser pour faire la même chose.

C'est un projet très éducatif à faire, si vous êtes enclin. Si votre objectif est simplement de coller des vidéos ensemble pour un projet unique, alors peut-être que l'utilisation d'un outil graphique est une meilleure idée.

+0

Il semble que je vais faire ce genre de choses beaucoup dans l'avenir , donc je veux vraiment étudier cela profondément. Merci pour l'info! – StackedCrooked

+1

Ne vous demande-t-il pas de composer la vidéo de sorte que les trois vidéos soient affichées en même temps dans une seule image? Il semble que cela ne fait que concaténer les vidéos pour qu'elles se jouent les unes après les autres. –

+0

Hmmm ... en fait, je pense que vous avez peut-être raison. Oui, ce que j'ai répondu est «juste» concaténant. En fait, j'ai même utilisé le mot «concaténer» deux fois. –

2

Si vous voulez juste combiner des vidéos en une seule vidéo et recadrer la vidéo, j'utiliserais dub virtuel.

-1

avisynth peut le faire assez facilement. Regardez here sous la section Mosaïque pour un exemple.

J'ai beaucoup utilisé ffmpeg et je ne suis jamais tombé sur cette fonctionnalité, mais cela ne veut pas dire que ce n'est pas là. Vous pouvez toujours le faire vous-même en C ou C++ avec libavformat et libavcodec (librairies ffmpeg) si vous êtes à la recherche d'un projet, mais vous devrez vous salir les mains en composant vous-même la vidéo. Si vous cherchez simplement à faire la vidéo et ne pas bricoler avec du code, utilisez certainement un outil pré-fait comme avisynth ou virtualdub.

2

vous pouvez combiner plusieurs fichiers vidéo/cours en une seule image avec VLC:

il y a une interface de ligne de commande de sorte que vous pouvez script/automatiser.

http://wiki.videolan.org/Mosaic

Questions connexes