一个有趣的avs编码器(注意,是avs,而不是avs2噢)

article/2025/8/28 8:45:09

本章附件是一个清华大学写的关于avs编解码器:
https://download.csdn.net/download/weixin_43360707/87793302
该编码器遵循了stuffing bit:
在这里插入图片描述

打开文件夹后,如下:
在这里插入图片描述

可以看出这个是个跨平台的工程,提供了windows vs2015的工程文件sln,以及linux的makefile,因为本次我们考虑的是avs encoder,所以进入到lencod:
在这里插入图片描述
看到里面有个makefile,这个就是我们的makefile文件。
我们执行

make

结果出现下面错误:
在这里插入图片描述
我们进入到文件fast_me.c中,删除PartCalMad前面的inline
在这里插入图片描述
重新编译,通过,在bin目录下看到如下:
在这里插入图片描述
lencod.exe就是我们要的编码器。
打开encoder.cfg文件,修改:

InputFile              = "/workspace/encoder/libx264_640x360_baseline_5_frames-420.yuv" # Input sequence, YUV 4:2:0/4:2:2
SourceWidth            = 640         # Image width  in Pels
SourceHeight           = 360         # Image height in Pels
TraceFile              = "trace_enc.txt"
ReconFile              = "test_rec.yuv"
OutputFile             = "test-cai.avs"

在这里插入图片描述
然后执行:
lencod.exe -f encoder.cfg就可以正常编码了:
蔡振成_Zhencheng > 一个有趣的avs编码器(注意,是avs,而不是avs2噢) > image2023-5-17_16-51-48.png
用mediainfo查看编码后的视频:
蔡振成_Zhencheng > 一个有趣的avs编码器(注意,是avs,而不是avs2噢) > image2023-5-17_16-52-43.png
对于avs 1的尺寸,有下列严格要求:

