libavcodec: 用于各种类型声音/图像编解码
libavutil: 包含一些公共的工具函数
libavformat: 包含多种多媒体容器格式的封装丶解封装工具
libswscale: 用于视频场景的比例缩放丶色彩映射转换
libpostproc: 用于后期效果处理
libavdevice: 用于音视频数据采集和渲染等功能的设备相关
ibswresample: 用于音频重采样和格式转换等功能
libavfilter: 包含多媒体处理常用的滤镜功能

ffmpeg的官方网站是:http://ffmpeg.org/
编译好的windows可用版本的下载地址(和官网保持同步):http://ffmpeg.zeranoe.com/builds/

该网站中的FFMPEG分为3个版本:Static,Shared,Dev

前两个版本都可以直接在命令行使用:

Static:只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe。每个exe的体积都很大,相关的Dll都已经被编译到exe里面去了。
Shared : 除了上面那三个exe之外,还有一些Dll,比如avcodec-54.dll之类的。shared里面的exe体积很小,他们运行时到相应的Dll中调用功能。
Dev : 用于开发,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。

ffmpeg :该项目提供的一个工具,可用于格式转换丶解码或电视卡即时编译等。
ffprobe : ffprobe是用于查看文件格式的应用程序。
ffplay :是一个简单的播放器,使用ffmpeg库解析和解码,通过SDL显示
ffserver :一个HTTP多媒体即时广播串流服务器。

常用命令集

  1. 获取视频的信息
    ffmpeg -i video.avi

  2. 将图片序列合成视频
    ffmpeg -f image2 -i image%d.jpg video.mpg
    上面的命令会把当前目录下的图片(名字如:image1.jpg, image2.jpg等..)合成video.mpg

  3. 将视频分解成图片序列
    ffmpeg -i video.mpg image%d.jpg
    上面的命令会生成image1.jpg,image2.jpg…
    支持的图片格式有:PGM,PPM,PAM,PGMYUV,JPEG,GIF,PNG,TIFF,SGI

  4. 为视频重新编码以适合在ipod/iphone上播放
    ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4
    说明:

    1
    2
    3
    4
    5
    6
    7
    - 源视频:source_vidro.avi
    - 音频编码:aac
    - 音频位率:128kb/s
    - 视频编码:mpeg4
    - 视频位率:1200kb/s
    - 视频尺寸:320 X 180
    - 生成的视频:final_video.mp4
  5. 为视频重新编码以适合在PSP上播放
    ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.np4
    说明:

    1
    2
    3
    4
    5
    6
    7
    + 源视频:source_video.avi
    + 音频编码:aac
    + 音频位率:32kb/s
    + 视频编码:xvid
    + 视频位率:1200kb/s
    + 视频尺寸:320 X 180
    + 生成的视频:final_video.mp4
  6. 从视频抽出声音。并存为Mp3
    ffmpeg -i source_video.avi -vn -ar44100 -ac 2 -ab 192 -f mp3 sound.mp3
    说明:

    1
    2
    3
    4
    * 源视频:source_video.avi
    * 音频位率:192kb/s
    * 输出格式:mp3
    * 生成的声音:sound.mp3
  7. 将wav文件转成Mp3
    ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

  8. 将.avi视频转成.mpg
    ffmpeg -i video_origine.avi video_finale.mpg

  9. 将.mpg转成.avi
    ffmpeg -i video_origine.mpg video_finale.avi

  10. 将.avi转成gif动画(未压缩)
    ffmpeg -i video_origine.avi gif_anime.gif

  11. 合成视频和音频
    ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

  12. 将.avi转成.flv
    ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

  13. 将.avi转成dv
    ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

    ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

  14. 将.avi压缩成divx
    ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

  15. 将Ogg Theora 压缩成Mpeg dvd
    ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg

  16. 将.avi压缩成SVCD mpeg2
    NTSC格式:
    ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg
    PAL格式:
    ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

  17. 将.avi压缩成VCD mpeg2
    NTSC格式:
    ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg
    PAL格式:
    ffmpeg -i video_origine.avi -traget pal-vcd video_finale.mpg

  18. 多通道编码
    ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

  19. 从flv提取mp3
    ffmpeg -i source.flv -ab 128k dest.mp3

##win下编译ffmpeg3.3

  1. 下载安装MinGW
  2. 下载yasm
  3. ffmpeg
  1. 编辑ffmpeg文件夹下面的configure文件,找到
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
    SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
    将其修改成:
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
    SLIB_INSTALL_LINKS='$(SLIBNAME)'

  1. 新建build_android.sh文件
    注意:要根据环境配置的前四项,且每行末尾不能有空格。export TMPDIR,NDK,SYSROOT,TOOLCHAIN-cross-prefix 一定有
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #!/bin/bash
    export TMPDIR="D:\ffmpeg\tmp"
    NDK=D:\/sdk\/ndk-bundle
    SYSROOT=$NDK/platforms\/android-24\/arch-arm/
    TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
    function build_one {
    ./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make
    make install
    }
    CPU=arm
    PREFIX=$(pwd)/android/$CPU
    ADDI_CFLAGS="-marm"
    build_one

然后在MinGW中cd进ffmpeg目录。
命令:

chomd 777 ./build_android.sh
./build_android.sh 开始编译

编译完成后在FFmpeg下会多一个Android文件夹。