ffmpeg 视频压缩

1.ffmpeg安装

首先下载ffmpeg我使用的是2.0.1版本。

wget http://ffmpeg.org/releases/ffmpeg-2.0.1.tar.g

下载后解压,解压后使用命令:

./configure --enable-shared  --disable-yasm  --prefix=/usr/local/ffmpeg

 (注意:因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE,所以需要yasm汇编编译器,我这里禁止了汇编使用)
  其中:--enable-shared 是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录

运行

make && make install

完成安装。

2.配置ffmpeg环境:

 vi /etc/profile

添加

export FFMPEG_HOME=/usr/local/ffmpeg 
export PATH=$FFMPEG_HOME/bin:$PATH


vi /etc/ld.so.conf

在末尾加上一句话:/usr/local/ffmpeg/lib

执行命令使修改生效

ldconfig -v

修改/usr/local/ffmpeg/lib目录下的文件权限为777:

3.压缩视频命令:

ffmpeg -i index.mp4 -b 800k -s 320x200 -strict -2 final.mp4

-i后边为要压缩的视频

-n后边为压缩码率

-s为分辨率

最后为视频的输出名字

 4.java 代码调用ffmpeg获取图片

  // 视频缩略图截取 
 // inFile
 输入文件(包括完整路径) 
 // outFile
输出文件(可包括完整路径)
 public static
boolean transfer(String inFile, String outFile)
{ 
 String command =
"ffmpeg -i " + inFile + " -y -f image2 -ss 00:00:10 -t 00:00:01 -s
176x144 " + outFile; 
 try
{ 
 Runtime rt =
Runtime.getRuntime(); 
 Process proc =
rt.exec(command); 
 InputStream
stderr =
proc.getErrorStream(); 
 InputStreamReader isr = new
InputStreamReader(stderr); 
 BufferedReader
br = new
BufferedReader(isr); 
 String line =
null; 
 while ((line =
br.readLine()) != null) 
 System.out.println(line);
  } catch (Throwable
t) { 
 t.printStackTrace(); 
 return
false; 
  } 
  return
true; 
  }

更加丰富的java操作

import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;
public class MediocreExecJavac
{
//运行命令
public void runCmd(String command){
  try
        {           
            Runtime rt = Runtime.getRuntime();
   Process proc = rt.exec(command);
   InputStream stderr = proc.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            System.out.println("<ERROR>");
            while ( (line = br.readLine()) != null)
                System.out.println(line);
            System.out.println("</ERROR>");
            int exitVal = proc.waitFor();
            System.out.println("Process exitValue: " + exitVal);
        } catch (Throwable t)
  {
   t.printStackTrace();
  }
}
//视频转码,infile输入文件(包括完整路径),outfile输出文件
public boolean transfer(String infile,String outfile){
  String avitoflv = "ffmpeg -i "+infile+" -ar 22050 -ab 56 -f flv -y -s 320x240 "+outfile;
  String
 flvto3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb 
-vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
  String 
avito3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb 
-vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
  //avi -> jpg
  String avitojpg = "ffmpeg -i " + infile + " -y -f image2 -ss 00:00:10 -t 00:00:01 -s 350x240 " + outfile;
  try
        {           
            Runtime rt = Runtime.getRuntime();
   Process proc = rt.exec(avitoflv);
   InputStream stderr = proc.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            System.out.println("<ERROR>");
            while ( (line = br.readLine()) != null)
                System.out.println(line);
            System.out.println("</ERROR>");
            int exitVal = proc.waitFor();
            System.out.println("Process exitValue: " + exitVal);
        } catch (Throwable t)
  {
   t.printStackTrace();
   return false;
  }
  return true;
}
//读取文件,fileName输入文件,id行数
public static String readFile(String fileName,int id)
{
  String dataStr = "";
  FileInputStream fis = null;
  try
  {
   FileReader file = new FileReader(fileName);//建立FileReader对象,并实例化为fr
   BufferedReader br=new BufferedReader(file);//建立BufferedReader对象,并实例化为br
   int i=1;
   String Line=br.readLine();//从文件读取一行字符串
   //System.out.println("Line1="+Line+"="+Line);
   //判断读取到的字符串是否不为空
   //while(Line!=null){
    //System.out.println(Line + "<br>");//输出从文件中读取的数据
    //if(i==line){dataStr=Line;break;}else{i=i+1;}
    //Line=br.readLine();//从文件中继续读取一行数据
   //}
   dataStr=Line;
   br.close();//关闭BufferedReader对象
  }
  catch(Exception e){
  }finally{
   try
   {
    if(fis!=null)
       fis.close();
   }catch(Exception e){}
  }
  return dataStr;
   }
   //读时长信息
public String readtime(String file)
{
  String str="/opt/cgogo/test/info.txt";
  String timelen = "";
  String cmd = "timelen "+file;
  runCmd(cmd);
  timelen=readFile(str,1);
  return timelen;
}
    public static void main(String args[])
    {
  MediocreExecJavac me = new MediocreExecJavac();
  String infile = "/opt/cgogo/test/02.avi";
  String outfile = "01.flv";
//时长
  String timelen = me.readtime(infile);
  System.out.println("02.avi timelen is :" + timelen);
  //转码
  if(me.transfer(infile,outfile)){
   System.out.println("the transfer is ok!");
  }else{
   System.out.println("the transfer is error!");
  }
    }
}


初次使用,如有错误请指教!













转载于:https://my.oschina.net/hanjiafu/blog/293289

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值