/*
*************************************************************************
* Function:Checks the validity of input parameters in the specified level
* Input:
* Output:
* Return: 
* Attention:
* Author:  LiShao, Tsinghua, 20070327
*************************************************************************
*/
static void LevelCheck()
{float framerate[8]={24000/1001,24,25,30000/1001,30,50,60000/1001,60};if(input->frame_rate_code<1||input->frame_rate_code>8){printf("\n Undefined frame_rate in all levels. \n");exit(0);}switch (input->level_id){case 0x10:case 0x11: //rm52k{if(input->img_width>352){printf("\n Image Width exceeds level 2.0 restriction.\n");exit(-1);}else if(input->img_height>288){printf("\n Image height exceeds level 2.0 restriction.\n");exit(-1);}else{if(input->frame_rate_code>5){printf("\n Current frame_rate is not support in Level_2.0 .\n");exit(-1);}else {if((long)(input->img_width)*(long)(input->img_height)*(framerate[input->frame_rate_code-1])>2534400){printf("\n Luma Sampling Rate invalid for level 2.0.\n");exit(-1);}}}if((long)(input->img_width)*(long)(input->img_height)/256>396){printf("\n The number of macroblock per frame exceeds 396 in level 2.0.\n");exit(-1);}if((long)(input->img_width)*(long)(input->img_height)*framerate[input->frame_rate_code-1]/256>11880){printf(" \n The number of macroblock per second exceeds 11880 in level 2.0.\n");exit(-1);}if(input->chroma_format!=1){printf("\n In level 2.0 only format 4:2:0 is supported.\n");exit(-1);}//rm52kif(input->level_id==0x10 && input->bbv_buffer_size>122880){printf("\n Invalid Bbv_Buffer_Size input.\n");exit(-1);}if(input->level_id==0x11 && input->bbv_buffer_size>311296){printf("\n Invalid Bbv_Buffer_Size input.\n");exit(-1);}//rm52kbreak;  }case 0x20:{if(input->img_width>720){printf("\n Image Width exceeds level 4.0's restriction.\n");exit(-1);}else if(input->img_height>576){printf("\n Imgage Height exceeds level 4.0's restriction.\n");exit(-1);}else{if(input->frame_rate_code>5){printf("\n Current frame_rate is not support in Level_4.0 .\n");exit(-1);}else{if((long)(input->img_width)*(long)(input->img_height)*(long)(framerate[input->frame_rate_code-1])>10368000){printf("\n Luma Sampling Rate invalid for level 4.0.\n");exit(-1);}		}}if((long)(input->img_width)*(long)(input->img_height)/256>4050){printf(" \n The number of macroblock per frame exceeds 1,620 for Level_4.0.\n");exit(-1);}if((long)(input->img_width)*(long)(input->img_height)*framerate[input->frame_rate_code-1]/256>40500){printf(" \n The number of macroblock per second exceeds 40500 in Level_4.0.\n");exit(-1);}if(input->chroma_format!=1){printf("\n In level 4.0 only format 4:2:0 is supported.\n");exit(-1);}if(input->bbv_buffer_size>1228800)  //rm52k{printf("\n Invalid Bbv_Buffer_Size input.\n");exit(-1);}break;}case 0x22:{if(input->img_width>720){printf("\n Imgage Width exceeds level 4.2's restriction.\n");exit(-1);}else if(input->img_height>576){printf("\n Image Height exceeds level 4.2's restriction.\n");exit(-1);}else{if(input->frame_rate_code>5){printf("\n Current frame_rate is not support in Level_4.2 .\n");exit(-1);}else{if((long)(input->img_width)*(long)(input->img_height)*(long)(framerate[input->frame_rate_code-1])>10368000){printf("\n Luma Sampling Rate invalid for level 4.2.\n");exit(-1);}}}if((long)(input->img_width)*(long)(input->img_height)/256>1620){printf(" \n The number of macroblock per frame exceeds 1,620 for Level_4.2.\n");exit(-1);}if((long)(input->img_width)*(long)(input->img_height)*framerate[input->frame_rate_code-1]/256>40500){printf(" \n The number of macroblock per second exceeds 40500 in Level_4.2.\n");exit(-1);}if(input->chroma_format!=1&&input->chroma_format!=2){printf("\n In level 4.2 only format 4:2:0 and 4:2:2 are supported.\n");exit(-1);}if(input->bbv_buffer_size>1851392)  //rm52k{printf("\n Invalid Bbv_Buffer_Size input.\n");exit(-1);}break;}case 0x40:case 0x41:  //rm52k{if(input->img_width>1920){printf("\n Imgage Width exceeds level 6.0's restriction.\n");exit(-1);}else if(input->img_height>1152){printf("\n Image Height exceeds level 6.0's restriction.\n");exit(-1);}else{if((long)(input->img_width)*(long)(input->img_height)*(long)(framerate[input->frame_rate_code-1])>62668800){printf("\n Luma Sampling Rate invalid for level 6.0.\n");exit(-1);}}	if((long)(input->img_width)*(long)(input->img_height)/256>8160){printf(" \n The number of macroblock per frame exceeds 8160 for Level_6.0.\n");exit(-1);}if((long)(input->img_width)*(long)(input->img_height)*framerate[input->frame_rate_code-1]/256>244800){printf(" \n The number of macroblock per second exceeds 244800 in Level_6.0.\n");exit(-1);}if(input->chroma_format!=1){printf("\n In level 6.0 only format 4:2:0 is supported.\n");exit(-1);}//rm52kif(input->level_id==0x40 && input->bbv_buffer_size>2457600) {printf("\n Invalid Bbv_Buffer_Size input.\n");exit(-1);}if(input->level_id==0x41 && input->bbv_buffer_size>6144000) {printf("\n Invalid Bbv_Buffer_Size input.\n");exit(-1);}//rm52kbreak; }		case 0x42:{if(input->img_width>1920){printf("\n Imgage Width exceeds level 6.2's restriction.\n");exit(-1);}else if(input->img_height>1152){printf("\n Imgage Height exceeds level 6.2's restriction.\n");exit(-1);}else{if((long)(input->img_width)*(long)(input->img_height)*(long)(framerate[input->frame_rate_code-1])>62668800){printf("\n Luma Sampling Rate invalid for level 6.2.\n");exit(-1);}}if((long)(input->img_width)*(long)(input->img_height)/256>8160){printf(" \n The number of macroblock per frame exceeds 8160 for Level_6.2.\n");exit(-1);}if((long)(input->img_width)*(long)(input->img_height)*framerate[input->frame_rate_code-1]/256>244800){printf(" \n The number of macroblock per second exceeds 244800 in Level_6.2.\n");exit(-1);}if(input->chroma_format!=1&&input->chroma_format!=2){printf("\n In level 6.2 only format 4:2:0 and 4:2:2 are supported.\n");exit(-1);}if(input->bbv_buffer_size>3686400)  //rm52k{printf("\n Invalid Bbv_Buffer_Size input.\n");exit(-1);}break;}default: {printf("\n No such level_ID. \n");exit(-1);}}}

http://chatgpt.dhexx.cn/article/9PIJ9eH0.shtml

相关文章

新一代视频编码标准:HEVC、AVS2和AV1性能对比报告

转自&#xff1a;http://media.pkusz.edu.cn/achievements/?p138 H.265/HEVC 距离H.265/HEVC标准正式发布已经有4年多的时间&#xff0c;虽然其压缩效率比H.264/AVC高出一倍&#xff0c;可以为视频公司节约带宽成本&#xff0c;但H.264仍是目前最流行的视频编码格式。除了复杂…

【AVS系列】AVS2参考软件RD17.0

Date: 2019-4-16 前言 AVS2标准从2017年开始批准使用&#xff0c;至今也有2年了&#xff0c;传说这个标准是对标H265&#xff0c;压缩效率在一些场景下的压缩率优于H.265&#xff0c;但是当前该标准的推广使用仍旧较少&#xff0c;主要用于广电和卫星电视传输。本文主要对AVS2标…

AVS2实时编码器xavs2的运行

Windows10 下 AVS2实时编码器xavs2的下载&#xff0c;编译&#xff0c;运行 xavs2的下载网址&#xff1a; https://gitee.com/pkuvcl/xavs2 可以选择master版本&#xff0c;或者tag版本&#xff0c;具体区别我也不太清楚&#xff0c;我的是1.3版本&#xff0c;我是下载最先的t…

【X265】Win10环境编译FFmpeg,集成 x264、x265、avs2

在Win10中编译完x264、x265后&#xff0c;开始编译FFmpeg&#xff0c;并将集成这几个主流视频编解码算法 准备 系统环境&#xff1a; Win10 VS2019 编译环境&#xff1a; Mingw64 msys2 cmake yasm nasm 编码算法&#xff1a;x264_161、x265_3.3、avs2&#xff08;xavs2…

一个有趣的avs2编码器

该avs2编码器是清华大学开发的一个参考编解码器&#xff1a; https://mp.csdn.net/mp_download/manage/download/UpDetailed 代开文件&#xff0c;结构如下&#xff1a; 考虑到我们是要使用&#xff0c;所以进入到build: 因为我们是linux,cd linux : 继续cd lencod: 编译&a…

AVS2 有点令人不敢相信

王荣刚&#xff1a;建立中国自主视频技术生态 文 / 王荣刚 整理 / LiveVideoStack 直播回放&#xff1a; https://www.baijiayun.com/web/playback/index?classid18072579438145&session_id201807260&tokenPsTmsjVpbRht681rrJ0J_Xl0fbNahfHFmF1doYNdca5XBFzghyiw1…

HEVC 、H.264与AVS2 视频压缩

Lab2 Report: HEVC 、H.264与AVS2 视频压缩 文章目录 Lab2 Report: HEVC 、H.264与AVS2 视频压缩1. 摘要2. 实验一&#xff1a;HEVC 视频编码与解码2.1 实验内容2.2 实验原理简述2.3 实验过程与分析2.3.1 实验环境与测试序列2.3.2 HEVC编码与解码&#xff08;1&#xff09;测试…

AVS2参考软件的运行

博主最近在接触学习AVS2的代码&#xff0c;在查找资料的时候发现关于AVS2的资料少之又少&#xff0c;光是将这个代码运行起来博主也是踏了一些坑&#xff0c;其实遇到的问题都是很简单的&#xff0c;只不过下载下来的代码并没有使用手册&#xff0c;一切都是自己一点点根据代码…

HEVC vs AVS2

AVS2高清实时编码器问世&#xff0c;性能大幅超越HEVC/H.265编码器x265 2015/9/23 北京大学深圳研究生院数字媒体研究中心研制成功首款基于AVS2标准的高清实时编码器uAVS2&#xff0c;性能大幅超越HEVC/H.265编码器x265。2014年12月&#xff0c;面向高清/超高清视频应用的新…

京东云视频云全面支持AVS2标准

一、概述 数字音视频编解码技术标准&#xff08;AVS&#xff09;工作组由国家原信息产业部科学技术司于2002年6月批准成立&#xff0c;目标是制定我国自有的音视频编解码标准。至今已有两代AVS标准正式发布并成为国家标准&#xff0c;目前第三代标准AVS3正在制定中。AVS2属于第…

实现一个avs2码流分析工具

最近在做avs2编码器项目&#xff0c;但是却没有成熟的码流分析工具&#xff0c;于是抽空学习了QT&#xff0c;业余时间写了一个avs2码流分析工具。 软件的界面如下&#xff1a; 图1、avs2码流分析仪界面 UI的左边框为NAL列表或者语法元素列表&#xff1a; 默认情况显示的是NAL列…

AVS2技术

转自http://www.avs.org.cn/avs2/technology.asp AVS2技术 AVS2采用了混合编码框架&#xff0c;整个编码过程包括帧内预测、帧间预测、变换量化、反量化反变换、环路滤波和熵编码等模块。具有如下技术特征&#xff1a; 图1 AVS2编码框架 1.灵活的编码结构划分 为了满足高清和…

AVS2解码图像管理

前言 对于解码器来说&#xff0c;解码得到的重建图像可能需要参与参考帧选择过程和输出排序过程。硬件解码器大概率不会将解码图像的相关操作硬件化&#xff0c;从而将此部分内容保留在软件端实现。 驱动工程师需要明确解码图像的管理逻辑&#xff0c;才能开发出硬件解码器的驱…

AVS2技术概述

转自公众号“智媒之音”&#xff1a;https://mp.weixin.qq.com/s?__bizMzI5Nzc4OTkxOQ&mid2247483715&idx1&snbb28272fd9b2baad9d4cccbe7c8ddcea&chksmecaef1f3dbd978e56764beb9d8ac69c753f3635716e9c449362f34f3c9e738870b1ffa00df4e#rd AVS2采用了传统的混…

【金三银四】设计模式面试题(2021最新版)

目录 前言 1.什么是设计模式 2.为什么要学习设计模式 3.设计模式分类 4.设计模式的六大原则 5.单例模式 5.1 什么是单例 5.2 哪些地方用到了单例模式 5.3 单例优缺点 5.4 单例模式使用注意事项&#xff1a; 5.5 单例防止反射漏洞攻击 5.6 如何选择单例创建方式 5.…

【Java架构师面试题】设计模式面试专题(共35题含答案)

设计模式&#xff08;DesignPattern&#xff09;是前辈们对代码开发经验的总结&#xff0c;是解决特定问题的一系列套路。它不是语法规定&#xff0c;而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 本篇为设计模式面试专题&#xff0c;总共收…

一文整理总结常见Java后端面试题系列——设计模式篇(2022最新版)

关于作者 &#x1f436; 程序猿周周 ⌨️ 短视频小厂BUG攻城狮 &#x1f93a; 如果文章对你有帮助&#xff0c;记得关注、点赞、收藏&#xff0c;一键三连哦&#xff0c;你的支持将成为我最大的动力 本文是《后端面试小册子》系列的第 1️⃣2️⃣ 篇文章&#xff0c;该系列将整…

C++面试题之设计模式及设计原则

六大设计原则 1&#xff09;单一职责原则 类的职责单一&#xff0c;对外提供一个功能&#xff0c;函数也支持&#xff1b; 2&#xff09;里氏替换原则 任何抽象类的出现都可以用他的实现类进行替换。 3&#xff09;依赖倒置原则 依赖于抽象&#xff0c;不要依赖具体实现&#…

23种设计模式(常见面试题)

23种设计模式&#xff08;常见面试题&#xff09; 1.什么是设计模式&#xff1f; 答&#xff1a; 设计模式&#xff08;Design Pattern&#xff09;是前辈们对代码开发经验的总结&#xff0c;是解决特定问题的一系列套路。是一套用来提高代码可复用性、可维护性、可读性、稳健…

设计模式面试题(总结最全面的面试题!!!)

文章目录 设计模式什么是设计模式为什么要学习设计模式设计模式分类设计模式的六大原则开放封闭原则&#xff08;Open Close Principle&#xff09;里氏代换原则&#xff08;Liskov Substitution Principle&#xff09;依赖倒转原则&#xff08;Dependence Inversion Principle…