1.下载ffmpeg集成(静态)版本,解压后无需安装

链接:https://pan.baidu.com/s/1-a4lDqqJDRdX99500L6lIw 密码:qp8c

CmdExecuter

package com.amigo.online.provider.manager.util.video.processing;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
public class CmdExecuter {
public static String exec(List<String> cmd) {
String converted_time = null;
Process proc =null;
BufferedReader stdout = null;
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(cmd);
builder.redirectErrorStream(true);
proc = builder.start();
stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
int lineNumber=1;
List<String> returnStringList = new LinkedList<String>();
while ((line = stdout.readLine()) != null) {
System.out.println("第"+lineNumber+"行:"+line);
lineNumber=lineNumber+1;
returnStringList.add(FFMPEG.dealString(line));
}
String info = "";
for (int i = returnStringList.size() - 1; i >= 0; i--) {
if (null != returnStringList.get(i) && returnStringList.get(i).startsWith("frame=")) {
info = returnStringList.get(i);
break;
}
}
if (null != info) {
converted_time = info.split("time=")[1].split("bitrate=")[0].trim();
}
} catch (IndexOutOfBoundsException ex) {
converted_time = null;
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
proc.waitFor();
stdout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return converted_time;
}}

FFMPEG

package com.amigo.online.provider.manager.util.video.processing;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FFMPEG {
public static String dealString( String str ){  Matcher m=java.util.regex.Pattern.compile("^frame=.*" ).matcher(str);String msg="";while (m.find()){msg = m.group();  }return msg;
}
/**
* 如果是数字就是成功的时间(秒数)
* @param str
* @return
*/
public static boolean isNumeric(String str){ Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str);if( !isNum.matches() ){return false; } return true;
}
/**
*  如果返回不是null的值就是成功(值为转换用时单位:秒)
* @param instr
* @return
*/
public static String returnSecond(String instr){String returnValue=null;if (null!=instr) {String[] a=instr.split("\\.");String[] b=a[0].split(":");int returnNumber=0;if (null!=instr&&b[0].length()!=0) {returnNumber=Integer.valueOf(b[0])*60*60 + Integer.valueOf(b[1])*60 + Integer.valueOf(b[2]);returnValue=String.valueOf(returnNumber);
}else{
returnValue=null;
}
}return returnValue;}
/**
* 获取视频格式(转码前的格式和转码后的格式都可以调用)
* @param outputPath
* @return
*/
public static String returnVideoFormat(String outputPath){return outputPath.substring(outputPath.lastIndexOf(".")+1);
}
/**
* @ HashMap<String,String> dto 参数传递对象<br>
* dto中包含的参数<br>
* (必填)1.ffmpeg_path:ffmpeg执行文件地址,如 d:\\ffmpeg\\ffmpeg.exe Linux下直接调用ffmpeg命令(当然你事先已经有这个程序了)<br>
* (必填)2.input_path:原视频路径<br>
* (必填)3.video_converted_path:转换后视频输出路径<br>
* (可选)4.screen_size:视频尺寸 长度乘宽度 乘号用英文小写"x"如 512x480<br>
* (可选)5.logo:水印地址(其实在ffmpeg中有一个专门的watermark参数,logo跟它有何不同,我还没看,不过对我来说效果一样 貌似需要png图片才行)<br>
* (可选,如果填写必须有logo才行,默认为0)6.xaxis:水印logo的横坐标(只有logo参数为一个正确路径才行) 比如0<br>
* (可选,如果填写必须有logo才行,默认为0)6.yaxis:水印logo的纵坐标(只有logo参数为一个正确路径才行) 比如0<br>
* (可选)vb:视频比特率,传入一个数值,单位在程序里面拼接了k
* (可选)ab:音频比特率,传入一个数值,单位在程序里面拼接了k
*/
public String videoTransfer(HashMap<String, String> dto){
//  String ffmpeg_path,String input_path,String video_converted_path,String logo,String screen_size,String xaxis,String yaxis,String vb,String abList<String> cmd = new ArrayList<String>();  cmd.add(dto.get("ffmpeg_path"));cmd.add("-y");  cmd.add("-i");  cmd.add(dto.get("input_path"));  if (null!=dto.get("screen_size")) {cmd.add("-s");  cmd.add(dto.get("screen_size"));    }if (null!=dto.get("logo")) {String logo=dto.get("logo");cmd.add("-vf");String xaxis=dto.get("xaxis");String yaxis=dto.get("yaxis");xaxis=xaxis!=null&&!xaxis.equals("")?xaxis:"0";yaxis=yaxis!=null&&!yaxis.equals("")?yaxis:"0";String logoString="movie="+logo+"[logo],[in][logo]overlay=x="+xaxis+":y="+yaxis+"[out]";cmd.add(logoString);
}cmd.add("-strict");cmd.add("-2");if (null!=dto.get("vb")&&!dto.get("vb").equals("")) {cmd.add("-vb");cmd.add(dto.get("vb")+"k");
}if(null!=dto.get("ab")&&!dto.get("ab").equals("")){cmd.add("-ab");cmd.add(dto.get("ab")+"k");}cmd.add("-q:v");cmd.add("4");cmd.add(dto.get("video_converted_path"));  String converted_time= CmdExecuter.exec(cmd);  return returnSecond(converted_time);//获取转换时间
}
public static void  main(String [] arg){HashMap<String, String>dto=new HashMap<String, String>();dto.put("ffmpeg_path", "E:\\lwl\\ffmpegUtil\\ffmpeg-20180714-c5329d6-win64-static\\bin\\ffmpeg.exe");//必填dto.put("input_path", "D:\\image\\777.mp4");//必填dto.put("video_converted_path", "D:\\image\\video\\gg.mp4");//必填dto.put("logo", "D\\\\:/image/createImage.jpg");//可选(注意windows下面的logo地址前面要写4个反斜杠,如果用浏览器里面调用servlet并传参只用两个,如 d:\\:/ffmpeg/input/logo.png)String secondsString=  new FFMPEG().videoTransfer(dto);System.out.println("转换共用:"+secondsString+"秒");
}}

