7

Sto cercando un modo efficace per effettuare le seguenti operazioni:sorgenti video multipli combinati in un unico

Utilizzare più sorgenti video (di circa la stessa lunghezza), ho bisogno di generare un'uscita video che si compone di tutti le fonti originali ciascuna in esecuzione nella propria area (come un gruppo di PIP s in diverse dimensioni). Quindi, il risultato finale è che tutti gli originali sono in esecuzione side-by-side, ciascuno nella propria area/box.

La sorgente e l'uscita devono essere flv e la piattaforma che sto usando è Windows (dev su Windows 7 a 64 bit, distribuzione su Windows server 2008).

Ho visto avisynth ma sfortunatamente non è in grado di gestire flv e non i plug-in e gli splitter di flv che ho provato hanno funzionato.

mio attuale processo utilizza ffmpeg nel seguente modo:

  1. Usa ffmpeg per generare 25 png di al secondo per il video, il ridimensionamento della originale, se necessario.
  2. Utilizzare lo spazio dei nomi System.Drawing per combinare ogni set di frame in una nuova immagine, iniziando con uno sfondo statico, quindi caricare ciascun frame in un Image e disegnare sullo sfondo Graphics oggetto - questo mi dà i frame combinati.
  3. Utilizzare ffmpeg per combinare le immagini generate con un video.

Tutto questo è molto intenso per IO (che è il mio collo di bottiglia di elaborazione al momento) e ritengo che ci debba essere un modo più efficiente per raggiungere il mio obiettivo. Non ho molta esperienza con l'elaborazione video e non so quali opzioni sono disponibili.

Qualcuno può suggerire un modo più efficiente di elaborarli?

risposta

10

Fai tutto all'interno di ffmpeg. Puoi fare un sacco di cose con video filters. Ad esempio, per unire due video fianco a fianco:

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

@Oded: Questo è fondamentalmente ciò che questo comando fa. Puoi rimuovere il filtro pad e modificare i parametri del filtro overlay per spostare il secondo video dove preferisci.

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

Il collegamento che ho fornito descrive la sintassi del filtro. Puoi concatenare più filtri insieme:

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

Grazie per la risposta: hai un esempio di riga di comando picture-in-picture? – Oded

+1

Ottimo secondo esempio: come specificare più di 2 fonti? O dovrei chiamarlo più volte con diversi overlay? – Oded

+0

Sembra che 'overlay' non ridimensiona gli originali - presumo che per questo devo usare' scale'? – Oded

Problemi correlati