Linux环境下java调用ffmpeg命令进行视频转码

1.这是在Linux系统下的代码,我运行后可以转换成功:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;

public class Test {
	public static void main(String[] args) {
		List<String> commend = new ArrayList<String>();
		commend.add("/usr/local/ffmpeg2/bin/./ffmpeg"); 
	     commend.add("-i");
	     commend.add("/opt/spzh/yysp.avi");
	     commend.add("-ab");    
	     commend.add("128");    
	     commend.add("-acodec");    
	     commend.add("libfaac");    
	     commend.add("-ac");    
	     commend.add("1");    
	     commend.add("-ar");    
	     commend.add("22050");    
	     commend.add("-r");    
	     commend.add("24");   
	     commend.add("-y");    
	     commend.add("/opt/spzh/out/yysp18.flv");
	     StringBuffer test=new StringBuffer();    
	     for(int i=0;i<commend.size();i++)    
		test.append(commend.get(i)+" ");    
		System.out.println(test);     
	       try {
			  Runtime rt = Runtime.getRuntime();
                          Process proc = rt.exec(test.toString());
			  InputStream stderr = proc.getErrorStream();
			  InputStreamReader isr = new InputStreamReader(stderr);
			  BufferedReader br = new BufferedReader(isr);
			  String line = null;
			  while ( (line = br.readLine()) != null);
		
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("视频转换成功");
	}
}


2.这是在Windows下面的代码,在网上找了很多资料说这种在Linux中也能用,但是我自己在Linux系统下运行改代码时发现,该代码视频转换的时候只能转换一部分,举个例子:原视频有7M,直接在Linux下执行装换命令是正常的,而用该java代码执行该命令时视频只能转换1M;而且转换成MP4的时候,视频无法播放。

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;

public class Test1 {
	public static void main(String[] args) {
		List<String> commend = new ArrayList<String>();
		commend.add("/usr/local/ffmpeg2/bin/./ffmpeg"); 
	     commend.add("-i");
	     commend.add("/opt/spzh/yysp.avi");
	     commend.add("-ab");    
	     commend.add("128");    
	     commend.add("-acodec");    
	     commend.add("libfaac");    
	     commend.add("-ac");    
	     commend.add("1");    
	     commend.add("-ar");    
	     commend.add("22050");    
	     commend.add("-r");    
	     commend.add("24");   
	     commend.add("-y");    
	     commend.add("/opt/spzh/out/yysp22.flv");
	     StringBuffer test=new StringBuffer();    
		  for(int i=0;i<commend.size();i++)    
			  test.append(commend.get(i)+" ");    
		 System.out.println(test);   
	         ProcessBuilder builder = new ProcessBuilder();
	         builder.command(commend);
	try {
		    builder.redirectErrorStream(true);
		    builder.start();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		  System.out.println("视频转换成功");
	    }

}

x

下面是转换为flv格式和mp4格式的Linux命令:

    (1)转flv

./ffmpeg -i /opt/spzh/yysp.avi -ab 128 -acodec libfaac -ac 1 -ar 22050 -r 24 -y /opt/spzh/out/yysp9.flv

    (2)转mp4

./ffmpeg -i /opt/spzh/yysp.avi -f mp4 -acodec libfaac -vcodec libxvid -qscale 7 -dts_delta_threshold 1 -y /opt/spzh/out/yysp8.mp4





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值