Czy w FFMPEG jest możliwa zmiana skali w czasie?

11

Ok, więc używając filtra nakładki, można zmienić lokalizację x / y wideo w czasie, używając zmiennej „t”. Na przykład overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0można go użyć do rozpoczęcia przesuwania nakładanego elementu od lewego górnego do prawego górnego rogu, po upływie 2 sekund.

Chcę zastosować podobną zasadę do skalowania elementów. Chciałbym móc zmieniać skalę filmu w czasie za pomocą wyrażenia (jak scale=w=iw*t, lub coś wzdłuż tej linii).

czy to możliwe?

kiedy uruchamiam to wyrażenie przez -filter_complex, otrzymuję

Błąd podczas oceny wyrażenia „iw * t”.

Może wyrażenie dla out_w: 'iw * t' lub dla out_h: '- 1' odnosi się do siebie.

Wydaje mi się, że istnieje spora szansa, że ​​będę musiał załatać FFMpeg, jeśli chcę uzyskać tę funkcjonalność, ale pomyślałem, że najpierw zapytam, czy ktoś będzie wiedział o tego rodzaju rzeczach!

Czy ktoś wie, jak można wykonać takie zadanie?

Dzięki za pomoc!

theophilus777
źródło
Brzmi bardziej jak błąd składniowy w tej chwili, ale wcześniej nie korzystałem z tej funkcji, więc niestety tak naprawdę nie mogę tutaj pomóc.
PTS
1
t nie jest zdefiniowaną rzeczą, jeśli chodzi o filtr nakładki.
v010dya
1
Możesz po prostu napisać filtr. wiki.multimedia.cx/index.php?title=FFmpeg_filter_howto
denjello
1
@alexspeller filtr skali nie obsługuje edycji osi czasu, więc nie jest to możliwe bezpośrednio. Sprawdzę, czy istnieje obejście.
Gyan
1
Technicznie możliwe z wyjściem H.264 / 5. Nie wiem, jak gracze / redaktorzy sobie z tym poradzą.
Gyan

Odpowiedzi:

2

Z tego, co rozumiem, „t” jest oceniane raz. Czytałeś to: https://ffmpeg.org/ffmpeg-filters.html#zoompan ?

Dokumenty Ffmpeg:

9.170.1 Przykłady

  • Przybliż do 1,5 i przesuń jednocześnie do jakiegoś miejsca w pobliżu środka obrazu:

zoompan = z = „min (zoom + 0,0015,1,5)”: d = 700: x = „if (gte (zoom, 1,5), x, x + 1 / a)”: y = „if (gte (zoom, 1,5), y, y + 1) ': s = 640 x 360

  • Przybliż do 1,5 i kadruj zawsze w centrum obrazu:

zoompan = z = „min (zoom + 0,0015,1,5)”: d = 700: x = „iw / 2- (iw / zoom / 2)”: y = „ih / 2- (ih / zoom / 2)”

  • To samo co powyżej, ale bez pauzy:

zoompan = z = 'min (maks. (zoom, pzoom) +0,0015,1,5)': d = 1: x = 'iw / 2- (iw / zoom / 2)': y = 'ih / 2- (ih / zoom / 2) ”

Obrabować
źródło