Folgendes habe ich mir ausgedacht:
-vf 'scale=-2:min(1080\,trunc(ih/2)*2)'
http://trac.ffmpeg.org/ticket/309
Oder:
-vf 'scale=-2:min(1080\,bitand(ih\,-2))'
Oder:
-vf 'scale=-2:min(1080\,ih-mod(ih\,2))'
Verwenden Sie diesen Befehl:
ffmpeg -loop 1 -r 1 -i q.jpg -t 5 -pix_fmt yuv420p -vf 'scale=-2:min(1080\,ih)' z.mp4
Ich erhalte diese Nachricht:
[libx264 @ 00000000004d0ec0] height not divisible by 2 (954x953)
Ich kann den Fehler so vermeiden:
ffmpeg -loop 1 -r 1 -i q.jpg -t 5 -pix_fmt yuv420p -vf scale=-2:1080 z.mp4
Dies ist jedoch nicht ideal, da das Bild dadurch vergrößert wird. Wie kann ich das Bild nur skalieren, wenn die Höhe größer als 1080 ist, während das Pixelformat unverändert bleibt?
Folgendes habe ich mir ausgedacht:
-vf 'scale=-2:min(1080\,trunc(ih/2)*2)'
http://trac.ffmpeg.org/ticket/309
Oder:
-vf 'scale=-2:min(1080\,bitand(ih\,-2))'
Oder:
-vf 'scale=-2:min(1080\,ih-mod(ih\,2))'
Anstatt
'scale=-2:min(1080\,ih)'
benutzen
'scale=-2:min(1080\,if(mod(ih\,2)\,ih-1\,ih))'
Es wird geprüft, ob ih
es teilbar ist 2
, und wenn nicht, wird es durch verringert 1
.