最近在處理視頻的時候,有這么一個需求
如果視頻的分辨率寬度大於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)
下圖就是我經過處理的不規則分辨率之后