FFMPEG - Bild in bestimmte Größe Skalieren?
Ich möchte eine Grafik, unabhängig ob PNG, JPG oder gar GIF, in ein WEBP-Bild umwandeln (Das krieg ich schon hin)
ffmpeg.exe -i quellbild.png -c:v libwebp_anim -pix_fmt yuva420p zielbild.webp
Jedoch soll dabei das Quell-Bild in eine bestimmte Größe skaliert werden. Hierbei möchte ich auch, dass zwar vom Quell-Bild die Aspect-Ratio eingehalten werden soll, jedoch dieses dann in der Mitte der gewünschten Ziel-Größe platziert werden soll.
Beispiel: Das Quell-Bild ist 256x512 (B/H) Pixel groß
Das Ziel-Bild soll 128x128 Pixel groß sein.
Das Quell-Bild wird auf 64x128 skaliert.
Es wird in der Mitte des 128x128 großen End-Bildes platziert.
Sodass das End-Bild dann 128x128 groß ist und das 64x128 Bild in der Mitte positioniert ist und der rest einfach transparent ist.
Wie kann ich das mit FFMPEG umsetzen.
ChatGPT hat mir das hier ausgespuckt, was aber das Bild "streckt" ...
-vf "scale=w=min(256\, iw):h=min(256\, ih),pad=256:256:(256-iw)/2:(256-ih)/2"
Da ich diesen Code absolut nicht verstehe und bis jetzt auch jegliche kleine Änderung daran in einer KATASTROPHE geendet hat, frage ich hier mal nach, ob das jemand schon gemacht hat.
1 Antwort
Falls es nicht unbedingt ffmpeg sein muss, sondern auch ImageMagick sein darf:
convert input.jpg -resize 64x128 -background black -gravity center -extent 128x128 output.jpg
https://www.imagemagick.org/discourse-server/viewtopic.php?t=20846
Ansonsten wäre "letterbox scaling" oder "letterboxing" genau das was Du brauchst, als kleiner Google-Anstoß.
Danke. Das hat jetzt geholfen. Mein Code lautet nun wie folgt:
ffmpeg.exe -i quellbild.png -vf "scale=256:256:force_original_aspect_ratio=decrease,setsar=1,pad=256:256:(ow-iw)/2:(oh-ih)/2:color=black@0" -c:v libwebp_anim -pix_fmt yuva420p zielbild.webp
Da ich nicht in PHP oder einer ähnlichen Umgebung arbeite, die mir ImageMagick zur Verfügung stellt, kann ich das leider so nicht machen. Ich füttere aber mal ChatGPT mit diesem "letterbox scaling" als grundlage. Danke :)