FFmpeg 给视频增加黑边

使用FFmpeg给视频增加黑边需要用到 pad 这个滤镜,具体用法如下:
    -vf pad=1280:720:0:93:black

按照从左到右的顺序依次为:
​    “宽”、“高”、“X坐标”和“Y坐标”,宽和高指的是输入视频尺寸(包含加黑边的尺寸),XY指的是视频所在位置。

比如一个输入视频尺寸是1280x534的源,想要加上黑边变成1280x720,那么用上边的语法可以实现,93是这样得来的,(720-534)/2。

如果视频原始1920x800的话,完整的语法应该是:
    -vf 'scale=1280:534,pad=1280:720:0:93:black'

先将视频缩小到1280x534,然后在加入黑边变成1280x720,将1280x534的视频放置在x=0,y=93的地方,
​FFmpeg会自动在上下增加93像素的黑边。
注:black可以不写,默认是黑色

举例: 我原视频尺寸是 960*442

现在需要改成分辨率为720*1280 并且视频保持原比例,其余黑边填充

首先就分把视频转为 720*316

316的算法 442/(960/720)取整

482算法 (1280-316)/2

  -vf 'scale=720:619,pad=720:1280:0:482:black'

具体代码

 /**
     * @Author 
     * @Description  修改视频分辨率
     * @Date 9:02 2022/7/21
     * @Param [sourcePath, targetPath, height, width]
     * @return void
     **/
    public static void updateDpiAudio(String sourcePath, String targetPath,Integer height,Integer width) throws Exception {
        try {
            ProcessWrapper ffmpeg = new DefaultFFMPEGLocator().createExecutor();
                ffmpeg.addArgument("-i");
                ffmpeg.addArgument(sourcePath);
                ffmpeg.addArgument("-vf");
                //视频宽:720
            BigDecimal widthRatio = new BigDecimal(width).divide(new BigDecimal(720),1,BigDecimal.ROUND_UP);
            BigDecimal heightReal = new BigDecimal(height).divide(widthRatio,BigDecimal.ROUND_UP);
            BigDecimal value = new BigDecimal(1280).subtract(heightReal).divide(new BigDecimal(2),BigDecimal.ROUND_UP);
                ffmpeg.addArgument("scale=720:"+heightReal.intValue()+",pad=720:1280:0:"+value.intValue()+":black");
            ffmpeg.addArgument(targetPath);
            ffmpeg.execute();
            try (BufferedReader br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()))) {
                blockFfmpeg(br);
            }
            log.info("转化视频分辨率成功={}", targetPath);
        } catch (IOException e) {
            throw new Exception("转化视频分辨率失败");
        }
    }

    public static void main(String[] args) {
        try {
            updateDpiAudio("D:\\pic\\a\\6977276173130827137.mp4","D:\\pic\\a\\测试转码测试.mp4",442,960);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值