• 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)

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

  • 相关阅读:
    IDE有毒
    Netbeans 8.2关于PHP的新特性
    什么是人格
    谁该赋予一款产品灵魂?
    自从升级到macOS后,整个人都不好了
    公司不是大家庭
    性能各个指标分析
    Sqlserver2012 alwayson部署攻略
    初探Backbone
    SQL Server AlwaysOn架构及原理
  • 原文地址:https://www.cnblogs.com/rbzz/p/9986229.html
Copyright © 2020-2023  润新知