package com.d3.picture.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
public class FFmpegCmdExecuter {
private static final Logger logger = Logger.getLogger(FFmpegCmdExecuter.class);
public static String FFMPEG = "ffmpeg";
/**
* mp3 to amr
* @param src
* @param dest
*/
public static void mp3ToAmr(String src ,String dest){
logger.info("mp3 to amr:" + dest);
List<String> cmd = new ArrayList<String>();
cmd.add(FFMPEG);
cmd.add("-i");
cmd.add(src);
cmd.add("-ac");
cmd.add("1");
cmd.add("-ar");
cmd.add("8000");
cmd.add(dest);
exec(cmd);
}
/**
* wav to mp3
* @param src
* @param dest
*/
public static void wavToMp3(String src,String dest){
logger.info("wav to mp3:"+dest);
List<String> cmd = new ArrayList<String>();
cmd.add(FFMPEG);
cmd.add("-i");
cmd.add(src);
cmd.add("-acodec");
cmd.add("libmp3lame");
cmd.add(dest);
exec(cmd);
}
/**
* amr to mp3
* @param src
* @param dest
*/
public static void amrToMp3(String src ,String dest){
logger.info("amr to mp3:"+dest);
List<String> cmd = new ArrayList<String>();
cmd.add(FFMPEG);
cmd.add("-i");
cmd.add(src);
cmd.add(dest);
exec(cmd);
}
/**
* 执行指令
* @param cmd 执行指令
*/
public static void exec( List<String> cmd){
BufferedReader stdout = null;
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(cmd);
builder.redirectErrorStream(true);
Process proc = builder.start();
stdout = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
String line;
while ((line = stdout.readLine()) != null) {
logger.debug(line);
}
proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}finally{
IOUtils.closeQuietly(stdout);
}
}
/**
* 根据水印图片给视频加水印
* @param src
* @param dest
* @param water
* @param wmPosition
* @param alpha
* @param wmPosition
* @return
*/
public static void videoWater(String src,String dest,String water,int wmPosition, float alpha,String platform) {
List<String> cmd = new ArrayList<String>();
cmd.add(FFMPEG);
cmd.add("-i");
cmd.add(src);
cmd.add("-i");
cmd.add(water);
cmd.add("-filter_complex");
cmd.add("''overlay=main_w-overlay_w:main_h-overlay_h''");
cmd.add("-strict");
cmd.add("-2");
if(NumberUtils.toInt(platform, 0)==3){
cmd.add("-ar");
cmd.add("8000");
}
cmd.add("-b");
cmd.add("877k");
cmd.add("-qscale");
cmd.add("0.01");
cmd.add(dest);
exec(cmd);
}
/**
* 根据水印图片给视频加水印
* @param src
* @param dest
*/
public static void videoPic(String src,String dest) {
List<String> cmd = new ArrayList<String>();
cmd.add(FFMPEG);
cmd.add("-i");
cmd.add(src);
cmd.add(dest);
exec(cmd);
}
}