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)

 

下圖就是我經過處理的不規則分辨率之后


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM