编译 ffmpeg 以支持AVS格式视频解码与解码

news2024/9/20 12:41:34

前言

当前文章介绍如何在Linux下使用FFmpeg转码其他视频格式到AVS格式的指南,包括编译FFmpeg以支持XAVS编码和如何使用FFmpeg进行转码。

AVS (Audio Video Coding Standard) 格式是一种由中国主导制定的视频编码标准,全称为“中国数字音视频编解码技术标准”(China Digital Audio Video Coding Standard),主要应用于高清电视广播、数字电视、网络视频传输等领域。AVS 标准提高视频压缩效率,降低计算复杂度,并减少专利费用,为中国及其他国家提供一种自主可控的视频编码技术。

AVS 视频编码标准由多个子标准组成,其中 AVS1-P2(也称为 AVS+)是最广泛使用的版本之一,被设计用于高清晰度电视广播服务,并被中国数字地面电视广播标准 DTMB 采纳为推荐的视频编码格式。AVS1-P2 提供了与 H.264/AVC 相当的压缩效率,同时减少了计算复杂度,使得其在硬件实现上更为经济高效。

技术特点

  • 高效压缩:AVS 标准采用了多种先进的压缩技术,如帧内预测、帧间预测、运动补偿、熵编码等,以实现高效的视频数据压缩。
  • 低计算复杂度:与 H.264/AVC 相比,AVS 设计上更加注重计算效率,减少了复杂的运算过程,从而降低了硬件实现的成本。
  • 自主知识产权:AVS 作为一种中国主导的标准,避免了因专利费而产生的高额成本,对于国内厂商来说具有一定的成本优势。
  • 支持多种应用场景:AVS 支持多种视频分辨率和帧率,适用于从标清到高清甚至超高清的各种视频应用场合。

一个avs2编码的视频信息如下:

[davs2 info]: Manager 26c5cacfc00: Sequence Resolution: 3840x2160.
[davs2 info]: Dec[ 0] 26c5cad0780: COI of the first frame is 25.
[davs2 info]: davs2: 1.6.205 5313a0a9f7e63110.10, 2022-02-20 13:39:38
[davs2 info]: CPU Capabilities:  MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 FMA3 LZCNT BMI2
[davs2 info]: Manager 26c5cacfc00: using 1 thread(s): 1(frame/AEC)+0(pool/REC), 2 tasks
    "streams": [
        {
            "index": 0,
            "codec_name": "avs2",
            "codec_long_name": "AVS2-P2/IEEE1857.4",
            "codec_type": "video",
            "codec_tag_string": "[0][0][0][0]",
            "codec_tag": "0x0000",
            "width": 3840,
            "height": 2160,
            "coded_width": 3840,
            "coded_height": 2160,
            "closed_captions": 0,
            "film_grain": 0,
            "has_b_frames": 0,
            "pix_fmt": "yuv420p10le",
            "level": -99,
            "refs": 1,
            "r_frame_rate": "50/1",
            "avg_frame_rate": "50/1",
            "time_base": "1/1000",
            "start_pts": 23,
            "start_time": "0.023000",
            "extradata_size": 45,
            "disposition": {
                "default": 0,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0,
                "captions": 0,
                "descriptions": 0,
                "metadata": 0,
                "dependent": 0,
                "still_image": 0
            },
            "tags": {
                "DURATION": "00:00:06.163000000"
            }
        },
        {
            "index": 1,
            "codec_name": "ac3",
            "codec_long_name": "ATSC A/52A (AC-3)",
            "codec_type": "audio",
            "codec_tag_string": "[0][0][0][0]",
            "codec_tag": "0x0000",
            "sample_fmt": "fltp",
            "sample_rate": "48000",
            "channels": 6,
            "channel_layout": "5.1(side)",
            "bits_per_sample": 0,
            "r_frame_rate": "0/0",
            "avg_frame_rate": "0/0",
            "time_base": "1/1000",
            "start_pts": 24,
            "start_time": "0.024000",
            "bit_rate": "448000",
            "disposition": {
                "default": 0,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0,
                "captions": 0,
                "descriptions": 0,
                "metadata": 0,
                "dependent": 0,
                "still_image": 0
            },
            "tags": {
                "DURATION": "00:00:06.008000000"
            }
        }
    ]
}

