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

    具体代码

    1. /**
    2. * @Author
    3. * @Description 修改视频分辨率
    4. * @Date 9:02 2022/7/21
    5. * @Param [sourcePath, targetPath, height, width]
    6. * @return void
    7. **/
    8. public static void updateDpiAudio(String sourcePath, String targetPath,Integer height,Integer width) throws Exception {
    9. try {
    10. ProcessWrapper ffmpeg = new DefaultFFMPEGLocator().createExecutor();
    11. ffmpeg.addArgument("-i");
    12. ffmpeg.addArgument(sourcePath);
    13. ffmpeg.addArgument("-vf");
    14. //视频宽:720
    15. BigDecimal widthRatio = new BigDecimal(width).divide(new BigDecimal(720),1,BigDecimal.ROUND_UP);
    16. BigDecimal heightReal = new BigDecimal(height).divide(widthRatio,BigDecimal.ROUND_UP);
    17. BigDecimal value = new BigDecimal(1280).subtract(heightReal).divide(new BigDecimal(2),BigDecimal.ROUND_UP);
    18. ffmpeg.addArgument("scale=720:"+heightReal.intValue()+",pad=720:1280:0:"+value.intValue()+":black");
    19. ffmpeg.addArgument(targetPath);
    20. ffmpeg.execute();
    21. try (BufferedReader br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()))) {
    22. blockFfmpeg(br);
    23. }
    24. log.info("转化视频分辨率成功={}", targetPath);
    25. } catch (IOException e) {
    26. throw new Exception("转化视频分辨率失败");
    27. }
    28. }
    29. public static void main(String[] args) {
    30. try {
    31. updateDpiAudio("D:\\pic\\a\\6977276173130827137.mp4","D:\\pic\\a\\测试转码测试.mp4",442,960);
    32. } catch (Exception e) {
    33. e.printStackTrace();
    34. }
    35. }

  • 相关阅读:
    H3C 6520X版本U盘升级
    【开发环境简称】PRD生产环境-常见环境英文缩写简称
    DevExpress FMX Data Grid全面编辑和定制
    面向对象详解,面向对象的三大特征:封装、继承、多态
    复盘Linux期末考试【已凉凉】
    Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数
    免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
    Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果
    springboot2.3.7升级到springboot2.7.2
    MySQL事务与MVCC如何实现的隔离级别
  • 原文地址:https://blog.csdn.net/Amelia__Liu/article/details/125905143