1.简介
    FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转档、流功能。

2.下载
    源代码 git://git.libav.org/libav.git
    Windows编译版 http://ffmpeg.zeranoe.com/builds/
    下载最新版(lastest),可以下载static的build。用到压缩包里的bin文件夹里的ffmpeg.exe。

3.ffmpeg基本命令:
    FFmpeg命令很多,如果你是在windows下开发的话,打开命令行,先进入你下载的FFmpeg.exe目录(cd……),输入ffmpeg -h即可查看各种命令。
下面就说说我们会用到的命令

格式转换 (将file.avi 转换成output.flv)
ffmpeg -i  file.avi   output.flv

现在有个视频video.avi,有个音频 audio.mp3,将其合并成output.avi
两个命令                     ( video2.avi 是中间文件 ,用完可删)
ffmpeg -i video.avi -vcodec copy -an video2.avi  
ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi
 -i 表示输入文件
  -vcodec copy 表示 force video codec ('copy' to copy stream) 这个不知怎么译 ,估计是直接copy
  -acodec copy   这个说的应该是音频了   跟上面一样
-an : 表示  disable audio  估计是audio no 之类的缩写   表示去掉video.avi 原有的音频

方法2 好像可以直接指定两个输入文件 ,
ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi 两个文件 的顺序很重
 
 
4.ffmpeg和java的结合
转自:http://blog.csdn.net/jimzhai/article/details/7853005
 
Java代码  收藏代码
import java.io.File; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.List; 
 
public class ConvertVideo { 
  
    private final static String PATH = "c:\\ffmpeg\\input\\c.mp4"; 
  
    public static void main(String[] args) { 
        if (!checkfile(PATH)) { 
            System.out.println(PATH + " is not file"); 
            return;  
        }  
        if (process()) { 
            System.out.println("ok"); 
        }  
    }  
  
    private static boolean process() { 
        int type = checkContentType(); 
        boolean status = false; 
        if (type == 0) { 
            System.out.println("直接将文件转为flv文件"); 
            status = processFLV(PATH);// 直接将文件转为flv文件 
        } else if (type == 1) { 
            String avifilepath = processAVI(type);  
            if (avifilepath == null) 
                return false;// avi文件没有得到 
            status = processFLV(avifilepath);// 将avi转为flv 
        }  
        return status; 
    }  
  
    private static int checkContentType() { 
        String type = PATH.substring(PATH.lastIndexOf(".") + 1, PATH.length()) 
                .toLowerCase();  
        // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 
        if (type.equals("avi")) { 
            return 0; 
        } else if (type.equals("mpg")) { 
            return 0; 
        } else if (type.equals("wmv")) { 
            return 0; 
        } else if (type.equals("3gp")) { 
            return 0; 
        } else if (type.equals("mov")) { 
            return 0; 
        } else if (type.equals("mp4")) { 
            return 0; 
        } else if (type.equals("asf")) { 
            return 0; 
        } else if (type.equals("asx")) { 
            return 0; 
        } else if (type.equals("flv")) { 
            return 0; 
        }  
        // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 
        // 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. 
        else if (type.equals("wmv9")) { 
            return 1; 
        } else if (type.equals("rm")) { 
            return 1; 
        } else if (type.equals("rmvb")) { 
            return 1; 
        }  
        return 9; 
    }  
  
    private static boolean checkfile(String path) { 
        File file = new File(path); 
        if (!file.isFile()) { 
            return false; 
        }  
        return true; 
    }  
  
    // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. 
    private static String processAVI(int type) { 
        List<String> commend = new ArrayList<String>(); 
        commend.add("c:\\ffmpeg\\mencoder"); 
        commend.add(PATH);  
        commend.add("-oac"); 
        commend.add("lavc"); 
        commend.add("-lavcopts"); 
        commend.add("acodec=mp3:abitrate=64"); 
        commend.add("-ovc"); 
        commend.add("xvid"); 
        commend.add("-xvidencopts"); 
        commend.add("bitrate=600"); 
        commend.add("-of"); 
        commend.add("avi"); 
        commend.add("-o"); 
        commend.add("c:\\ffmpeg\\output\\a.avi"); 
        try {  
            ProcessBuilder builder = new ProcessBuilder(); 
            builder.command(commend);  
            builder.start();  
            return "c:\\ffmpeg\\output\\a.avi"; 
        } catch (Exception e) { 
            e.printStackTrace();  
            return null; 
        }  
    }  
  
    // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 
    private static boolean processFLV(String oldfilepath) { 
  
        if (!checkfile(PATH)) { 
            System.out.println(oldfilepath + " is not file"); 
            return false; 
        }  
          
        // 文件命名  
        Calendar c = Calendar.getInstance();  
        String savename = String.valueOf(c.getTimeInMillis())+ Math.round(Math.random() * 100000); 
        List<String> commend = new ArrayList<String>(); 
        commend.add("c:\\ffmpeg\\ffmpeg"); 
        commend.add("-i"); 
        commend.add(oldfilepath);  
        commend.add("-ab"); 
        commend.add("56"); 
        commend.add("-ar"); 
        commend.add("22050"); 
        commend.add("-qscale"); 
        commend.add("8"); 
        commend.add("-r"); 
        commend.add("15"); 
        commend.add("-s"); 
        commend.add("600x500"); 
        commend.add("c:\\ffmpeg\\output\\a.flv"); 
  
        try {  
            Runtime runtime = Runtime.getRuntime();  
            Process proce = null; 
            String cmd = ""; 
            String cut = "     c:\\ffmpeg\\ffmpeg.exe   -i   " 
                    + oldfilepath  
                    + "   -y   -f   image2   -ss   8   -t   0.001   -s   600x500   c:\\ffmpeg\\output\\" 
                    + "a.jpg"; 
            String cutCmd = cmd + cut;  
            proce = runtime.exec(cutCmd);  
            ProcessBuilder builder = new ProcessBuilder(commend); 
             builder.command(commend);  
            builder.start();  
  
            return true; 
        } catch (Exception e) { 
            e.printStackTrace();  
            return false; 
        }  
    }  
}

