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);

      }  

}