视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现)

//视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现)

import java.util.ArrayList;

import java.util.List;

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

public class VideoProcess {

System.out.println(oldfilepath+"->"+newfilename+"->"+newimg);

List<String> commendF = new ArrayList<String>();

List<String> commendI=new java.util.ArrayList<String>();

commendF.add("D:\\tools\\mencoder\\mencoder");

commendF.add(oldfilepath);

commendF.add("-o");

commendF.add(newfilename);

commendF.add("-of");

commendF.add("lavf");

commendF.add("-oac");

commendF.add("mp3lame");

commendF.add("-lameopts");

commendF.add("abr:br=32:vol=1");

commendF.add("-srate");

commendF.add("22050");

commendF.add("-ovc");

commendF.add("lavc");

commendF.add("-lavcopts");

commendF.add("vcodec=flv:vbitrate=480:mbd=2:v4mv:turbo:vb_strategy=1:last_pred=2:trell");

commendF.add("-vf");

commendF.add("scale=400:226");

commendI.add("d:\\tools\\ffmpeg");

commendI.add("-i");

commendI.add(oldfilepath);

commendI.add("-y");

commendI.add("-f");

commendI.add("image2");

commendI.add("-ss");

commendI.add("8");

commendI.add("-t");

commendI.add("0.001");

commendI.add("-s");

commendI.add("100x100");

commendI.add(newimg);

try {

ProcessClass.exec(commendF);

ProcessClass.exec(commendI);

return true;

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

public static void main(String[] args){

String oldfilepath = "D:\\video\\a1.avi";

String newfilename = "D:\\video\\a1.flv";

String newimg = "D:\\video\\a1.jpg";

processTransToImg2(oldfilepath,newfilename,newimg);

System.out.println("over");

}

}

ProcessClass.java

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ProcessClass{

public List<String> commendList = new ArrayList<String>();

public ProcessClass(List<String> commendList){

this.commendList = commendList;

}

//同步使只能有一个进程执行该方法(实现格式转换进程完成后执行截图进程操作)

public static synchronized Process exec(List<String> commendlist){

StringBuffer strBuf = new StringBuffer();

for(Iterator iter =commendlist.iterator();iter.hasNext(); ){

String Strtemp = (String)iter.next();

strBuf.append(Strtemp);

strBuf.append(" ");

}

try {

return Runtime.getRuntime().exec(strBuf.toString());

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

}

这并不是完善的程序,还存在一些问题:

1、 由于对于ffmpeg中的命令参数我并不是很了解,对于命令中的参数值并不是最优的选择,我在运行过程中出现转换后的文件大小还大于原文件。

2、 如果当你转换后没有看到生成图片,则你可以尝试修改

commendI.add("100x100"); 这个里面的值。

当我在程序中设置为100x75就不会生成图片,而当设置为100x100就可以看到图片生成出来了。

网上看到有一个朋友给的实例中设置为320X240,不过在我的项目感觉图片太大了,影响了整体的美观。你可以自己尝试一下。

你可能感兴趣的:(java,xml,Microsoft,Office,vb)