7

Busco una forma eficaz de hacer lo siguiente:fuentes de vídeo múltiples combinan en un

El uso de varios vídeos de origen (de aproximadamente la misma longitud), que necesito para generar una salida de vídeo que se compone de todos las fuentes originales cada una corriendo en su propia área (como un grupo de PIP s en varios tamaños diferentes). Entonces, el resultado final es que todos los originales se ejecutan uno al lado del otro, cada uno en su propia área/caja.

La fuente y la salida deben ser flv y la plataforma que estoy usando es Windows (desarrollo en Windows 7 64bit, implementación en Windows Server 2008).

He mirado avisynth pero desafortunadamente no puede manejar flv y no de los plugins y flv splitters que he intentado funcionar.

Mi proceso actual utiliza ffmpeg de la siguiente manera:

  1. uso ffmpeg para generar 25 del png por segundo por vídeo, cambiar el tamaño del original, según sea necesario.
  2. Use el espacio de nombre System.Drawing para combinar cada conjunto de marcos en una nueva imagen, comenzando con un fondo estático, luego cargando cada cuadro en un Image y dibujando en el objeto Graphics de fondo - esto me da los marcos combinados.
  3. Utilice ffmpeg para combinar las imágenes generadas en un video.

Todo esto es muy intensivo IO (que es mi cuello de botella de procesamiento en este momento) y creo que debe haber una manera más eficiente de alcanzar mi objetivo. No tengo mucha experiencia con el procesamiento de video, y no sé qué opciones hay disponibles.

¿Alguien puede sugerir una forma más eficiente de procesar estos?

Respuesta

10

Haga todo dentro de ffmpeg. Puede hacer muchas cosas con video filters. Por ejemplo, para unir dos videos uno al lado del otro:

ffmpeg -i input0.avi -vf "movie=input1.avi [in1]; [in]pad=640*2:352[in0]; [in0][in1] overlay=640:0 [out]" out.avi 

@Oded: Eso es básicamente lo que hace este comando. Puede eliminar el filtro pad y cambiar los parámetros del filtro overlay para mover el segundo video donde desee.

ffmpeg -i big.avi -vf "movie=small.avi [small]; [in][small] overlay=10:10 [out]" out.avi 

El enlace que proporcioné describe la sintaxis del filtro. Puede encadenar múltiples filtros juntos:

ffmpeg -i big.avi -vf "movie=small0.avi [small0]; [in][small0] overlay=10:10 [tmp];\ 
         movie=small1.avi [small1]; [tmp][small1] overlay=30:10 [out]" out.avi 
+0

Gracias por la respuesta, ¿tiene un ejemplo de una línea de comando de imagen en imagen? – Oded

+1

Gran segundo ejemplo: ¿cómo puedo especificar más de 2 fuentes? ¿O debería llamarlo varias veces con diferentes superposiciones? – Oded

+0

Parece que 'overlay' no cambia el tamaño de los originales. ¿Asumo que necesitaré usar' scale' para eso? – Oded

Cuestiones relacionadas