ffplay播放效果如下:

image-20240730161658034

播放效果:

image-20240730161758597

播放效果:

image-20240730161947359

一、如何编译FFmpeg以支持XAVS编码

1. 下载FFmpeg源代码

  • 使用Subversion(SVN)从FFmpeg官方仓库下载FFmpeg源代码:

    svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
    

2. 下载XAVS源代码

  • 从SourceForge下载XAVS源代码:

    svn co https://xavs.svn.sourceforge.net/svnroot/xavs/trunk xavs
    

3. 编译XAVS代码

  • 安装XAVS并将其头文件(.h)和静态库文件(.a)安装到系统目录,例如 /usr/local

    cd xavs
    ./configure --enable-shared
    make
    make install
    

4. 配置FFmpeg

  • 在配置FFmpeg时添加以下选项以启用GPL许可证和XAVS支持:

    cd ../ffmpeg
    ./configure --enable-gpl --enable-libxavs
    
  • 确保FFmpeg项目也安装到与XAVS库相同的目录,本例中为 /usr/local

    make
    make install
    

5. 检查XAVS支持

  • 运行以下命令来验证FFmpeg是否成功构建了AVS视频编码器:

    ./ffmpeg -formats | less
    
  • 如果看到类似 cavsvideo raw Chinese AVS video 的输出,则表示AVS视频编码器已成功集成。

二、如何使用FFmpeg转码视频到AVS

2.1 转码命令示例

  • 下面的命令展示了如何使用FFmpeg将视频转码成AVS格式:

    ./ffmpeg -vframes 300 -cqp 29 -refs 2 -bf 2 -g 16 -s widthxheight -i "INPUT_FILE_NAME" -vcodec libxavs "OUTPUT_FILE_NAME"
    
  • 其中:

    • -vframes: 设置要编码的帧数。
    • -cqp: 设置常量量化参数。
    • -refs: 设置参考帧的数量。
    • -bf: 设置启用的B帧数量。
    • -g: 设置GOP(图像组)大小,即I帧之间的距离。
    • -s: 设置分辨率,格式为宽度x高度。
    • -i: 指定输入文件名。
    • -vcodec libxavs: 指定使用XAVS编码器。

2.2 常用参数

  • 一些常用的FFmpeg参数及其含义:
    • -b-vb: 设置比特率或视频比特率。
    • -s: 分辨率,格式为宽度x高度。
    • -r: 帧速率。
    • -refs: 参考帧的数量。
    • -bf: 启用的B帧数量。
    • -g: GOP大小,即I帧之间的距离。
    • -cqp: 常量量化参数,应为大于等于0的整数。
    • -me_method: 运动估计方法。
    • -qmin/-qmax: 最小/最大量化步长。
    • -vframes: 要编码的帧数。

2.3 示例

  • H.264转AVS(不含B帧):

    ./ffmpeg -i test0.avi -g 60 -b 600k -vcodec libxavs output1.cavs
    
  • H.264转AVS(含B帧):

    ./ffmpeg -i test0.avi -b 600k -bf 2 -vcodec libxavs output2.cavs
    

以上步骤和命令可以用来在Linux环境下使用FFmpeg将视频文件转码为AVS格式。

三、VLC、mpc-hc如何集成AVS?

详情看这里:https://gitee.com/zhengtianbo

3.1 ffmpeg集成AVS

链接:https://gitee.com/zhengtianbo/FFmpeg-avs2-avs3

直接下载编译好的ffmpeg:https://gitee.com/zhengtianbo/FFmpeg-avs2-avs3/releases/tag/A5.X_222

直接下载地址:https://gitee.com/zhengtianbo/FFmpeg-avs2-avs3/releases/download/A5.X_222/ffmpeg-V5.X-avs23-20220222_davs2-10bit-Win10-X64-EXE.zip

播放效果:

image-20240730162010741

3.2 LAVFilters增加CAVS-AVS2-AVS3解码器

