ffmpeg编译支持AVS3编解码

news2024/12/26 21:44:43
  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="
     libtheora
     libtwolame
     libuavs3d
+    libuavs3e
     libv4l2
     libvmaf
     libvorbis
@@ -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_enc
 enabled libv4l2           && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
 enabled libvidstab        && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
 enabled 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.coloradmin.cn/o/1282739.html

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

相关文章

【flink番外篇】1、flink的23种常用算子介绍及详细示例(2)- keyby、reduce和Aggregations

Flink 系列文章 1、Flink 专栏等系列综合文章链接 文章目录 Flink 系列文章一、Flink的23种算子说明及示例6、KeyBy7、Reduce8、Aggregations 本文主要介绍Flink 的3种常用的operator(keyby、reduce和Aggregations)及以具体可运行示例进行说明. 如果需要…

c题目14:写成一个函数,对数组进行排序

每日小语 一个人倘若需要从思想中得到快乐,那么他的第一个欲望就是学习。——王小波 自己思考 这不前几天刚搞的东西吗,就写成一个函数,这个有什么难的吗?我有时候那个分别心特重啊,真就别人拿到个啥好的比杀了我还难…

赛捷CRM集成无需API开发:连接营销系统,优化电商用户运营和广告策略

赛捷CRM集成无需API开发:连接营销系统,优化电商用户运营和广告策略 在当前的电商热潮下,企业如何在竞争中脱颖而出,提高用户运营效率和广告策略的精准度,成为了关键性的挑战。赛捷CRM以其无需API开发的集成解决方案&a…

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见?

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「安卓开发资料从专业入门到高级教程工具包」,点个关注,…

Selenium自动化测试工具使用方法汇总

1、设置无头浏览器模式 from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options Options() chrome_options.add_argument(- -headless) chrome_options.add_argument(- -disable-gpu) class XX(object): self.driver webdriv…

微机原理10

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 1.8086 中 IP 寄存器的作用是() A. 保存当前栈顶地址 B. 保存代码段的基地址 C.指示下一条要执行的指令地…

ASP.NET《数据库原理及应用技术》课程指导平台的开发

1.1 系统设计目标 研制《数据库原理及应用技术》课程指导平台在功能上可以满足网络课堂教学活动的需要,在Internet上实现教学活动的各个环节。系统的基本设计原则有:先进性与方便性原则、功能实用性原则、开放性与可扩展性原则等。系统设计时采用较好的…

JS加密/解密之HOOK实战

之前的章节有介绍过Javascript的Hook相关的基础知识,相信大部分人也知道了什么是Hook,今天我们来讲一下Hook实战,实际的运用。 0x1.事上练 // 程序员们基本都喜欢简单精辟 直入主题 不喜欢咬文嚼字 我们先直接上代码 var _log console.log…

阿里云效一键部署前后端

静态站点到OSS 阿里云-云效,阿里云企业级一站式 DevOps,可以免费使用(会限制人数、流水线数量等,个人项目够用了)。相关文章 CI 持续集成 - 阿里云云效 OSS 是对象存储的意思,一般一个项目对应一个 Bucke…

Python:核心知识点整理大全2-笔记

在本章中,你将学习可在Python程序中使用的各种数据,还将学 习如何将数据存储到变量中,以及如何在程序中使用这些变量。 2.1 运行 hello_world.py 时发生的情况 运行hello_world.py时,Python都做了些什么呢?下面来深入…

环形链表 2:找出入环的第一个节点

题目描述: 给定一个链表返回链表开始入环的第一个点。如果链表无环,则返回NULL。 为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。…

D3485国产芯片+5V工作电压, 内置失效保护电路 具有+15kV IEC 61000-4-2接触放电保护能力 SOP8封装

D3485是一款5V供电、半双工的RS-485收发器,芯片内部包含一路驱动器和路接收器。D3485使用限摆率驱动器,能显著减小EMI和由于不恰当的终端匹配电缆所引起的反射,并实现高达10Mbps的无差错数据传输。D3485内置失效保护电路,保证接收…

【网络安全技术】密钥管理

一、分级密钥概念 典型的密钥分级分为三级,三级密钥就是一次会话的session key,用来加密通信,所以通常使用对称密钥。 二级密钥就是分发三级密钥的密钥,用来加密三级密钥来分发三级密钥。 一级密钥就是分发二级密钥的密钥&…

Markdown语法入门与进阶指南

一、Markdown简介 Markdown是一种轻量级标记语言,创始人为约翰格鲁伯(john Gruber)。它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档。这种语言吸收了很多在电子邮件中…

RedHat8 安装部署DzzOffice协同办公平台+onlyoffice(docker)以及问题解决(亲测可用,花费2天)

一、基础配置(MysqlDzzoffice) 1:安装软件需要的环境,我们用LAMP的环境。基本上CentOS8自带的软件版本都达到安装DzzOffice的要求。 2:关闭防火墙(不关的话需要开放80端口自行决定)。 systemctl disable --now fire…

12.4散列查找定义,散列函数,散列查找(开放定址法,处理冲突),总结

散列函数定义 ASL计算 查找长度——在查找运算中,需要对比关键字的次数称为查找长度(有的教材也会把“空指针”的判定算作一次比较) 14,68,19,20,23,11这6个元素查一次就可以&…

分享73个节日PPT,总有一款适合您

分享73个节日PPT,总有一款适合您 73个节日PPT下载 链接:https://pan.baidu.com/s/1FG9Y-9yR31Y-fs3zxKI4Pg?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

轨道交通数字孪生可视化平台,助力城市交通运营智慧化

随着经济和科技的快速发展,轨道交通运营管理在日常操作者面临各种挑战。数字孪生技术被认为是未来轨道交通运营管理的重要手段之一。它可以提高轨道交通的运营效率和安全性,助力城市交通运营智慧化。以城市轨道交通运维管理业务需求为导向,从数据感知、融…

备忘录不小心删了怎么办?如何找回我的备忘录?

如果你的记性不太好,或者每天需要记住、完成的事情很多,那么养成随手记事的好习惯是非常有必要的。因为手机是每个成年人都会随身携带的电子设备,所以直接在手机上记录事情比较简单、便捷。而手机备忘录、便签、笔记等工具类软件,…

docker搭建nginx实现负载均衡

docker搭建nginx实现负载均衡 安装nginx 查询安装 [rootlocalhost ~]# docker search nginx [rootlocalhost ~]# docker pull nginx准备 创建一个空的nginx文件夹里面在创建一个nginx.conf文件和conf.d文件夹 运行映射之前创建的文件夹 端口:8075映射80 docker…