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

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

时间:2023-09-07 14:37:29浏览次数:40  
标签:java commendI 缩略图 commendF List flv util add 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,不过在我的项目感觉图片太大了,影响了整体的美观。你可以自己尝试一下。

标签:java,commendI,缩略图,commendF,List,flv,util,add,Java
From: https://blog.51cto.com/u_2544485/7396855

相关文章

  • 用javascript修改下拉框中的selected值
    functionchangeSelected(selValue){varobj=document.getElementById("selectname");for(vari=0;i<obj.length;i++){obj.options[i].selected=false;if(obj.options[i].value==selValue){obj.opti......
  • 使用 MMAnalyzer 发现内存不足 (out of memory java heap)解决方法
    解决办法:打开MyEclipse的RUN加一个-Xmx256m,使最大使用内存为256M,就可以了 ......
  • Think in Java 4th--Java中的volatile
    我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程......
  • Java中 static/transient,final/volatile 说明
    你可以任意使用如下的修改限定关键字来定义一个字段:final或者volatile和/或者static和/或者transient。如果你将一个字段定义为final,编译器将确保字段当成一个常量——只读变量来初始化和处理。因为编译器知道常量是不变的,所以在程序的字节码中对其进行了内部优化。cl......
  • 从追MM谈Java的23种设计模式
    1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory.以下是引用片段:实例一:publicclassFactory{......
  • 杰哥教你面试之一百问系列:java中高级多线程concurrent的使用
    目录问题1:什么是ConcurrentHashMap?它与HashMap的区别是什么?问题2:什么是CopyOnWriteArrayList?它适用于什么样的场景?问题3:什么是BlockingQueue?它的作用是什么?举例说明一个使用场景。问题4:什么是Semaphore?它如何控制并发访问?问题5:什么是CountDownLatch?它适用于什么场景?问题6:什么是Cyc......
  • java多线程几个方法的基本概念
    一、run()和start()这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用run()方法,这是由Java的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.二、关键字Synchronized这个关键字用于保护共享数据,当然......
  • 无涯教程-JavaScript - BITAND函数
    描述BITAND函数返回两个数字的按位"AND"。语法BITAND(number1,number2)争论Argument描述Required/Optionalnumber1Mustbeindecimalformandgreaterthanorequalto0.Requirednumber2Mustbeindecimalformandgreaterthanorequalto0.Required......
  • Java的System.setProperty()和System.getProperty()
    写在前面:这里的System,系统指的是JRE(runtime)system,不是指OS。参数设置成为系统的全局变量,可以在项目的任何一个地方,通过System.getProperty("变量");来获得。System.setProperty相当于一个静态变量,存在内存里面!System.setProperty()/* *设置指定键对值的系统属性 *......
  • java内容偏多 一般有用 看1
                              ......