[置顶] ffmpg简介以及用它实现音频视频合并(java)的更多相关文章

  1. wordpress调用置顶文章sticky_posts的三种方法

    有时我们在开发wordpress时需要调用置顶文章sticky_posts,怎么调用呢?几种写法,有用到query_post的,有用到WP_Query,也有用到is_sticky(),下面随ytkah ...

  2. 在UWP中页面滑动导航栏置顶

    最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...

  3. WinFrom窗体始终置顶

    调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...

  4. winform窗体置顶

    winform窗体置顶 金刚 winform 置顶 今天做了一个winform小工具.需要设置置顶功能. 网上找了下,发现百度真的很垃圾... 还是必应靠谱些. 找到一个可以链接. https://s ...

  5. 自定义置顶TOP按钮

    简述一下,分为三个步骤: 1. 添加Html代码 2. 调整Css样式 3. 添加Jquery代码 具体代码如下: <style type="text/css"> #G ...

  6. ahk之路:利用ahk在window7下实现窗口置顶

    操作系统:win7 64位 ahk版本:autohotkey_L1.1.24.03 今天安装了AutoHotkey_1.1.24.03.SciTE.PuloversMacroCreator,重新开始我 ...

  7. Qt中让Qwidget置顶的方法

    一般来是说窗体置顶和取消只要        setWindowFlags(Qt::WindowStaysOnTopHint);        setWindowFlags(Qt::Widget); 要 ...

  8. js之滚动置顶效果

    0.js获取高度 ? 1 2 3 4 5 6 document.all   // 只有ie认识   document.body.clientHeight              // 文档的高,屏幕 ...

  9. Javascript笔记----实现Page页面右下角置顶按钮.

    从用博客开始,发现博客园中很多博友的博客中在Page右下角都有个图标,不论屏幕怎么拉伸,都始终停留在右下角.点击后页面置顶.后面想想写一个Demo来实现这种效果吧. 一. 图标右下角固定. 1.SS ...

随机推荐

  1. [置顶] 自己动手写Web容器之TomJetty之六:动态页面引入

    传送门 ☞ 1.Web服务内功经脉 传送门 ☞ 2.让服务动起来 传送门 ☞ 3.掀起请求盖头来 传送门 ☞ 4.静态页面起步 传送门 ☞ 5.包装请求参数 在上一节,我们已经完成了TomJetty服 ...

  2. POJ 2112 Optimal Milking【网络流+二分+最短路】

    求使所有牛都可以被挤牛奶的条件下牛走的最长距离. Floyd求出两两节点之间的最短路,然后二分距离. 构图: 将每一个milking machine与源点连接,边权为最大值m,每个cow与汇点连接,边 ...

  3. 【COCOS2DX-游戏开发之三三】TMX边界控制与小窗体内预览TMX

    做一款像素游戏,须要确定地图的边界.保证人物的位置位于屏幕中央.到达地图左边界.地图位置不变.人向左走,到达右边界,地步位置不变,人向右走 如:地图左边.右边,上边空出的边界.还有下方留出操作butt ...

  4. 从WinMain开始

    一.抽象渗漏法则 根据Joel的抽象渗漏法则,所有重大的抽象机制在某种程度上都是有漏洞的.Joel举过一个例子: C++字符串类型应该能让你假装字符串是个基本类型,它们尝试“字串很难处理”这个事实抽象 ...

  5. ISO/OSI网络体系结构和TCP/IP协议模型

    1. ISO/OSI的参考模型共有7层,由低层至高层分别为:物理层.数据链路层.网络层.传输层.会话层.表示层.     应用层.各层功能分别为: (1)物理层          提供建立.维护和拆除 ...

  6. oracle查询语句中case when的使用

    case when语句语法如下: case when  表达式  then valueA  else valueB  end; 具体使用如下: select    (case when a.colum ...

  7. ONVIFclient搜索设备获取rtsp解决开发笔记(精华文章)

    总结:           眼下ONVIF协议系列设备已经超过一半的数字监控行业占据更多,关闭,作为一个开发者,你还在犹豫下就明白了?本文介绍了ONVIFclient从搜索,认证,获取,媒体信息获取. ...

  8. ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

    首先要导入AVFoundation框架及 #import <AVFoundation/AVFoundation.h>头文件 注意:要在真机上调试 下面是ipad上的调试效果 下面是代码,代 ...

  9. 蜗牛—JSONJ学习ava转变

    最近,写网站管理员,使用异步通信技术,所使用的方法是JSON数据传输模式 需要以下jar文件 然后,自己写了一点点经常使用代码 Java的List和数组要用JSONArray对象 Map和实体用JSO ...

  10. poj-2195-Going Home最小费用最大流

    重新切一遍最小费用最大流~~~ 这到题目的数据范围有问题,尽量开大就好了~~ #include<stdio.h> #include<iostream> #include< ...