0
点赞
收藏
分享

微信扫一扫

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

//视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现)
import java.util.ArrayList;
import java.util.List;
 
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; 
  
importjava.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 
  
         String Strtemp = (String)iter.next(); 
  
         strBuf.append(Strtemp); 
  
         strBuf.append(" "); 
  
      } 
  
       
  
      try { 
  
       returngetRuntime().exec(strBuf.toString()); 
  
    } catch (IOException e) { 
  
       e.printStackTrace(); 
  
       return null; 
  
    } 
  
  } 
  
}

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

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

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

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

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

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

举报

相关推荐

0 条评论