错误
执行 ffmpeg -loop 1 -r 1 -i q.jpg -t 5 -pix_fmt yuv420p -vf
"scale=-2:min(1080\,ih)" z.mp4报错height not divisible by 2 (954x953)

 

解决办法:

-vf "scale=-2:min(1080\,bitand(ih\,-2))" 

 

================================================================================================================================================================================

其他代码解决方式

如这种错误,就是说 宽度/高度不能被2除尽

其实解决方法也很简单,先看代码

//设置或保存ffmepg的参数
            string ffmpegFormart = string.Empty;
            if ( width > height && width > 960 )
            {
                //如果宽度比高度大且又大于960的情况下,以宽度为960来缩放
                
                ffmpegFormart = string.Format (" -vf scale=960:{0}/({1}*1.00/960) " , height , width);

                //下面这种方法可以解决一部分,但是遇到高度无法被2除尽的时候会报错误
                //ffmpegFormart = $" -vf scale=960:-1 ";
                
            }
            else if ( width < height && height > 540 )
            {
                //如果高度比宽度大且又大于540,以高度540来缩放
               
                ffmpegFormart = string.Format (" -vf scale={0}/({1}*1.00/540):540 " , width , height);
            }

  思路就是一个小学数学的思路

例如有一个视频分辨率为1280*720

如果我要将高度设为固定的540,那么,宽度就应该为  1280/(720/540) 约等于962的样子

当然,这样肯定会有一像素之内的差距,但也不会有什么影响

所以如果视频在处理的时候

宽度:width

高度:height

固高:XHeight

那么可以得出

动宽 ≈ +width/(height*1.00/XHeight)