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. crontab linux

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  2. Postfix+Amavisd-new+Spamassassin+ClamAV整合安装

    1. 安装软件和依赖包 apt-get install amavisd-new spamassassin clamav-daemon mysql-client mysql-server apt-get ...

  3. SetDlgItemText控件运行错误

    SetDlgltem函数把一个WM_SETTEXT消息发送到指定的控件. 今天在测试一个小程序,发现使用SetDlgItemText控件编译没问题,但是运行就出错误. 语句为: time=CTime: ...

  4. 计算机视觉与模式识别代码合集第二版three

    计算机视觉与模式识别代码合集第二版three     Topic Name Reference code Optical Flow Horn and Schunck's Optical Flow   ...

  5. LeetCode——Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  6. 千万别用模板给的list.size()巨坑

    要用!list.empty()取代i<list.size();否则就不会AC了.

  7. 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区

    以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区 以正确的方式开源 Python 项目 英文原文:Open Sourcing a Python Project the Right ...

  8. Zigbee开发(1)

    只是研究zigbee的技术,也许后续的博客不会有很及时的更新,有时间 写一点东西能让大家有所收获吧. 环境搭建 Windows 64位的操作系统 IAR7.6 for 8051 ZStack CC25 ...

  9. Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click

    Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件.当点击目标DOM元素时触发ViewModel的对应方法.例如: 使用Click绑定 1 <div id=&q ...

  10. POJ 1724 ROADS(bfs最短路)

    n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路. 直接优先队列bfs暴力搞就行了,100*10000个状态而已.节点扩充的时候,dp[i][j]表示到达第i点花 ...