ffmpeg编译支持AVS3编解码

  1. libuavs3d
    ffmpeg的官方源码中已经支持了libuavs3d解码器的接口(libavcodec/libuavs3d.c中定义),因此如果需要编译ffmpeg支持libuavs3d解码器,只需要安装libuavs3d.so以及开启ffmpeg的编译选项即可。
    安装libuavs3d解码器
#代码仓库
git clone https://github.com/uavs3/uavs3d.git
#可以参考其仓库说明安装,这里使用linux平台
apt install gawk cmake #安装依赖
cd uavs3d
mkdir build/linux
cd build/linux
cmake -DCOMPILE_10BIT=1 -DBUILD_SHARED_LIBS=1 --install-prefix=/usr ../..
make && make install

libuavs3d会安装的文件:

/usr/lib/libuavs3d.so
/usr/include/uavs3d.h
/usr/lib/pkgconfig/uavs3d.pc

如果编译得时候没有-DBUILD_SHARED_LIBS,则uavs3d不会生成libuavs3d.so,静态链接生成uavs3dec可执行文件,这样ffmpeg就不能使用libuavs3d库了。

  1. libuavs3e
    ffmpeg官方源码中还未添加对libuavs3e库的支持,需要做一点修改。
    安装libuavs3e编码器
#代码仓库
git clone https://github.com/uavs3/uavs3d.git
apt install gawk cmake #安装依赖
cd uavs3e
mkdir build/linux
cd build/linux
cmake -DCOMPILE_10BIT=1 -DBUILD_SHARED_LIBS=1 --install-prefix=/usr ../..
make && make install

uavs3e安装的文件比uavs3d的多一个

/usr/lib/libuavs3e.so
/usr/include/uavs3e/uavs3e.h
/usr/include/uavs3e/com_api.h
/usr/lib/pkgconfig/uavs3e.pc

ffmpeg添加libuavs3e.c及接口支持

#libavs3e.c开源代码仓库
git clone https://github.com/uavs3/uavs3e_ffmpeg_interface.git

ffmpeg中configure修改以及allcodecs.c修改:

diff --git a/configure b/configure
index 838e627084..e95345aaf2 100755
--- a/configure
+++ b/configure
@@ -279,6 +279,7 @@ External library support:if openssl, gnutls or mbedtls is not used [no]--enable-libtwolame      enable MP2 encoding via libtwolame [no]--enable-libuavs3d       enable AVS3 decoding via libuavs3d [no]
+  --enable-libuavs3e       enable AVS3 encoding via libuavs3e [no]--enable-libv4l2         enable libv4l2/v4l-utils [no]--enable-libvidstab      enable video stabilization using vid.stab [no]--enable-libvmaf         enable vmaf filter via libvmaf [no]
@@ -1898,6 +1899,7 @@ EXTERNAL_LIBRARY_LIST="libtheoralibtwolamelibuavs3d
+    libuavs3elibv4l2libvmaflibvorbis
@@ -3443,6 +3445,7 @@ libsvtav1_encoder_deps="libsvtav1"libtheora_encoder_deps="libtheora"libtwolame_encoder_deps="libtwolame"libuavs3d_decoder_deps="libuavs3d"
+libuavs3e_encoder_deps="libuavs3e"libvo_amrwbenc_encoder_deps="libvo_amrwbenc"libvorbis_decoder_deps="libvorbis"libvorbis_encoder_deps="libvorbis libvorbisenc"
@@ -6836,6 +6839,7 @@ enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame{ check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }enabled libuavs3d         && require_pkg_config libuavs3d "uavs3d >= 1.1.41" uavs3d.h uavs3d_decode
+enabled libuavs3e         && require_pkg_config libuavs3e "uavs3e >= 1.1.41" uavs3e.h uavs3e_encenabled libv4l2           && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctlenabled libvidstab        && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInitenabled libvmaf           && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index b0f004e15c..9a3b95299b 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -800,6 +800,7 @@ extern const FFCodec ff_libsvtav1_encoder;extern const FFCodec ff_libtheora_encoder;extern const FFCodec ff_libtwolame_encoder;extern const FFCodec ff_libuavs3d_decoder;
+extern const FFCodec ff_libuavs3e_encoder;extern const FFCodec ff_libvo_amrwbenc_encoder;extern const FFCodec ff_libvorbis_encoder;extern const FFCodec ff_libvorbis_decoder;

编译时会报错,pkg-config找不到uavs3e,可以查看ffbuild/config.log中的具体错误,我这里是因为uavse.h头文件和uavs3e.pc中路径不匹配,直接把/usr/include/uavs3e/路径下的两个头文件拷贝到/usr/include/下面(和uavs3d.h路径一致了)

