gpt4 book ai didi

java调用FFmpeg实现视屏压缩功能的详细步骤

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java调用FFmpeg实现视屏压缩功能的详细步骤由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言

最近做人脸识别,对于过大的视屏(10M)以上,识别失败的几率比较大。找了下相关的视屏压缩资料。首先使用的是jave进行视屏压缩,但是踩坑失败,jave中有转码的过程,虽然压缩成功,各种压缩参数也调整了一大堆,但是在识别时,几乎都不会成功,但是只是压缩观看的话,还是可以使用jave的。继续踩坑,直接使用原生的FFmpeg,在windows系统通过cmd命令,进行压缩,调整对应的视屏参数,压缩效果可以,而且可以识别成功,下面简单的展示下java调用FFmpeg命令实现视屏的压缩,仅供参考.

  。

实现步骤

1、在windows系统中下载对应的FFmpeg

然后进行安装 。

下载地址:

https://github.com/BtbN/FFmpeg-Builds/releases 。

使用命令行窗口检验是否安装成功,调用命令行(windows+R输入cmd)输入“ffmpeg Cversion”,如果出现如下说明配置成功.

java调用FFmpeg实现视屏压缩功能的详细步骤

具体的安装步骤比较简单,这里略过.

2、FFmpeg压缩视屏命令

ffmpeg -i 待压缩文件 -b:v 1.5M  压缩后的文件参考:ffmpeg -i Desktop/1.mov -b:v 1.5M  Desktop/1.mp4
  • -b:v 1.5M : 指定码率
  • -b:v :指定视频的码率
  • -b:a : 指定音频的码率
  • 1.5M:码率的值 1.5M 表示 1.5Mb/s

当码率设置为小于 1.5Mb/s 后视频的清晰度会降低很多 。

3、java实现FFmpeg命令调用

方式一:直接使用runtime.exec()调用命令,这种调用方法命令在后台执行。main方法遍历文件夹下所有mp4文件,并进行压缩处理,可以根据自己需求修改代码.

/*   * 压缩视频   * @param convertFile  待转换的文件   * @param targetFile  转换后的目标文件   */  private static  void toCompressFile(String convertFile,String targetFile){      try{          Runtime runtime = Runtime.getRuntime();          /**将视频压缩为 每秒15帧 平均码率600k 画面的宽与高 为1280*720*/          String cutCmd="ffmpeg -i " + convertFile + " -r 15 -b:v 600k  -s 1280x720 "+ targetFile;          System.out.println("cutCmd:"+cutCmd);          runtime.exec(cutCmd);          System.out.println("文件:"+convertFile+" 正在转换中。。。");      }catch(Exception e){          e.printStackTrace();          System.out.println("压缩文件出现异常:"+e.getMessage());      }  }  public static void main(String[] ars ){      long startTime = System.currentTimeMillis();      final String convertFile="C:\\Users\\issuser\\Desktop\\a\\";      File f=new File(convertFile);      File[] fs=f.listFiles();      for(File ff:fs){          if(ff.toPath().toString().toLowerCase().endsWith(".mp4")){              String f1=convertFile+ff.getName();              String f2=convertFile+"压缩后_"+ff.getName();              toCompressFile(f1,f2);          }      }      System.out.println("耗时:"+(System.currentTimeMillis()-startTime));  }

方式二: 新增方法:runCmd(),在toCompressFile()方法中调用,取代toCompressFile()方法中的 runtime.exec()方法,换成runCmd()方法后,在代码程序中就"阻塞",按照代码执行顺序依次执行,统计的耗时时间就是视屏的压缩时间。runCmd()可以直接调用linux系统中的FFmpeg命令.

import java.io.BufferedReader;import java.io.File;import java.io.InputStream;import java.io.InputStreamReader;public class FFmpegVideo {  /*   * 压缩视频   * @param convertFile  待转换的文件   * @param targetFile  转换后的目标文件   */  private static  void toCompressFile(String convertFile,String targetFile){      try{          Runtime runtime = Runtime.getRuntime();          /**将视频压缩为 每秒15帧 平均码率600k 画面的宽与高 为1280*720*/          String cutCmd="ffmpeg -i " + convertFile + " -r 15 -b:v 600k  -s 1280x720 "+ targetFile;          System.out.println("cutCmd:"+cutCmd);          runCmd(cutCmd);          System.out.println("文件:"+convertFile+" 视屏压缩完成");      }catch(Exception e){          e.printStackTrace();          System.out.println("压缩文件出现异常:"+e.getMessage());      }  }  public static void main(String[] ars ){      long startTime = System.currentTimeMillis();      final String convertFile="C:\\Users\\issuser\\Desktop\\a\\";      File f=new File(convertFile);      File[] fs=f.listFiles();      for(File ff:fs){          if(ff.toPath().toString().toLowerCase().endsWith(".mp4")){              String f1=convertFile+ff.getName();              String f2=convertFile+"after_"+ff.getName();              toCompressFile(f1,f2);          }      }      System.out.println("耗时:"+(System.currentTimeMillis()-startTime));  }  /**   * linux下 ffmpeg命令的执行方法   *   * @param command 执行的命令字符串   */  public static void runCmd(String command) {      try {          Runtime rt = Runtime.getRuntime();          Process proc = rt.exec(command);          InputStream stderr = proc.getErrorStream();          InputStreamReader isr = new InputStreamReader(stderr);          BufferedReader br = new BufferedReader(isr);          String line;          System.out.println("开始执行");          while ((line = br.readLine()) != null){              System.out.println(line);          }          System.out.println("执行结束");          int exitVal = proc.waitFor();          System.out.println("Process exitValue: " + exitVal);      } catch (Throwable t) {          System.out.println(t);          t.printStackTrace();      }  }}

执行完成及耗时:

java调用FFmpeg实现视屏压缩功能的详细步骤

压缩情况:

压缩前 。

java调用FFmpeg实现视屏压缩功能的详细步骤

压缩后:

java调用FFmpeg实现视屏压缩功能的详细步骤

  。

注意事项

1.文件名

文件名不应该包含特殊字符,否则,压缩识别可能失败.

2.视屏参数

这里只设置了帧数和视屏的码率,其他参数,可以根据自己需要设置 。

到此这篇关于java调用FFmpeg实现视屏压缩的文章就介绍到这了,更多相关java实现视屏压缩内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/qq_32224047/article/details/120140140 。

最后此篇关于java调用FFmpeg实现视屏压缩功能的详细步骤的文章就讲到这里了,如果你想了解更多关于java调用FFmpeg实现视屏压缩功能的详细步骤的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com