ffmpeg: Bei scale und pad von Videos die SAR auf 1 setzen

C

CyborgBeta

Gast
Hallo,
ich habe ein Problem eher allgemeinerer Natur... Ich verkleinere Videos auf 480p (Rescaling...) mit einem schwarzen Rand oben und unten (ich weiß nicht genau, wie man den nennt) mit ffmpeg. Normalerweise geht das ziemlich einfach so:
ffmpeg -i input.mp4 -vf pad=width=858:height=480:x=0:y=-1:color=black -c:a copy output.mp4
Es gibt aber ein Problem, wenn die Sample Aspect Ratio (SAR) ungleich 1 ist, denn dadurch wird die Videobreite entsprechen gestreckt oder gestaucht. Das würde dann so funktionieren:
ffmpeg -i input.mp4 -vf scale=858:480:force_original_aspect_ratio=decrease,pad=858:480:(ow-iw)/2:(oh-ih)/2,setsar=1 -c:a copy output.mp4
Die SAR ist danach aber nicht 1. Wie kann ich die SAR beim Konvertieren automatisch auf 1 setzen?
 
Hm. hast du mal probiert, nur eine kantenlänge (bspw height=480) anzugeben und die breite weg zu lassen? zusammen mit keep aspect ratio sollte es da da ankommen, wo du hin willst
 
  • Gefällt mir
Reaktionen: CyborgBeta
Funktioniert leider nicht, bei
ffmpeg -i input.mp4 -vf scale=858:-1:force_original_aspect_ratio=decrease,pad=858:-1:0:-1,setsar=1 -c:a copy output.mp4
meldet ffmpeg immer:
Padded dimensions cannot be smaller than input dimensions.
Failed to configure input pad on Parsed_pad_1
 
CyborgBeta schrieb:
mit einem schwarzen Rand oben und unten (ich weiß nicht genau, wie man den nennt)
Das nennt man Letterbox
CyborgBeta schrieb:
Die SAR ist danach aber nicht 1. Wie kann ich die SAR beim Konvertieren automatisch auf 1 setzen?
Am einfachsten die Pixel schon ganz zu Begin der Filterkette quatratisch machen.
https://ffmpeg.org/ffmpeg-all.html#Examples-137
=>ffmpeg -i input.mp4 -vf "scale=trunc(ih*dar):ih,setsar=1,scale=858:480:force_original_aspect_ratio=decrease,pad=858:480:(ow-iw)/2:(oh-ih)/2" -c:a copy output.mp4
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: CyborgBeta
Versuch mal:

-vf "scale=(iw*sar)*min(858/(iw*sar)\,480/ih):ih*min(858/(iw*sar)\,480/ih), pad=858:480:(858-iw*min(858/iw\,480/ih))/2:(480-ih*min(858/iw\,480/ih))/2,setsar=1"
 
  • Gefällt mir
Reaktionen: CyborgBeta und up.whatever
Ouu, mein Fehler, es funktioniert doch mit
ffmpeg -i input.mkv -vf "scale=858:480:force_original_aspect_ratio=decrease,pad=858:480:0:-1,setsar=1" -c:a copy output.mkv
ich hatte nur
Code:
Stream 0
Codec: H264 - MPEG-4 AVC (part 10) (avc1)
Typ: Video
Videoauflösung: 858x480
Pufferabmessungen: 864x480
falsch verstanden, denn die Pufferabmessungen haben damit ja gar nix zu tun.
Btw. Es gibt auch noch die -aspect 858:480 Funktion, aber dann wird das Bild vertikal gestreckt. ;)
 
Zurück
Oben