zoukankan      html  css  js  c++  java
  • 编译:ffmpeg,精简ffmpeg.exe

    网上下载的各种 ffmpeg.exe ,最少都有11M+

    而我只需要处理 mp4 和 mp3,在网上搜索了一下精简ffmpeg的文章,折腾一天,也没有完全搞定,但多少有些收获,记录一下:

    从 www.ffmpeg.org 下载 ffmpeg 最新源码代码。

    libx264, libxvid, libmp3lame, libvo-aacenc 都需要下载源代码进行编译,我将编译后都保存到 /msys/static/

    /c/open_source/lame-3.99.5 (下载地址:http://lame.sourceforge.net)

    下载http://jaist.dl.sourceforge.net/project/nasm/Win32 binaries/2.07/nasm-2.07-installer.exe,

      然后改名为nasm.exe然后复制到/msys/bin目录下

    configure --disable-shared --enable-static --prefix=/static

    /c/open_source/x264   (下载地址:http://www.videolan.org/developers/x264.html)

    configure --enable-static [我没加这个,也不知道要不要加:--enable-win32thread] --prefix=/static

    /c/open_source/xvidcore-1.3.3/build/generic  (下载地址: http://downloads.xvid.org/downloads/xvidcore-1.3.3.tar.gz )

    configure --enable-static --prefix=/static

    (我编译ffmpeg时,没使用 xvid)

    /c/open_source/vo-aacenc-0.1.3 (下载地址:http://sourceforge.net/projects/opencore-amr/files/vo-aacenc/) (看别人都使用这个)

    configure --disable-shared --enable-static --prefix=/static

    在编译ffmpeg前, 通过命令:configure --help,可查看可配置的参数

    通过命令: configure --list-decoders,显示可用的解码器列表

    通过命令: configure --list-encoders,显示可用的编码器列表

    我目前只需要解编码mp3, 需要使用 mjpeg, 和 h264等。

    经过两天的不断测试和失败,终于获取一个较小的ffmpeg.exe (8.54M)

    精简思路:先禁用所有解码器(--disable-encoders)和编码器(--disable-decoders),然后再开启需要的解码器和编码器。

    命令:

    configure --enable-static --disable-shared --enable-version3 --enable-gpl --enable-memalign-hack --disable-w32threads  --disable-encoders --enable-encoder=aac --enable-encoder=libmp3lame --enable-encoder=libvo_aacenc --enable-encoder=libx264   --enable-encoder=y41p --enable-encoder=yuv4 --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=mjpeg --enable-decoder=y41p --enable-decoder=mp3 --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --disable-doc --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --extra-cflags=-I/static/include --extra-ldflags=-L/static/lib --prefix=/local/ffmpeg-sdk

    这里的 --enable-encoder=libx264 和 --enable-libx264 也就代替了(--enable-encoder=mpeg4)。

    之前测试过多次,如果使用--enable-encoder=mpeg4,生成的mp4文件很大,并且画质很差)

    如果加上参数: --enable-small, 生成的ffmpeg.exe 会缩小1.5M左右,这个参数是优化压缩文件,有可能会降低性能)

    编译后,使用 ffmpeg.exe 时,经常提示:

    Use -pix_fmt yuv420p for compatibility with outdated media players.(使用-pix_fmt YUV420P与过时的媒体播放器兼容。)

    测试时发现,如果输出的视频尺寸:800 x 800, 输出后的视频文件双击打开,看不到图像,一片黑。

    我试着加上 -pix_fmt yuv420p, 再输出 800 x 800的视频,就能正常看到图像了。

    我以前使用过别人在2011年左右编译的ffmpeg.exe,不会提示这样的信息。

    使用 ffmpeg.exe时,还提示:

    [mjpeg @ 0172afc0] Warning: not compiled with thread support, using thread emulation(警告:不支持线程编译,使用线程模拟)

    [mp3 @ 017632e0] Warning: not compiled with thread support, using thread emulation

    我使用以前别人编译的ffmpeg,也不会出现这样的提示。

    ffmpeg 编译的时候, make 一次,花费了20多分钟

    ---------------------------------------------------------------------------------------------

    ffmpeg -codecs 查询编解码配置:

    第一个D表示Decoder,该格式能够解码;

    E表示Encoder,该格式可以编码。

    DEA D  mp2             MP2 (MPEG audio layer 2)
    D A D  mp2float        MP2 (MPEG audio layer 2)
    D A D  mp3             MP3 (MPEG audio layer 3)

    上面的 DEA D  mp2 表示: mp2支持编码和解码。

    D A D  mp3 表示: mp3只支持解码。

    ---------------------------------------------------------------------------------------------

    相关的文章:

    windows下使用MinGW+msys编译ffmpeg   http://www.cnblogs.com/zjoch/archive/2013/05/14/3077953.html

    ffmpeg的编译大全  http://www.cnblogs.com/MaxIE/archive/2007/02/03/638863.html

    ffmpeg的精简 http://blog.csdn.net/hevc_cjl/article/details/8680933

    ffmpeg编译(一) http://blog.csdn.net/jxfengzi/article/details/7365300

    ffmpeg ./configure参数说明  http://blog.163.com/cgq_i/blog/static/728779232011643431105/

    2014-07-31

  • 相关阅读:
    css3 box-sizing盒模型
    数字递增组件
    设置视频水平垂直居中显示在页面上
    修改placeholder样式,兼容多个浏览器
    一款还不错的日期插件layDate
    vue-cli打包后出现 “Uncaught SyntaxError: Unexpected token <”这个错
    详谈C++虚函数表那回事(一般继承关系)
    C++多态的实现及原理详细解析
    位运算求两个数的平均值
    网页设计入门<一>
  • 原文地址:https://www.cnblogs.com/personnel/p/4585037.html
Copyright © 2011-2022 走看看