1.FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
2.ffmpeg编译,源码支持QSV,导入CUDA
3.FFMPEG编译裁剪移植
4.FFmpeg交叉编译、源码脚本参数配置
5.FFmpeg开发笔记(八)Linux交叉编译Android的导入FFmpeg库
6.FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文将指导读者在Windows环境下,如何为FFmpeg集成libopus和libvpx,源码进而支持Opus音频编码与VP8/VP9视频编码。导入神秘黑洞源码首先,源码介绍libopus的导入集成步骤。libopus是源码用于语音交互和音频传输的编码标准,其编解码器为libopus。导入下载最新版libopus源码,源码解压后执行配置命令./configure --prefix=/usr/local/libopus。导入接着,源码编译并安装libopus,导入确保环境变量PKG_CONFIG_PATH已包含libopus的源码pkgconfig路径。
随后,转向libvpx的集成。libvpx是VP8和VP9视频编码标准的编解码器。下载最新libvpx源码,解压并配置./configure --prefix=/usr/local/libvpx --enable-pic --disable-examples --disable-unit-tests,确保使用了--enable-pic选项以避免在编译FFmpeg时的错误。编译、安装libvpx后,同样更新PKG_CONFIG_PATH环境变量。
为了在FFmpeg中启用libopus和libvpx,需要重新编译FFmpeg。确保所有相关库的pkgconfig路径已加载至环境变量PKG_CONFIG_PATH中。通过命令./configure --prefix=/usr/local/ffmpeg --arch=x_ --enable-shared --disable-static --disable-doc --enable-libx --enable-libx --enable-libxavs2 --enable-libdavs2 --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libfreetype --enable-sdl2 --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libopus --enable-libvpx --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/lame/include -I/usr/local/libogg/include -I/usr/local/amr/include' --extra-ldflags='-L/usr/local/lame/lib -L/usr/local/libogg/lib -L/usr/local/amr/lib' --cross-prefix=x_-w-mingw- --target-os=mingw重新配置FFmpeg,启用libopus与libvpx功能。接着,执行编译与安装命令,完成FFmpeg的windows dlna源码开发集成。
最后,通过命令ffmpeg -version检查FFmpeg版本信息,确认是否成功启用libopus与libvpx。至此,FFmpeg已成功在Windows环境下集成了libopus和libvpx,支持Opus音频编码与VP8/VP9视频编码。此过程为视频处理应用提供了更丰富编码格式支持,提高了FFmpeg的多功能性与适应性。
ffmpeg编译,支持QSV,CUDA
一、配置环境
下载mfx源码:github.com/lu-zero/mfx_
下载msys2,并安装
下载ffmpeg
二、编译库(位)
在系统开始菜单中启动MSYS2 MSYS,在终端中执行以下升级操作:
修改mfx_dispatch/ Makefile.am文件,把libintel_gfx_api-x.a和libintel_gfx_api_x.a修改为以.la为后缀;
拷贝mfx_dispatch和ffmpeg至msys2/home目录下;
打开msys位的命令行窗口,通过命令进入mfx_dispatch目录,进行以下操作:
编译nv-code-headers,编译之后会自动放在/usr/local下;输入命令 export PKG_CONFIG_PATH=path,path是mfx和nv-code-headers编译之后的路径
编译ffmpeg
在执行make -j8时,如果报错,则需要在./configure命令后面添加关联libmfx的头文件目录和库文件目录,如:--extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib。
通过msys位的命令行窗口进入ffmpeg目录,进行以下操作:
三、注意事项
如果不修改c,会出现编译不通过的情况;
编译过程中要注意位和位;
export PKG_CONFIG_PATH指定的路径一定要正确,否则在编译ffmpeg会出现libmfx not found错误。
编译ffmpeg命令中,加了--disable-demuxers指令后,会发现avformat_open_input无法打开音视频流。掌上信贷分销源码
编译位ffmpeg-qsv库,修改编译mfx的命令和ffmpeg的命令,将位的改为位。
libmfx编译命令:Linux 编译时:./configure --prefix=/usr/local/ffmpegx --enable-shared --extra-cflags="-m" --extra-ldflags="-m" --extra-cxxflags="-m",ffmpeg编译命令。
四、CentOS
原文 ffmpeg编译,支持QSV,CUDA_cuda qsv_那比小新的博客-CSDN博客
FFMPEG编译裁剪移植
1.ffmpeg文件结构说明
1.1 ffmpeg模块说明
libavformat
用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。
libavcodec
用于各种类型声音/图像编解码。该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能。
libavdevice
硬件采集、加速、显示。操作计算机中常用的音视频捕获或输出设备。
libavfilter
音视频滤波器的开发,如宽高比、裁剪、格式化、非格式化伸缩。
libavutil
包含一些公共的工具函数的使用库,包括算数运算、字符操作。
libavresample
音视频封转编解码格式预设等。
libswscale
原始视频格式转换,用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb、2017挂Q源码rgb 等与 yuv 等之间转换。
libswresample
原始音频格式转码。
libpostproc
同步、时间计算的简单算法,用于后期效果处理;音视频应用的后处理,如图像的去块效应
在编译ffmpeg源码之前,我们可以通过配置编译参数选择是否编译生成如上库。一般而言,要实现最基本的音视频编解码功能,libavformat,libavcodec,libavutil这三个库是不可缺少的。我们通过使能或失能ffmpeg支持的组件,如编解码器、分流器、合流器、解析器、协议类型等,来裁剪库文件的大小。
1.2名词解释
encoder // 编码器
decoder // 解码器
hwaccel // 硬件加速器
muxer // 合流器
demuxer // 分流器
parser // 解析器
bsf // 比特过滤器
protocol // 协议
indev // 输入设备
outdev // 输出设备
filter // 过滤器
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
免费分享音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击 加群免费领取~
2.编译
ffmpeg 编译帮助
主要包含一下选项
Help options // 帮助选项,可以查看全部支持的编解码,硬件加速器,解析器、输入输出设备等参数的etcd集群源码安装列表,一般做裁剪时需要查询;
Standard options // 标准选项,主要是目录路径相关的设置,常用的为--prefix=PREFIX 设置安装路径;
Licensing options // license 相关选项 GPL使能设置相关;
Configuration options // 配置选项,常用的--disable-static关闭静态库 默认是开启静态库编译的--enable-shared 使能动态库编译,编译出动态库--enable-small优化大小而不是注重运行速度;
Program options // 编译出工具文件,一般的bin文件,常用的ffmpeg ffprobe 和ffplay三个工具的bin文件编译;
Documentation options // 文档选项,是否构建文档页面,个人猜测是工具的帮助文件是否编译进去,里面支持html manpage txt等格式文件;
Component options // 组件选项,常用使能或者关闭某些模块的编译,libavformat,libavcodec,libavutil这三个库一般是不可或缺的,还有其他的组件按自己需要使能;
Individual component options // 独立的组件选项,更为具体的组件编译选项,如果需要剪裁一般情况先使用--disable-everything 关闭全部的组件,然后再单独开启需要的组件;
External library support // 扩展库支持,允许FFmpeg链接到相应的外部库;
Toolchain options // 工具链选项,交叉编译常用,比较常用的--arch=ARCH 指定系统架构 --cpu=CPU指定cpu类型 --cross-prefix交叉编译工具链前缀 --enable-cross-compile 使能交叉编译--target-os=OS指定操作系统;
Advanced options (experts only) // 高级选项,一般较少使用,不懂的请慎用,以免引进bug;
Optimization options (experts only): --disable-asm关闭所有的优化选项
Developer options (useful when working on FFmpeg itself): --disable-debug 关闭调试符号信息,减小库大小;
2.1全编配置
采用默认配置 交叉编译,在当前目录下output文件夹生成对应的文件
编译后的文件夹下有bin include lib share 目录bin存放交叉编译后的ffmpeg等工具bin文件,include目录存放头文件,移植需要 lib存放动态和静态库,将lib里面的文件拷贝到板端或者静态库使用即可;
编译后未经裁剪的ffmpeg库实在太大,十几M的大小,需要裁剪;
2.2裁剪库
ffmpeg 库过大,很多功能其实没必要使用的, 裁剪为仅支持mp4 和 avi两种格式的视频,avi:视频采用h编码,音频采用pcm_alaw mp4:视频h,音频aac格式;这个指令其实还可以进一步裁剪,不想麻烦,够用就行,不再裁剪@_@;
裁剪后的文件大小最大也只剩1.1M,大小减少倍;
3.ffmpeg移植问题
3.1时间冲突问题
libavutils/time.h文件名字和linux系统的time.h的名字冲突,在编译的时候会出现time.h文件是有两个,无法区分是哪个time.h,因此会出现报错,如果在ffmepg里将time.h文件重命名可以解决这个问题,但这样太麻烦而且容易出错,采用另外一种方式,将makefile的搜索路径更改为只搜索到include文件夹,然后在include文件夹下放置相关的头文件,而在调用的c文件上路径改为
这样就躲开了搜索文件名字一样的问题,其本质是将ffmpeg的time.h重新命名为libavutils/time.h
3.2函数符号导出问题
由于移植需要单独导出库内部的局部函数,如mov_write_packet mov_write_header mov_write_trailer等函数,将movenc.c对应函数的static去掉,同时在libavformat.h文件声明函数,但是生成的库会发现没有找到对应的函数符号
avi相关的函数也做同样的处理,但是avi有这个函数符号,这个问题只能反推编译过程查找哪里将函数符号屏蔽掉了采用指令
发现在生成库的时候会调用一个脚本文件,这个脚本文件最后在config.mak里面指定了
--version-script这个选项仅仅导出要使用的符号表,这个文件对应libavformat里面的就是libavformat.vlibavformat.verlibavformat.version,后两个文件都是根据第一个文件产生的,查看libavformat.v文件
显然,在这里屏蔽掉了非av开头的全部函数,所有mov开头的函数无法被外部调用,因此更改这个文件,将mov开头的函数也导出
重新编译发现可以调用mov开头的函数了。
不足之处,敬请指出,谢谢^_^
4.参考资料
CSDN 博客 SigmaStarDocs 《ffmpeg基础库编程开发》
原文 FFMPEG编译裁剪移植_ffmpeg编译到移远模块_Kingkim的博客-CSDN博客
FFmpeg交叉编译、脚本参数配置
一:下载并解压ffmpeg源码
使用git或wget下载ffmpeg源码到/root/ff目录,安装git或wget后执行命令解压。
检查解压后的文件。
使用tar命令解压ffmpeg-3.4.tar.bz2文件。
使用unzip命令解压NDK压缩包。
查看目录结构。
安装make工具,用于自动化编译工作,提高效率。
二:配置编译脚本
定义环境变量,包括NDK目录、架构下的so库和头文件、交叉编译工具、CPU类型和输出路径。
使用env命令查看环境变量。
解决NDK版本r后gcc兼容问题,通过修改cc路径使用clang。
执行make命令进行编译,使用-j参数指定并行任务数,编译完成后执行make install安装。
在指定路径下生成输出文件。
三:创建Shell脚本
创建并编辑android.sh文件,实现自动化交叉编译流程。
调整脚本参数实现动态配置。
重新执行脚本,生成编译结果。
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境中进行FFmpeg库的Android交叉编译,首先需要下载Linux版本的android-ndk-re。登录Linux服务器,例如华为云的欧拉系统,执行以下步骤:
1. 进入`/usr/local/src`目录:
cd /usr/local/src
2. 下载并解压ndk:
curl -O dl.google.com/android/r...
unzip android-ndk-re-linux-x_.zip
接下来,你需要将FFmpeg及相关库(如x、freetype、lame)的源码上传到服务器,并进行必要的修改:
- 解压源码,替换`SYSTEM=windows-x_`为`SYSTEM=linux-x_`,并确保sh文件无回车符。
- 修改`config_x.sh`、`config_freetype.sh`等文件,赋予可执行权限:
chmod +x config_*.sh
3. 编译x库,修改configure文件并执行编译:
修改configure文件
./config_x.sh
make -j4
make install
4. 对其他第三方库进行类似操作:
./config_xxx.sh
make -j4
make install
5. 配置环境变量`PKG_CONFIG_PATH`:
在.bash_profile中添加环境变量
source .bash_profile
6. 最后,编译FFmpeg库:
./config_ffmpeg_full.sh
make -j4
make install
完成后,可以在指定目录找到so文件,并将其复制到App工程的jniLibs\arm-v8a目录,然后按照《FFmpeg开发实战:从零基础到短视频上线》的章节“.1.3 App工程调用FFmpeg的so库”进行App的配置、编译和运行。
FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
在FFmpeg开发中,为了支持WebM格式的视频,特别是其音频编码的Opus和视频编码的VP8/VP9,需要在Linux环境中集成libopus和libvpx库。以下是具体的操作步骤:
1. 安装libopus:首先,从ftp.osuosl.org下载libopus源码,如libopus-1.4。解压后,运行`./configure`进行配置,接着执行`make`和`make install`编译并安装。
2. 安装libvpx:访问github.com/webmproject获取libvpx-1..1源码。解压后,使用`./configure --enable-pic --disable-examples --disable-unit-tests`配置,然后编译并安装,即`make`和`make install`。
3. 重新编译FFmpeg:由于FFmpeg默认不支持opus和vpx,需要在FFmpeg源码目录下,通过`./configure`命令添加`--enable-libopus --enable-libvpx`选项。接着执行`make clean`清理,`make -j4`编译,最后使用`make install`安装并检查FFmpeg版本以确认成功启用。
按照以上步骤,你就能在Linux环境中成功集成libopus和libvpx到FFmpeg,从而支持WebM格式的视频编码。《FFmpeg开发实战:从零基础到短视频上线》一书中的详细说明提供了完整的指导。
Ubuntu系统-FFmpeg安装及环境配置
FCN-4是一个应用于音频自动标注的全卷积神经网络,使用该网络进行mp3音频自动标注任务需要Librosa依赖库和ffmpeg工具。Librosa库的安装问题中,若安装结果中出现提示内容,说明librosa依赖库安装成功。在调用librosa包过程中,可能会遇到缺失其他相关依赖的问题,如缺少_bz2模块和_lzma模块,这需要将python3.6路径下的_bz2库拷贝到python3.7对应目录下,同时保证python3.7的目录下存在bz库文件,或从网上下载或从其他存在该文件的环境中复制到目标环境。对于找不到sndfile库的问题,使用命令行执行安装指令。在安装FFmpeg工具时,首先需要下载安装wget工具,然后下载并解压ffmpeg的源码安装包。在下载过程中,如果遇到无法通过认证检查的情况,可以通过在命令行中加入取消认证检查的选项来解决。下载完成后,使用解压命令将安装包解压至指定目录。接下来,创建ffmpeg文件夹作为安装路径,并进入源码包目录,执行config程序完成安装配置。若执行config程序时报错“nasm/yasm not found or too old. Use …”,需要先安装yasm,然后再重新执行配置程序。完成配置后,执行编译&安装指令,安装完成后,ffmpeg应存在于指定的安装路径下。配置环境变量时,将ffmpeg的绝对路径添加到PATH环境变量中。若在检测ffmpeg安装情况时出现找不到共享库文件的错误,需要在/etc/ld.so.conf.d/路径下创建文件“ffmpeg.conf”,并写入/usr/local/ffmpeg/lib路径。最后,通过命令行输入“which ffmpeg”或“ffmpeg -h”来测试是否配置成功。若以上步骤完成仍报错“audioread.exceptions.NoBackendError”,可以考虑修改库文件中的后端调用指令,将COMMAND = (‘ffmpeg’, ‘avconv’) 改为 COMMAND = (’/usr/local/ffmpeg/bin/ffmpeg’, ‘avconv’)。不同环境的配置可能会有所不同,因此可能遇到的问题也会有所差异,遇到未提及的问题时,应根据报错信息在搜索引擎中查找解决方案。