链接:https://gitee.com/zhengtianbo/LAVFilters-GB-CAVS-AVS2-AVS3-decoder

直接下载:https://gitee.com/zhengtianbo/LAVFilters-GB-CAVS-AVS2-AVS3-decoder/releases

3.3 VLC 4.0播AVS3_AVS2_CAVS视频

链接:https://gitee.com/zhengtianbo/AVS123_VLC4_Player

直接下载编译好的VLC:https://gitee.com/zhengtianbo/VLC3-AVS3AVS2CAVS/releases/download/vlc3.0.11.1AVS3_10-AVS2-CAVS/vlc-3.0.11.1-dev-AVS3_10b-AVS2-CAVS(TS_MKV)Win64_EXE%E8%BF%90%E8%A1%8C%E6%96%87%E4%BB%B6-avs2fix.zip

编译好的VLC下载地址:https://gitee.com/zhengtianbo/VLC3-AVS3AVS2CAVS/releases

3.4 mpc-hc增加CAVS-AVS2-AVS3解码器

链接:https://gitee.com/zhengtianbo/cavs-avs2-avs3_decoder_added_to_mpc_hc

播放效果:

image-20240730161956615

image-20240730162110410

image-20240730162159075

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

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

相关文章

将星 x17 安装ubuntu 20.04 双系统

准备工作,包含关闭快速启动,关闭Secret Boot 1.进入控制面板选择小图标,找到电源选项 2.点击更改当前不可用的设置,关闭快速启动 3.开机启动时快速按F2,进入BIOS 4.选择Setup Utiltity,选择Security&#…

鲁大师8月新机性能/流畅/AI/久用榜:新机节奏放缓,但不乏小惊喜

虽说8月紧邻开学季,但机圈发布新机的节奏相较7月,明显放缓不少,或许是华为和苹果将在9月10日这天再次正面硬刚,让其他厂商感觉“亚历山大”,不冒险当出头鸟;亦或是各手机厂商正为骁龙8 Gen4和天玑9400新旗舰…

C++入门9——list的使用

目录 1.什么是list? 2.list的构造 3.list迭代器的使用(list iterator) 4.list capacity 5.list modifiers 6.list的其他操作 1.什么是list? 在官网中,对list有这样的介绍: Lists are sequence co…

如何在VSCODE中查看西门子PLC的SCL程序?

如何在VSCODE中查看西门子PLC的SCL程序? 首先,下载并安装VSCODE, 安装完成后,默认为英文界面,点击左侧扩展栏,搜索中文语言包,并点击安装,安装完成后会提示重启,重启之后就会显示中文, 同样,在扩展中搜索SCL插件包,并点击安装, 安装完成之后,可以新建一个文本文件…

在 Elastic 8.15 中使用最少的代码快速构建 RAG

作者:来自 Elastic Han Xiang Choong Elastic 8.15 已经发布,语义搜索比以往任何时候都更容易实现。 我们将介绍如何在 15 分钟内完成所有这些任务: 将你的文档存储在某些数据存储服务中,例如 AWS S3 Bucket设置 Elastic Search…

java项目docker部署时进行热部署

本文需要pontwiner进行配合操作 1.上传文件到对应服务器,可以通过xftp等文件上传工具进行文件上传 2.获取docker imagId XX为项目部署名称 例如:test-server docker ps -a |grep XX 3.复制文件到docker容器的/tmp目录下 docker cp XXXX.class im…

做seo要注意的各种细节,你都注意到了吗

在实施seo时,关注各种细节是至关重要的。 这些细节始于网站的初始设计,包括选择合适的主机、规划网站结构、优化网站内容,以及建立内部和外部链接的策略等。此外,确保网站对搜索引擎友好,涵盖从URL的设计到内容的优化…

kafka的安装和启动

一、kafka介绍 1,kafka简单介绍 kafka是一款分布式、支持分区的、多副本,基于zookeeper协调的分布式消息系统。最大的特性就是可以实时处理大量数据来满足需求。 2,kafka使用场景 1,日志收集:可以用kafka收集各种服务…

