ffmpeg按比例缩放--"width / height not divisible by 2" 解决方法

最近在处理视频的时候,有这么一个需求

如果视频的分辨率宽度大于960的话,就把宽度设为960,而高度按其比例进行缩放

如果视频的分辨率高度大于540的话,就把高度设为540,而宽度按其比例进行缩放

之前用了很多方法都只能解决一部分

而且会报:

"width / height not divisible by 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)

下图就是我经过处理的不规则分辨率之后

原文地址:https://www.cnblogs.com/rbzz/p/9986229.html