Вот что я придумал:
-vf 'scale=-2:min(1080\,trunc(ih/2)*2)'
http://trac.ffmpeg.org/ticket/309
Или же:
-vf 'scale=-2:min(1080\,bitand(ih\,-2))'
Или же:
-vf 'scale=-2:min(1080\,ih-mod(ih\,2))'
Используя эту команду:
ffmpeg -loop 1 -r 1 -i q.jpg -t 5 -pix_fmt yuv420p -vf 'scale=-2:min(1080\,ih)' z.mp4
Я получаю это сообщение:
[libx264 @ 00000000004d0ec0] height not divisible by 2 (954x953)
Я могу избежать ошибки, как это:
ffmpeg -loop 1 -r 1 -i q.jpg -t 5 -pix_fmt yuv420p -vf scale=-2:1080 z.mp4
Однако это не идеально, потому что это увеличивает масштаб изображения. Как я могу масштабировать изображение, только если высота больше 1080, сохраняя при этом формат пикселя, какой у меня есть?
Вот что я придумал:
-vf 'scale=-2:min(1080\,trunc(ih/2)*2)'
http://trac.ffmpeg.org/ticket/309
Или же:
-vf 'scale=-2:min(1080\,bitand(ih\,-2))'
Или же:
-vf 'scale=-2:min(1080\,ih-mod(ih\,2))'
Вместо
'scale=-2:min(1080\,ih)'
использование
'scale=-2:min(1080\,if(mod(ih\,2)\,ih-1\,ih))'
Он проверит, ih
делится ли на 2
, а если нет, то уменьшит его 1
.