Ik gebruik dit filter om wat bij te snijden:

-filter_complex "[0:v]crop=w=320:h=240[v0c] 

wat goed werkt. Het probleem is dat ik soms niet weet wat de input is die ik ga krijgen. Het kan bijvoorbeeld een 1000x500 of een 500x1000 zijn. Dus als dat gebeurt, krijgt het slechts een klein deel van het midden van de video. Het ideaal zou zijn om het formaat van de invoer aan te passen aan de kleinste van zijn afmetingen aan de door mij gewenste uitvoer, en de rest bij te snijden. Het probleem is dat ik niet weet welke dimensie zal zijn.

Hoe kan ik een filter bouwen om dit probleem op te lossen?

Opmerkingen

  • Wat is de gewenste uitvoergrootte?
  • 320×240, zoals in het commando dat ik heb geschreven

Antwoord

Gebruik

[0:v]scale="if(gt(a,4/3),-1,320)":"if(gt(a,4/3),240,-1)",setsar=1,crop=320:240[v0c] 

De schaalfilteruitdrukkingen voor x en y controleren de aspectverhouding van de invoer en indien groter dan 4 : 3, stel de waarde in op het 2e argument en zo niet op het derde argument. De -1 betekent dat de oorspronkelijke beeldverhouding behouden moet blijven, bijvoorbeeld scale=-1:400 toegepast op een 600x800 canvas zal resulteren in 300x400.

Opmerkingen

  • En als mijn gewenste uitvoer een andere was, zou deze opdracht dan nog steeds werken, alleen 320 en 240?
  • Ja. Werk ook de aspectverhoudingfractie bij, als dat ' anders is.
  • Heb ik dus altijd standaardbeeldverhoudingen nodig, zoals 16: 9 of 4: 3? Kan ik geen willekeurige resoluties maken, zoals 322×239?
  • Zeker. De aspectverhouding hier is die van uw gewenste uitvoer. Dus als uw doelwit 234×787 is, dan is het ' s (a,234/787)
  • Verklaard in bewerkt antwoord.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *