2012-02-15 17 views
20

Mam 2 filmy: HEADSHOT.MOV i SCREEN.MOV. Oba są dużymi plikami i czekam zarówno na zmniejszenie (rozmiar, przepływność, itp.) I umieszczenie tych dwóch obok siebie w tej samej, bardzo szerokiej ramce wideo. Końcowym rezultatem byłoby to, że podczas odtwarzania output_video.mp4, miałbyś bardzo szeroką ramkę z synchronizacją obu filmów i graniem z tą samą szybkością.FFMPEG 2 Wideo transkodowane i obok siebie w 1 klatce?

Oto syntatically błędna wersja tego, co próbuję zrobić:

ffmpeg -i HEADSHOT.MOV -t 00:02:00 -acodec libfaac -ab 64k -vcodec libx264 -r 30 -pass 1 -s 374x210 -vf "movie=SCREEN.MOV [small]; [in][small] -an -r 30 -pass 1 -s 374x210 overlay=10:10 -t 00:02:00 [out]" -threads 0 output_movie.mp4 

W powyższym przykładzie, próbowałem też ustawić czas trwania testu filmowy dla 2 minut, co podnosi jeszcze jedno pytanie, co jest najlepszy sposób na obejrzenie 2 filmów o różnej długości (jeśli są blisko)?

Zasoby znalazłem pomocny do tej pory są:

Multiple video sources combined into one i

http://ffmpeg.org/ffmpeg.html#overlay-1

Każda pomoc/porady są bardzo mile widziane. Mam problem ze składnią FFMPEG! Dziękuję Ci!

Odpowiedz

29

Rezultatem może być osiągnięty dzięki połączeniu skalę, pad i filtrów nakładanych co następuje:

ffmpeg.exe -i LeftInput.mp4 -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; 
    movie=RightInput.mp4, scale=iw/3:ih/3, fade=out:300:30:alpha=1 [right]; 
    [left][right] overlay=main_w/2:0 [out]" -b:v 768k Output.mp4 

Oto pierwszy film jest skurczył się o połowę, a wyściełane do swojego pierwotnego rozmiaru. Drugie wideo jest zmniejszone o dwie trzecie i nałożone na prawą połowę (obszar wypełnienia) pierwszego.

Krótszy film można wygasić; w przeciwnym razie ostatnia klatka będzie wyświetlana do końca połączonego wideo.

Wynik bitrate można ustawić za pomocą opcji -b:v. Rozmiary i pozycje wideo można również określić w pikselach dla filtrów nakładki, skali i nakładki.

+0

Dziękuję Dmitry, to jest świetne. Czy masz jakieś sugestie dotyczące szukania obu filmów do wspólnego kodu czasowego? Wiem, że dla [po lewej] mogę użyć -ss, ale jedynym filtrem jaki mogę znaleźć dla [right] jest seek_point, ale jest to tylko liczba sekund, a nie odniesienie do kodu czasowego. Czy można użyć czegoś takiego jak setpts = [określony punkt kodu czasowego]? Wszelkie inne porady dotyczące synchronizacji dwóch? – dcoffey3296

+6

Aby przekazać parametry wejściowe inne niż filtry filmu, należy użyć -filter_complex zamiast tego. Jest bardziej elastyczny niż -vf. Na przykład ten sam wynik można osiągnąć za pomocą następującego polecenia: 'ffmpeg.exe -i LeftInput.mp4 -i RightInput.mp4 -filter_complex" [0: v] scale = iw/2: ih/2, pad = 2 * iw: ih [left]; [1: v] scale = iw/3: ih/3, fade = out: 300: 30: alpha = 1 [right]; [left] [right] overlay = main_w/2: 0 [out ] "-b: v 768k Output.mp4' –

+5

Czy jest możliwe, aby synchronizować czasy w jakiś sposób, jeśli jeden film rozpocznie się kilka sekund później? –