ffmpeg精简
自:http://www.chinavideo.org/viewthread.php?tid=5567&extra=page%3D1&page=2
现在更新一下目前遇到的问题:
我想裁减ffmpeg编译出来的Dll库,把avcodec.dll裁减到1MB左右就可以了,只需要用ffmpeg完成H.264的解码和对音频解码的支持. 目前搭建了MinGW+MSYS的环境来编译ffmpeg,make的版本是3.81的.
编译过程如下:
./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264
make
make install
但最后编译生成的 avcodec.dll 还是有3.5MB ? 请问还需要在 configure 里加哪些参数,才能达到我所要求的裁减效果呢??
--enable-small
大哥,按照你的方法来做:
./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264 --enable-small
make
make install
但最后编译生成的 avcodec.dll 还是有2620KB ? 请问还需要在 configure 里加哪些参数,才能达到我所要的裁减(精简到1MB左右)效果呢??
我现在是下载的ffmpeg-0.6.1的源代码。我在网上有看到可以把 avcodec.dll裁减到700多KB,不会吧???
--disable-avdevice
--disable-avfilter
--disable-network
然后再
--disable-everything
最后再
--enable-decoder=需要解码的codec格式
--enable-decoder=xxxx
...
--enable-demuxer=需要解码的容器格式
--enable-demuxer=xxxx
非常感谢楼上的高手!
这一两天终于把ffmpeg裁减好了,avcodec-52.dll 744KB,可以达到我们项目预期的需求.现将整个过程及遇到的问题和解决方法一一列举出来,以供大家日后做为参考:
1.首先下载ffmpeg-0.6.1的源代码,PC端使用VS2008 + SP1的开发环境;
2.搭建MinGW+MSYS的ffmpeg编译环境,这个可以参考网上很多这方面的文章.有个地方稍微提下,建议大家安装最新的MinGW环境,http://sourceforge.net/projects/mingw/files/ 到这个链接可以下载到最新版的MinGW.因为我发现如果GCC的版本太低(例如:3.4,2),编译出来的avcodec.dll在做encode编码的时候,ffmpeg会报错,提示ffmpeg在编译的过程中使用了版本太低的GCC编译器,建议>=4.2.
我目前MinGW+MSYS的编译环境,使用的 GCC 是4.5.0, Make版本是 3.81
3.配置及编译ffmpeg
./configure --disable-static --enable-shared --enable- memalign-hack --enable-small --disable-encoders --disable-decoders --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=mjpeg --prefix=/e/ffmpeg-sdk/
make;make install
这样,在E盘的ffmpeg-sdk目录下会有include头文件及bin目录下会有对应的avcodec/avformat等等dll和lib库.
4.用VS2008调用ffmpeg库编写应用程序(使用方法可以参考网上的相关文章),这里提一下三个问题的解决:
第一,解决:Cannot open include file: 'inttypes.h'
更新ffmpeg之后,有时编译应用ffmpeg库的工程会发现提示: Cannot open include file: 'inttypes.h': No such file or directory 的出错信息,可通过如下方法解决:
1、找到include目录中的/libavutil/common.h
2、在"#define AVUTIL_COMMON_H"之后加入如下代码,同时删除"#include <inttypes.h>" 然后保存:
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
# define CONFIG_WIN32
#endif
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES)
# define EMULATE_INTTYPES
#endif
#ifndef EMULATE_INTTYPES
# include <inttypes.h>
#else
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
# ifdef CONFIG_WIN32
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
# else /* other OS */
typedef signed long long int64_t;
typedef unsigned long long uint64_t;
# endif /* other OS */
#endif /* EMULATE_INTTYPES */
第二,继'inttypes.h'之后的问题 'stdint.h'怎么解决?
解决方法:经过测试,在VC++2008+SP1下可以将#include <stdint.h>注释掉,不会影响编译和连接。
第三,是在Windows下环境使用ffmpeg库时发现报错
error C3861: 'UINT64_C': identifier not found,怎么回事?
解决方案:
在/libavutil/common.h里加入定义如下:
#ifndef INT64_C
#define INT64_C(c) (c ## LL)
#define UINT64_C(c) (c ## ULL)
#endif
好了,就写这么多吧!希望大家可以互相学习,共同进步了
Powered by Zoundry Raven
ffmpeg精简的更多相关文章
- ffmpeg精简编译
项目上需要用到ffmpeg的接收功能,把rtp流转封装为ts吐udp组播流,不涉及编码,所以需要精简一下脚本如下: #!/bin/bash dir=$(pwd) echo $dir rm -rf $d ...
- 编译:ffmpeg,精简ffmpeg.exe
网上下载的各种 ffmpeg.exe ,最少都有11M+ 而我只需要处理 mp4 和 mp3,在网上搜索了一下精简ffmpeg的文章,折腾一天,也没有完全搞定,但多少有些收获,记录一下: 从 www. ...
- 转:最简单的视频网站(JavaEE+FFmpeg)
本文记录一个最简单的视频网站系统.此前做过一些基于JavaEE中的 SSH (Strut2 + Spring + Hibernate)的网站系统,但是一直没有做过一个视频网站系统,所以就打算做一个&q ...
- iOS: FFMpeg编译和使用问题总结
iOS: FFmpeg编译和使用问题总结 折磨了我近一周多时间的FFmpeg库编译问题终于解决了,必须得把这一段时间来遇到过的坑全写出来.如果急着解决问题,编译最新版本的FFmpeg库请直接看第二部分 ...
- [转]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- [总结]FFMPEG视音频编解码零基础学习方法--转
ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ...
- FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- FFMPEG视音频编解码零基础学习方法-b
感谢大神分享,虽然现在还看不懂,留着大家一起看啦 PS:有不少人不清楚“FFmpeg”应该怎么读.它读作“ef ef em peg” 0. 背景知识 本章主要介绍一下FFMPEG都用在了哪里(在这里仅 ...
- [总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- 【转】[总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
随机推荐
- Lakehouse 还是 Warehouse?(1/2)
Onehouse 创始人/首席执行官 Vinoth Chandar 于 2022 年 3 月在奥斯汀数据委员会发表了这一重要演讲.奥斯汀数据委员会是"世界上最大的独立全栈数据会议" ...
- Android Media Framework - 开篇
前言 Android Media是一块非常庞大的内容,上到APP的书写,中到播放器的实现.封装格式的了解,下到编解码组件的封装.VPU API的了解,每块内容的学习都需要我们下很大的功夫.此外,我们还 ...
- .net Core中实现SHA加密
#region 用SHA1加密字符串 /// <summary> /// 用SHA1加密字符串 /// </summary> /// <param name=" ...
- @synchronized(self) 加锁引起的Crash
一.最近米家App进入前台的时候上报上来一个Crash {"app_name":"MiHome","timestamp":"201 ...
- 基于WebSocket的modbus通信(一)- 客户端
上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能. 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应. 接下来要做的就是实现Modb ...
- Github Fork仓库的冲突与同步管理
在使用Github进行协作开发时,fork一个仓库并在本地进行开发是常见的工作流程.然而,当源仓库(上游仓库)有了更新时,如何同步这些更新并解决可能的合并冲突是一个关键问题.本文将详细介绍如何管理这些 ...
- minos 2.1 中断虚拟化——ARMv8 异常处理
首发公号:Rand_cs 越往后,交叉的越多,大多都绕不开 ARMv8 的异常处理,所以必须得先了解了解 ARMv8 的异常处理流程 先说一下术语,从手册中的用词来看,在 x86 平台,一般将异常和中 ...
- 【简写Mybatis-02】注册机的实现以及SqlSession处理
前言 注意: 学习源码一定一定不要太关注代码的编写,而是注意代码实现思想: 通过设问方式来体现代码中的思想:方法:5W+1H 源代码: https://gitee.com/xbhog/mybatis- ...
- kali更换apt镜像
kali更换apt镜像 vim /etc/apt/sources.list 进来之后按i进入编辑模式,把其他的镜像#注释掉之后,加上新的镜像,然后esc退出编辑,按:输入wq保存并退出! 上面的办法不 ...
- FFmpeg如何将一个gif嵌入视频指定位置并指定显示时间
背景 很简单的需求:我需要将一个gif嵌入到视频里面的指定位置,并要指定时间播放: 环境 windows11 64位专业版 ffmpeg version 2022-04-07-git-607ecc27 ...