使用 Docker 部署和运行 RabbitMQ

使用 Docker 部署和运行 RabbitMQ 在本篇博客中,我将介绍如何通过 Docker 来运行 RabbitMQ 并使用其管理界面。还会讨论我在操作过程中遇到的常见问题及其解决方案。RabbitMQ 是一个开源的消息代理,用于跨应用程序发送、接收消息。在容器化环境中运行 R…

使用sysbench 简单测试io

sysbench最新版本地址 GitHub - akopytov/sysbench: Scriptable database and system performance benchmark centos在线安装 curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash sudo yum -y install sysbench 查看sysben…

vue3+ts封装类似于微信消息的组件

组件代码如下&#xff1a; <!--聊天页面-播放语言组件--> <template><div:class"[voice-message, { sent: isSent, received: !isSent }]":style"{ backgroundColor: backgroundColor }"click"togglePlayback"><!-- isSen…

解析查看elf文件的构成

x86下用clang编译一段c代码&#xff0c;编译成elf文件&#xff0c;读elf文件&#xff0c;dump出里面的所有段&#xff0c;并打印出段中的数据和含义以及汇编的内容 编写C代码 首先&#xff0c;编写一个简单的C程序&#xff0c;例如命名为example.c&#xff1a; 使用Clang编…

【YOLOv5模型部署】——TensorRT推理引擎安装与使用基于Flask的项目部署

声明&#xff1a;笔记是做项目时根据B站博主视频学习时自己编写&#xff0c;请勿随意转载&#xff01; 温馨提示&#xff1a;对于我的电脑没有Nvidia的独显&#xff0c;只有Intel的集显&#xff0c;最后导出时无法识别Nvidia显卡设备&#xff01;&#xff01;就没成功&#xf…

Java小白一文讲清Java中集合相关的知识点(四)

LinkedList底层结构 LinkedList底层实现了双向链表和双向队列特点可以添加任意元素&#xff0c;包括null,元素可以重复线程不安全&#xff0c;没有实现同步 LinkedList底层操作机制 LinkedList底层维护了一个双向链表LinkedList中维护了两个属性first和last分别指向首结点和…

如何启动vue ui,快速创建vue项目

1.查看自己是否已经安装了vue3.0脚手架版本&#xff0c;打开cmd命令框输入vue -V(大写为查看&#xff0c;此处查看的是脚手架的版本)。如果没有提示版本&#xff0c;而是命令不存在...则要进行下面的1.1操作 1.1安装Vue CIL&#xff0c;如果已安装&#xff0c;此步忽略。安装完…

计算机毕业设计选题推荐-中华诗词文化交流平台-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

快速搭建和运行Spring Boot项目的简易指南

对于非Java开发的后端开发人员而言&#xff0c;即便未曾接触过Java&#xff0c;也可能听说过Spring Boot这一框架。若想要快速搭建并运行一个Spring Boot项目&#xff0c;可以遵循以下步骤&#xff1a; 环境准备 **安装Java JDK&#xff1a;**确保您的开发环境中安装了Java J…

Android Studio编译时各类型网络超时优化方案

我们国家有很多长城&#xff0c;我觉得最重要的除了大家耳熟能详的西起嘉峪关&#xff0c;东至山海关的万里长城&#xff0c;还有一个叫GFW的国家长城防火墙&#xff0c;这个防火墙起初仅是为了禁止用户访问政治敏感信息&#xff0c;后来逐渐强大。。。目前最新进展是我们已和世…

142.环形链表二-力扣

142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fasthead;struct ListNode *slowhead;while(fast && fast->next){fast fast->next->next;slow slow->next;if(fasts…

Python 使用中点查找矩形的角(Find Corners of Rectangle using mid points)

考虑一个矩形 ABCD&#xff0c;我们给出了边 AD 和 BC 中点&#xff08;分别为 p 和 q&#xff09;的坐标以及它们的长度 L&#xff08;AD BC L&#xff09;。现在给定参数&#xff0c;我们需要打印 4 个点 A、B、C 和 D 的坐标。 例子&#xff1a; 输入&#xff1a;p (1,…