2009-11-10 17 views
5

tengo tres videos:Combinar varios videos en un

  • una conferencia que se filmó con una cámara de vídeo
  • un video de la captura de escritorio del ordenador utilizado en la conferencia
  • y el video de la pizarra

Quiero crear un video final con esos tres componentes ocupando una cierta región de la pantalla.

¿Es un software de código abierto que me permitiría hacer esto (mencoder, ffmpeg, virtualdub ..)? ¿Qué recomiendas?

¿O hay una API de C/C++ que me permita crear algo así mediante programación?

Editar
Habrá varias conferencias grabadas en el futuro. Esto significa que necesito una solución genérica/automatizada.

Actualmente estoy viendo si puedo escribir una aplicación con GStreamer para hacer este trabajo. ¿Algún comentario sobre eso?

Resuelto!
Logré hacer esto con el elemento videomixer de GStreamer. Utilizo la sintaxis gst-launch para crear una canalización y luego la cargo con gst_parse_launch. Es una forma muy productiva de implementar tuberías complejas.

Aquí hay una canalización que toma dos flujos de video entrantes y una imagen de logotipo, los mezcla en una secuencia y los duplica para que se muestren y guarden simultáneamente en el disco.

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

O usted podría lograr todo esto en unos 30 segundos con Adobe After Effects (concedida el precio es ligeramente superior a gratis) – Adam

Respuesta

4

Se puede hacer con ffmpeg; Lo he hecho yo mismo. Dicho esto, es técnicamente complejo. Dicho esto, otra vez, es lo que cualquier otro software que pueda usar va a hacer en su esencia.

El proceso es el siguiente:

  1. Extraer audio desde la fuente 1 a wav prima
    • Extraer audio desde la fuente 2
    • Extraer audio desde la fuente 3
    • vídeo demultiplexores de la fuente 1 MPEG1
    • Demux video de la fuente 2
    • Demux video de la fuente 3
    • Concatenate audio 1 + audio 2 + audio 3
    • Concatenate vídeo 1 + video 2 + video 3
    • Mux audio 123 y el vídeo 123 en objetivo
    • codifican para orientar formato

Creo que lo que sorprende a la gente es que literalmente puede concatenar dos archivos RAW de audio wav PCM y el resultado es válido. Lo que realmente sorprende a la gente es que puedes hacer lo mismo con el video MPEG1/h.261.

Como he dicho, lo he hecho. Hay algunos detalles omitidos, pero definitivamente funciona. Mi programa fue hecho en un script bash con ffmpeg. Si bien nunca he usado la API C de ffmpeg, no veo por qué no podrías usarla para hacer lo mismo.

Es un proyecto altamente educativo, si te inclinas. Si su objetivo es solo juntar algunos videos para un proyecto único, entonces tal vez usar una herramienta de GUI sea una mejor idea.

+0

Parece que voy a hacer este tipo de cosas mucho en el futuro , entonces realmente quiero estudiar esto profundamente. Gracias por la info! – StackedCrooked

+1

¿No está preguntando sobre la composición del video para que los tres videos se muestren al mismo tiempo dentro de un solo cuadro? Parece que esto concatena los videos para que se reproduzcan uno tras otro. –

+0

Hmmm ... en realidad, creo que puede estar en lo cierto. Sí, lo que respondí es 'simplemente' concatenado. De hecho, incluso utilicé la palabra 'concatenar' dos veces. –

2

Si solo quieres combinar metraje en un solo video y recortar el video, usaría virtual dub.

-1

avisynth puede hacerlo con bastante facilidad. Mire here en la sección Mosaico para ver un ejemplo.

He usado ffmpeg bastante y nunca me he encontrado con esta funcionalidad, pero eso no significa que no esté allí. Siempre puede hacerlo usted mismo en C o C++ con libavformat y libavcodec (bibliotecas ffmpeg) si está buscando un proyecto, pero tendrá que ensuciarse las manos con la composición del video usted mismo. Si solo buscas hacer el video y no cambiar el código, definitivamente utiliza una herramienta prefabricada como avisynth o virtualdub.

2

puede combinar varios archivos de vídeo/corrientes en una sola imagen con VLC:

existe una interfaz de línea de comandos para que pueda script/automatizarlo.

http://wiki.videolan.org/Mosaic

Cuestiones relacionadas