7

szukam skuteczny sposób, aby wykonać następujące czynności:Wiele źródeł wideo połączone w jeden

Korzystanie kilka filmów źródłowych (w przybliżeniu tej samej długości), muszę generować wyjście wideo, które składa się z wszystkich oryginalne źródła, z których każdy działa na swoim własnym obszarze (na przykład kilka PIP sw kilku różnych rozmiarach). Rezultat końcowy jest taki, że wszystkie oryginały biegną obok siebie, każde w swoim obszarze/polu.

Źródłem i wyjściem musi być flv, a platforma, której używam, to Windows (programista na Windows 7 64bit, wdrożenie na serwerze Windows 2008).

Spojrzałem na avisynth, ale niestety nie może obsłużyć flv i nie z wtyczek i splitterów flv, które próbowałem pracował.

Mój obecny proces wykorzystuje ffmpeg w następujący sposób:

  1. Zastosowanie ffmpeg wygenerować 25 PNG na sekundę na wideo, zmiana rozmiaru oryginału w zależności od potrzeb.
  2. Użyj przestrzeni nazw System.Drawing, aby połączyć każdy zestaw ramek w nowy obraz, zaczynając od statycznego tła, a następnie ładując każdą klatkę do obiektu Image i rysując na obiekcie Graphics - to daje mi połączone ramki.
  3. Użyj ffmpeg, aby połączyć wygenerowane obrazy z wideo.

Wszystko to jest bardzo intensywne IO (co jest obecnie wąskim gardłem w przetwórstwie) i uważam, że musi istnieć skuteczniejszy sposób osiągnięcia mojego celu. Nie mam dużego doświadczenia z przetwarzaniem wideo i nie wiem, jakie opcje są dostępne.

Czy ktoś może zaproponować bardziej efektywny sposób przetwarzania?

Odpowiedz

10

Zrób wszystko wewnątrz ffmpeg. Możesz zrobić wiele rzeczy za pomocą video filters. Na przykład, aby połączyć dwa filmy obok siebie:

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

@Oded: Zasadniczo to polecenie robi. Możesz usunąć filtr pad i zmienić parametry filtru overlay, aby przenieść drugi film tam, gdzie chcesz.

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

Podany link opisuje składnię filtra. Możesz połączyć ze sobą kilka filtrów:

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

Dzięki za odpowiedź - czy masz przykład wiersza poleceń obraz w obrazie? – Oded

+1

Świetny drugi przykład - jak określić więcej niż 2 źródła? Czy musiałbym wywoływać go wiele razy z różnymi nakładkami? – Oded

+0

Wygląda na to, że 'overlay' nie zmienia rozmiaru oryginałów - zakładam, że będę musiał użyć' scale' do tego? – Oded

Powiązane problemy