VideoThumbTaker

package com.amigo.online.provider.manager.util.video.processing;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class VideoThumbTaker {protected String ffmpegApp;public VideoThumbTaker(String ffmpegApp){this.ffmpegApp = ffmpegApp;}@SuppressWarnings("unused")/***** 获取指定时间内的图片* @param videoFilename:视频路径* @param thumbFilename:图片保存路径* @param width:图片长* @param height:图片宽* @param hour:指定时* @param min:指定分* @param sec:指定秒* @throws IOException* @throws InterruptedException*/public void getThumb(String videoFilename, String thumbFilename, int width,int height, int hour, int min, float sec) throws IOException,InterruptedException{ProcessBuilder processBuilder = new ProcessBuilder(ffmpegApp, "-y","-i", videoFilename, "-vframes", "1", "-ss", hour + ":" + min+ ":" + sec, "-f", "mjpeg", "-s", width + "*" + height,"-an", thumbFilename);Process process = processBuilder.start();InputStream stderr = process.getErrorStream();InputStreamReader isr = new InputStreamReader(stderr);BufferedReader br = new BufferedReader(isr);String line;while ((line = br.readLine()) != null);process.waitFor();if(br != null)br.close();if(isr != null)isr.close();if(stderr != null)stderr.close();}}

java如何给视频添加水印logo相关推荐

  1. 使用java代码给视频添加水印

    使用java代码给视频添加水印 步骤一:下载相关依赖包: 相关地址:ffmpeg 步骤二:下载ffmpeg依赖软件 相关地址:点击下载 步骤三:直接上代码 类一:FFMPEG package cn.o ...

  2. 如何给视频添加水印logo?

    现在是自媒体的时代,不管你是个人还是团队,都可以在自媒体平台上传自己的视频,自媒体人每天信息苦苦创作的原创视频如果被别人盗用会造成很大的损失,为了防止这些事情的发生就需要在视频上添加自己的专属logo ...

  3. java给视频添加水印_用java实现对视频添加水印的代码或思路

    展开全部 package com.jc.ts.services; import java.awt.Color; import java.awt.Graphics; import java.awt.Im ...

  4. ffmpeg 视频添加水印 logo

    1.使用ffmpeg 视频添加水印(logo).在视频行业已经工作了两年多了,最近抽时间把一些处理视频的方法和经验写下来,一来做个记录,二来分享一下一起学习进步. ffmpeg -i D:\input ...

  5. java给视频添加水印_java如何给视频添加水印logo

    1.下载ffmpeg集成(静态)版本,解压后无需安装 链接:https://pan.baidu.com/s/1-a4lDqqJDRdX99500L6lIw 密码:qp8c CmdExecuter pa ...

  6. java在线制作视频,调用ffmpeg(一)

    目地:写一个java制作视频的网站. 大致流程:用户上传n张图片和背景音乐,网站返回一个视频. 大家都知道,java是通过命令行来调用ffmpeg的,java没有现成的比较好的封装ffmpeg的jar ...

  7. 如何给视频添加LOGO?

    其实在Vegas简体中文版中给自己的视频添加水印.logo的方法有很多: 一.使用(动态)图片 你可以使用PhotoShop或Vegas制作属于自己的一个LOGO图片,然后保存好导入到Vegas自己的 ...

  8. 怎么给视频加logo水印?操作简单易上手

    怎么给视频加logo水印?说到给视频添加水印可能会让很多人感到很麻烦,因为在大家的印象中给视频添加水印就是一项非常难的工作,首先需要使用到复杂的视频编辑软件,光学习使用视频编辑软件就需要花上大把的时间 ...

  9. 怎么批量给视频加logo水印?

    一些正式的视频在对外发布前一定要加上logo,例如公司对外发布的宣传片,自媒体从业者做的原创视频等,视频加上logo既能保护我们的知识产权防止视频被别人随意使用,又能加强视频的宣传效果,可见给视频添加 ...

