Java后台用ffmpeg命令給視頻添加水印


1:先去ffmpeg官網下載其壓縮包  http://ffmpeg.org/download.html

 

2.將壓縮包拷貝到你想的任意位置並解壓,正常解壓出來的文件名過長,也可能會有空格,我們最好將文件夾下的文件拷貝出來到一個新的文件夾FFmpeg下

 

 

 3.配置環境變量

 

4.查看你的ffmpeg是否安裝好,win+r 輸入cmd,在里面輸入ffmpeg -version,顯示如下則安裝成功

 

 

 5.在你的項目下新增工具類ProcessExec 一下是工具類里的代碼

 1 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 2 import java.io.BufferedReader;
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.util.ArrayList;
 7 import java.util.HashMap;
 8 import java.util.List;
 9 import java.util.Map;
10 import java.util.concurrent.ExecutorService;
11 import java.util.concurrent.Executors;
12 
13 public class ProcessExec {
14 
15     private Process process;
16 
17     public void execute(Map<String,String> dto)
18              {
19                  StringBuffer waterlogo = new StringBuffer();
20                  waterlogo.append("-i ");
21                  if(null!=dto.get("input_path")&&StringUtils.isNotEmpty(dto.get("input_path"))){
22                      waterlogo.append(dto.get("input_path"));
23                  }
24                  waterlogo.append("  -vf \"movie=");
25                  if (null!=dto.get("logo")&&StringUtils.isNotEmpty(dto.get("logo"))){
26                      waterlogo.append(dto.get("logo"));
27                  }
28                  waterlogo.append(",scale= 60: 30");
29                  waterlogo.append(" [watermark]; [in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10 [out]\" ");
30                  if (null!=dto.get("video_converted_path")&&StringUtils.isNotEmpty(dto.get("video_converted_path"))){
31                      waterlogo.append(dto.get("video_converted_path"));
32                  }
33                  System.out.println(waterlogo);
34                  Runtime run = Runtime.getRuntime();
35                  String ffmegPath = null;
36                  if (StringUtils.isNotEmpty(dto.get("ffmpeg_path"))){
37                      ffmegPath = dto.get("ffmpeg_path");
38                  }
39 // 執行命
40                  try {
41                      java.lang.Process process = run.exec(ffmegPath+waterlogo);
42 // 異步讀取輸出
43                      InputStream inputStream = process.getInputStream();
44                      InputStream errorStream = process.getErrorStream();
45                     /* BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,"gbk"));
46                      String str1="";
47                      while((str=br.readLine())!=null){
48                          System.out.println(str1);
49                      }*/
50 
51                      ExecutorService service = Executors.newFixedThreadPool(2);
52 
53                     ResultStreamHandler inputStreamHandler = new ResultStreamHandler(inputStream);
54                     ResultStreamHandler errorStreamHandler = new ResultStreamHandler(errorStream);
55 
56                     service.execute(inputStreamHandler);
57                     service.execute(errorStreamHandler);
58 
59                     process.waitFor();
60                     service.shutdownNow();
61                  } catch (IOException e) {
62                      e.printStackTrace();
63                  } catch (InterruptedException e) {
64                      e.printStackTrace();
65                  }
66              }
67 
68 
69 }

6.新增控制台輸入代碼 ResultStreamHandler 

 

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.io.InputStreamReader;
 5 
 6 public class ResultStreamHandler
 7         implements Runnable {
 8     private InputStream inputStream;
 9 
10     ResultStreamHandler( InputStream inputStream ) {
11         this.inputStream = inputStream;
12     }
13 
14     public void run() {
15 
16         BufferedReader bufferedReader = null;
17         try {
18             bufferedReader = new BufferedReader( new InputStreamReader( inputStream,"gbk" ) );
19             String line = null;
20 
21             while ( ( line = bufferedReader.readLine() ) != null ) {
22                 System.out.println( line );
23             }
24         }
25         catch ( Throwable t ) {
26         }
27         finally {
28             try {
29                 bufferedReader.close();
30             }
31             catch ( IOException e ) {
32             }
33         }
34     }
35 
36 }

7.調用添加水印工具類代碼

import java.util.HashMap;

public class test {

    public static void main(String[] args) {
        ProcessExec ps = new ProcessExec();
        HashMap<String, String> dto=new HashMap<String, String>();
        dto.put("ffmpeg_path","G:\\Program Files\\FFmpeg\\bin\\ffmpeg.exe ");//必填:此處是ffmpeg.exe所在位置,也就FFmpeg文件夾bin目錄下的ffmpeg.exe
        dto.put("input_path", "G:\\05如何將牛人身上的技能都榨干?.mp4");//必填;此處是你要處理的視頻位置
        dto.put("video_converted_path", "G:\\video\\TEST1.mp4");//必填;此處是完成添加水印后輸入視頻的位置並重新命名該視頻
        dto.put("logo", "D\\\\:/20160512155254687.png");//必填;此處是你要添加的水印位置,注意此處圖片位置一定要加上轉譯符,否則識別不了盤符
        ps.execute(dto);

    }

}

 

 

 

注:工具類源代碼部分出自文章https://blog.csdn.net/lzhnightwind/article/details/84689159,本文對此進行了一點小小的改動。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM