Ok, mit dem Overlay-Filter kann man die x / y-Position eines Videos im Laufe der Zeit mithilfe der Variablen "t" ändern. Beispielsweise overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
kann verwendet werden , um ein überlagertes Element von oben nach rechts oben nach links zu starten Schiebe-, nach 2 Sekunden vergangen sind.
Ich möchte ein ähnliches Prinzip für die Skalierung von Elementen verwenden. Ich möchte in der Lage sein, die Skalierung eines Videos im Laufe der Zeit mithilfe eines Ausdrucks (wie scale=w=iw*t
, oder etwas in dieser Richtung) zu ändern .
Ist das möglich?
Wenn ich diesen Ausdruck über -filter_complex ausführe, erhalte ich
Fehler beim Auswerten des Ausdrucks 'iw * t'.
Vielleicht ist der Ausdruck für out_w: 'iw * t' oder für out_h: '- 1' selbstreferenzierend.
Ich habe das Gefühl, dass es eine faire Chance gibt, dass ich FFMpeg patchen muss, wenn ich diese Funktionalität erhalten möchte, aber ich dachte, ich würde zuerst fragen, ob jemand etwas über diese Art von Dingen weiß!
Weiß jemand, wie eine solche Aufgabe erfüllt werden könnte?
Danke für die Hilfe!
Antworten:
Soweit ich weiß, wird 't' einmal ausgewertet. Haben Sie dies gelesen: https://ffmpeg.org/ffmpeg-filters.html#zoompan ?
Ffmpeg Docs:
9.170.1 Beispiele
zoompan = z = 'min (zoom + 0,00115,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 × 360
zoompan = z = 'min (Zoom + 0,00115,1,5)': d = 700: x = 'iw / 2- (iw / zoom / 2)': y = 'ih / 2- (ih / zoom / 2)'
zoompan = z = 'min (max (Zoom, pzoom) +0,0015,1,5)': d = 1: x = 'iw / 2- (iw / zoom / 2)': y = 'ih / 2- (ih / zoom / 2) '
quelle