最新文章

  1. Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换
  2. 计算机从业者的技术成长学习之路
  3. Helgrind:螺纹错误检测器
  4. webpack打包样式资源_使用loader去打包css文件_打包less文件---webpack工作笔记004
  5. TCP/UDP套接字网络协议
  6. php+mysql_msqli简单实例
  7. 【ICnet2018】ICNet for Real-Time Semantic Segmentation on High-Resolution Images
  8. 如何制作简单的html静态网页
  9. python获取域名对应的ip_Python实现通过解析域名获取ip地址的方法分析
  10. 一切还要从副总裁在朋友圈卖内裤说起
  11. Spring Boot进销存管理系统
  12. BeijingSubway
  13. 信号的Fourier分析的matlab编程
  14. django安装xadmin及问题处理
  15. 小米2S最新Android版本,小米2/2s如何刷Android 5.0?小米2s升级安卓5.0步骤
  16. 敏感词加解密与隐位处理
  17. 2021HW — 360天擎漏洞
  18. 双轴驱动步进电机云台二自由度单片机控制程序PTU57
  19. 用于汇报的几个视频编辑工具
  20. 见证海马S7手动型的高配置

热门文章

  1. 极速PDF阅读器有哪些快捷键?
  2. 智能计算机系统的概念,自动智能系统
  3. s7200cpu224xp手册_S7-200 CPU224XP 通讯连接不上
  4. 【软件工程师日语】04.邮件(1)
  5. 圣经究竟是一部什么书?
  6. 华为云CCI方式部署服务
  7. 同宿舍的程序员毕业五年的现状之女生宿舍篇
  8. jQuery酷炫网格相片墙动画效果
  9. sketch基础教程大全,对象、图层、画板常见技巧
  10. DNS实战 正反向解析,域名/IP地址解析