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,本文對此進行了一點小小的改動。