cp /usr/include/uavs3e/* /usr/include/

ffmpeg的配置选项
./configure --enable-libuavs3d --enable-libuavs3e --enable-shared --disable-stripping --enable-ffplay --prefix=/usr

  1. 效果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序开发

1.准备工作 1.注册公众平台账号(免费)2.下载小程序开发工具(免费) 2.开发步骤 1.第一个小程序 1.小程序的AppID相当于小程序平台的一个身份证,这里使用的是测试号(注意区别于服务号或订阅号的AppID&#xf…

学习前端都需要学什么?

前端开发是一门需要掌握多种技术和工具的综合性学科。作为一名合格的前端开发者,需要具备以下几方面的知识和技能: HTML:HTML 是构建网页的基础,是前端开发的第一步。需要掌握各种 HTML 标签的使用和语义化的编写方式&#xff0c…

本地快速部署Apache服务器并使用内网穿透实现远程访问

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…

【自习室预约系统源码】基于springboot框架的自习室管理和预约系统设计

🍅 简介:500精品计算机源码学习 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 文末获取源码 目录 一、以下学习内容欢迎领取: 二、文档资料截图: 三想了解更多,请收藏、评论、留言:…

GPTs每日推荐--生化危机【典藏版】

今天给大家推荐一个游戏性质的GPTs,叫做生化危机典藏版,国内点击可玩。 开篇:玩家从末日中醒来。 选择:玩家会遇到各种资源、任务、剧情,需要自行选择相关的分支剧情,一旦选错,无法重选。 结局…

openGauss学习笔记-142 openGauss 数据库运维-例行维护-导出并查看wdr诊断报告

文章目录 openGauss学习笔记-142 openGauss 数据库运维-例行维护-导出并查看wdr诊断报告 openGauss学习笔记-142 openGauss 数据库运维-例行维护-导出并查看wdr诊断报告 生成快照数据需参数enable_wdr_snapshoton,访问WDR快照数据需要sysadmin或monadmin权限&#…

【PID学习笔记 5 】控制系统的性能指标之一

写在前面 PID在实际工程中最重要的工作就是调参,那么首先就要了解控制系统的性能指标。上文最后简要介绍了控制系统的基本要求,本文开始将系统学习控制系统的性能指标,内容比较多,初步计划是分三节来讲解。本文重点介绍性能指标的…

VirtualBox+Vagrant安装虚拟机

文章目录 一、下载Virtualbox和Vagrant1、下载2、安装 二、安装虚拟机1、新建目录D:\VirtualMachine2、执行vagrant init centos/7命令,就会在该目录下创建Vagrantfile文件3、执行vagrant up命令4、查看当前主机分给虚拟机的网关网段5、找到D:\VirtualMachine下的Va…

leetcode算法之栈

目录 1.删除字符串中的所有相邻重复项2.比较含退格的字符串3.基本计算器II4.字符串解码5.验证栈序列 1.删除字符串中的所有相邻重复项 删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {string ret;//使用数组模拟栈操作for(auto …

基于单片机远程温控检测系统

**单片机设计介绍,基于单片机远程温控检测系统(含上位机) 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的远程温控检测系统可以用于远程监测和控制温度,实现远程温度监…

关于栈的简单理解

1. 栈(Stack) 1.1 文字讲解 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则&a…

gromacs学习及使用(1)

1.Gromacs的使用 2.Gromacs 的第一步_能量最小化 3.分子动力学模拟Gromacs一般使用步骤(空蛋白) 4.GROMACS优化(没看懂) 5.GROMACS快速入门(有好东西) GROMACS中文教程 gmx editconf -f xxx -o xxx6.GROMACS运行参数之em.mdp文…

Open3D 最小二乘拟合空间直线(方法二)

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理

docker踩坑记录:docker容器创建doris容器间无法通讯问题

背景: 开发大数据平台,使用doris作为数据仓储,使用docker做集群部署,先进行开发环境搭建,环境为BE1;FE1,原来使用官方例子,但是官方例子是创建了一个bridge使用172.20.80.0/24通讯,…

「Swift」类淘宝商品瀑布流展示

前言:需要做一个类似于淘宝商品页面的瀑布流展示 结构分析: ps:图片来源 思路分析: 该瀑布流主要还是基于UICollectionView进行展示,只是在cell展示的UICollectionViewFlowLayout需要进行相应调整和自定义&#xff…

Mybatis 操作续集(连着上文一起看)

"查"操作(企业开发中尽量不使用*,需要哪些字段就写哪些字段,都需要就全写上) Mybatis 会自动地根据数据库的字段名和Java对象的属性名进行映射,如果名称一样就进行赋值 但是那些名称不一样的,我们想要拿到,该怎么拿呢? 一开始数据库字段名和Java对象属性名如下图…

C# | 使用AutoResetEvent和ManualResetEvent进行线程同步和通信

使用AutoResetEvent和ManualResetEvent进行线程同步和通信 文章目录 使用AutoResetEvent和ManualResetEvent进行线程同步和通信介绍AutoResetEventManualResetEvent 异同点使用场景和代码示例AutoResetEvent 使用示例ManualResetEvent 使用示例阻塞多个线程并同时激活 介绍 在…

创新领航 | 竹云参编《基层智治系统安全接入规范》团体标准正式发布!

近日,由杭州市委办公厅(市密码管理局)、杭州市基层治理综合指挥保障中心、杭州市拱墅区社会治理中心、杭州市拱墅区数据资源管理局、杭州竹云数字智能科技有限公司、杭州智诚质量标准技术评定中心共同参与编写的《基层智治系统安全接入规范》…

Video Studio会声会影2024中文直装旗舰版

Corel Video Studio会声会影2024中文直装旗舰版是一款很流行的视频编辑处理软件,由于其简单易用,且功能不错,在国内拥有众多使用者,小编之前给大家分享过Corel Video Studio Ultimate会声会影2024旗舰版中文版,今天再为…

8.7 矢量图层点要素点分布(Point displacement)使用

文章目录 前言点分布(Point displacement)QGis代码实现 总结 前言 前面介绍了矢量-点要素-单一符号、矢量-点要素-分类符号、矢量-点要素-分级符号以及矢量-点要素-基于规则的使用本章介绍如何使用点分布(Point displacement)说明…