Jag använder det här filtret för att beskära:

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

som fungerar okej. Problemet är att jag ibland inte vet vilken input jag kommer att få. Det kan till exempel vara 1000x500 eller 500x1000. Så när det händer blir det bara ett litet område i mitten av videon. Idealet skulle vara att ändra storlek på ingången för att matcha den mindre av dess dimensioner till min önskade effekt och beskära resten. Problemet är att jag inte vet vilken dimension som kommer att bli.

Hur kunde jag skapa ett filter för att lösa detta problem?

Kommentarer

  • Vad är önskad utmatningsstorlek?
  • 320×240, som i kommandot jag har skrivit

Svar

Använd

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

Skalans filteruttryck för x och y kontrollera ingångens bildförhållande och om det är större än 4 : 3, ställ in värdet till det andra argumentet, och om inte, till det tredje argumentet. -1 betyder att det ursprungliga bildförhållandet bör bevaras t.ex. scale=-1:400 tillämpas på en 600x800 duk resulterar i 300x400.

Kommentarer

  • Om min önskade utdata var en annan, skulle detta kommando fortfarande fungera, bara ersätta 320 och 240?
  • Ja. Uppdatera även bildförhållandefraktionen, om den ' är annorlunda.
  • Så behöver jag alltid standardformat, som 16: 9 eller 4: 3? Kan jag inte göra slumpmässiga upplösningar, som 322×239?
  • Visst. Bildförhållandet här är det som du önskar. Så om ditt mål är 234×787, så ' s (a,234/787)
  • Förklaras i redigerat svar.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *