激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java調用FFmpeg實現視屏壓縮功能的詳細步驟

java調用FFmpeg實現視屏壓縮功能的詳細步驟

2021-12-23 12:4232224047_yw Java教程

這篇文章主要介紹了java調用FFmpeg實現視屏壓縮功能,本文簡單的展示了java調用FFmpeg命令實現視屏的壓縮的詳細步驟,需要的朋友可以參考下

前言

最近做人臉識別,對于過大的視屏(10M)以上,識別失敗的幾率比較大。找了下相關的視屏壓縮資料。首先使用的是jave進行視屏壓縮,但是踩坑失敗,jave中有轉碼的過程,雖然壓縮成功,各種壓縮參數也調整了一大堆,但是在識別時,幾乎都不會成功,但是只是壓縮觀看的話,還是可以使用jave的。繼續踩坑,直接使用原生的FFmpeg,在windows系統通過cmd命令,進行壓縮,調整對應的視屏參數,壓縮效果可以,而且可以識別成功,下面簡單的展示下java調用FFmpeg命令實現視屏的壓縮,僅供參考。

 

實現步驟

一、在windows系統中下載對應的FFmpeg

然后進行安裝

下載地址:

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

使用命令行窗口檢驗是否安裝成功,調用命令行(windows+R輸入cmd)輸入“ffmpeg Cversion”,如果出現如下說明配置成功。

java調用FFmpeg實現視屏壓縮功能的詳細步驟

具體的安裝步驟比較簡單,這里略過。

二、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 后視頻的清晰度會降低很多

三、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教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 国产亚洲综合一区二区 | 亚洲一区二区三区视频 | jizzjizzjizzjizz国产 | 国产精品欧美久久久久一区二区 | 欧美一级做一a做片性视频 日韩黄色片免费看 | 亚洲小视频在线观看,com | 永久免费黄色片 | 久草在线视频免费播放 | 午色影院 | 成人免费乱码大片a毛片视频网站 | 九九热九九热 | 久草在线免费看 | 特级毛片全部免费播放器 | 黄色一级视频 | 免费国产一级淫片 | 日产精品久久久一区二区福利 | 国产午夜精品一区二区三区嫩草 | 精品国产高清一区二区三区 | av在线播放网址 | 国产一级毛片av | 一级爱片| 精品一区二区三区在线观看国产 | 中文字幕涩涩久久乱小说 | 一级国产电影 | 黄色片网站在线免费观看 | 亚洲最大中文字幕 | 白白在线免费视频 | 免费午夜视频 | 久久久久成人网 | 久草在线视频在线 | 日本a级免费 | 美女久久 | 国产精品免费看 | 久久精品女人天堂av | 国产久草视频在线 | bt 自拍 另类 综合 欧美 | 国产精品成人一区二区三区吃奶 | 亚洲免费视频大全 | 在线观看免费av网 | 精品黑人一区二区三区国语馆 | 国产精品wwww |