视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验

264、x265、libaom、vvenc 对比测试实验

  1. 测试机器配置:Apple M1 Pro -16G
  2. 编码器版本(选择自己编译):所有源码都是当前最新更新的状态,此外各类编码具体的编译过程可参考我的相关系列博客。
编码器GitHub
x264git clone https://code.videolan.org/videolan/x264.git
x265git clone https://bitbucket.org/multicoreware/x265_git.git
libaomgit clone https://aomedia.googlesource.com/aom
vvencgit clone https://github.com/fraunhoferhhi/vvenc.git
  1. 测试序列
序列分辨率格式位深帧数复杂度
parkjoy1920x1080yuv4208 bit500复杂
KristenAndSara1280x720yuv4208 bit600简单
  • parkjoy 示意图:
    在这里插入图片描述

  • KristenAndSara 示意图:
    在这里插入图片描述

  1. 命令行:统一设置 fps=25,其他保持默认,不区分 gop、帧类型等编码参数,libaom 也设置了额外参数,默认的需要 2pass 且太慢了。
编码器命令行
x264./x264 --input-res wxh input.yuv --fps 25 --bitrate x -o 264.h264
x265./x265 --input input.yuv --input-res wxh --fps 25 --bitrate x -o 265.h265
libaom./aomenc -w 1920 -h 1080 --fps=25/1 --target-bitrate=10000 --passes=1 --cpu-used=6 -o av1.ivf parkjoy1920x1080.yuv
vvenc./vvencFFapp -i parkjoy1920x1080.yuv --Size 1920x1080 -fr 25 --NumPasses 1 --TargetBitrate 8000k --BitstreamFile out.h266
  1. FFmpeg 计算 psnr 命令行
 ./ffmpeg -s <宽x高> -pix_fmt <像素格式> -i <受损YUV文件>  -s <宽x高> -pix_fmt <像素格式> -i <原始YUV文件>  -lavfi psnr=stats_file=psnr.log -f null -
  1. 测试实验数据
    :ffmpeg 解码 h266 文件无法正确解码,但 ffplay 播放正确,还未排查到具体原因,所以 psnr 直接用的 vvenc 自带的计算方法 】
视频序列编码器输入 bitrate实际 bitratepsnrtime
parkjoyx26420000 kb/s19381 kb/sy:32.080550 u:34.560996 v:36.78950741.46 fps
parkjoyx26515000 kb/s14368 kb/sy:32.000424 u:34.508438 v:36.65860519.91 fps
parkjoylibaom10000 kb/s11786 kb/sy:32.142619 u:34.909916 v:37.1235071.48fps(good 模式太慢了,可以选择 rt 模式,但压缩率又不行)
parkjoyvvenc8000kb/s8403 kb/sy:32.0261 u:34.9815 v:37.73770.2 fps
视频序列编码器输入 bitrate实际 bitratepsnrtime
KristenAndSarax2642000 kb/s2007 kb/sy:43.002695 u:47.506855 v:48.331598103 fps
KristenAndSarax2651000 kb/s1003 kb/sy:42.910271 u:47.303976 v:48.19542287 fps
KristenAndSaralibaom400 kb/s395 kb/sy:42.900337 u:48.015101 v:48.90922010 fps
KristenAndSaravvenc500kb/s490 kb/sy:42.9935 u:48.1547 v:49.12801.2 fps
  1. libaom 中的 rt 模式和 good 模式
视频模式码率psnrtime
KristenAndSaragood395 kb/sy:42.900337 u:48.015101 v:48.90922010 fps
KristenAndSarart1448 kb/sy:42.970161 u:46.734927 v:47.50580390 fps
  1. 结论
标准压缩率(1080p)压缩率(720p)
H2641×(基准)1×(基准)
H26525.86%提升50% 提升
AV139.18%提升80% 提升
H26656.64%提升75.58% 提升
  • H265 相较于 H264,BD-rate 平均可以提升 25.86% ~ 50%;
  • AV1 相较于 H264,BD-rate 平均可以提升39.18% ~ 80%;
  • H266 相较于 H264,BD-rate 平均可以提升 56.64% ~ 75.58%;
  • 可以发现,在低分辨率简单场景视频下,AV1 的 RD 能力还比 H266 略微强点;
  • libaom 中的 rt 模式下编码速度会更好,但 RD 能力不如 good 模式;
  • 所得到的结论是粗略的,没有完全对齐所有编码参数,仅作参考。

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

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

相关文章

【极速版 -- 大模型入门到进阶】LORA:大模型轻量级微调

文章目录 &#x1f30a; 有没有低成本的方法微调大模型&#xff1f;&#x1f30a; LoRA 的核心思想&#x1f30a; LoRA 的初始化和 r r r 的值设定&#x1f30a; LoRA 实战&#xff1a;LoraConfig参数详解 论文指路&#xff1a;LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE M…

初识MySQl · 内置函数

目录 前言&#xff1a; 日期类函数 字符串函数 数学类函数 其他函数 前言&#xff1a; 在前文的学习我们已经简单了解了部分函数&#xff0c;比如count()函数什么的&#xff0c;今天我们主要是笼统的学习一下MySQL中的函数&#xff0c;仅仅从使用的角度来学习&#xff0c…

Python每日一题(7)

Python每日一题 2025.3.27 一、题目二、分析三、自己源代码四、deepseek答案五、源代码与ai分析 一、题目 question["""编写程序,生成包含20个随机数的列表,然后将前十个元素升序排列,后10个元素降序排列,并输出结果""" ]二、分析 今天本来写了…

一些需要学习的C++库:CGAL和Eysshot

写在前面&#xff1a; 从开始工作到现在&#xff0c;去过多家公司&#xff0c;多个行业&#xff0c; 虽然大部分时间在通信业&#xff0c;但也有其它的行业的工作没有做完&#xff0c;但也很感兴趣。每次想要研究一下时&#xff0c;总是想不起来。 这里写一些信息&#xff0c;…

嵌入式linux系统中对应的文件锁详细实现方法

//文件锁:flock用于对文件加锁或者解锁但是只能产生建议性锁,并且同一个文件不会同时 具有共享锁和互斥锁。 第一:flock函数对应的要素 头文件: #include <sys/file.h> 函数原型:int flock(int fd,int operation) 参数: fd:表示需要加锁文件的文件描述符 operati…

WEB或移动端常用交互元素及组件 | Axure / 元件类型介绍(表单元件、菜单和表格 、流程元件、标记元件)

文章目录 引言I Axure / 元件类型介绍基本元件表单元件菜单和表格流程元件标记元件II Axure 基础Axure / 常用功能介绍Axure / 常用元素实例Axure / 动态交互实例Axure / 常用设计分辨率推荐III Axure / 创建自己的元件库元件库作用元件库的创建及使用引言 I Axure / 元件类型介…

如何排查C++程序的CPU占用过高的问题

文章目录 可能的原因程序设计的BUG系统资源问题恶意软件硬件问题 通常步骤一个简单的问题代码在windows平台上如何排查Windows Process ExplorerWinDBG 在Linux平台如何排查使用TOP GDBPerf 可能的原因 程序设计的BUG 有死循环低效算法与数据结构滥用自旋锁频繁的系统调用&a…

19726 星际旅行

19726 星际旅行 ⭐️难度&#xff1a;困难 &#x1f31f;考点&#xff1a;Dijkstra、省赛、最短路问题、期望、2024 &#x1f4d6; &#x1f4da; import java.util.*;public class Main {static int N 1005;static ArrayList<Integer>[] g new ArrayList[N]; // …

vue3 + ant-design-vue4实现Select既可以当输入框也可以实现下拉选择

近日工作中&#xff0c;遇到一个需求&#xff0c;就是select的有一个前置切换条件&#xff0c;有些条件需要时输入&#xff0c;有些条件需要时下拉选择&#xff0c;但是在切换的时候&#xff0c;后面的这个输入或者选择组件不能闪烁&#xff0c;于是也就只能采用select去实现&a…

Unity UGUI - 六大基础组件

目录 一、Canvas上 1. Canvas&#xff1a;复制渲染子UI控件 2. ✨Canvas Scaler✨&#xff1a;画布分辨率自适应 3. Graphics Raycaster&#xff1a;射线事件响应 4. ✨Rect Transform✨&#xff1a;UI位置锚点对齐 二、Event System上 5. Event System 6. Standalone …

VSCode中使用Markdown以及Mermaid实现流程图和甘特图等效果

前言 Markdown&#xff08;简称md&#xff09;这种文件格式&#xff0c;渐渐盛行起来。有点类似html格式的意思。特别是内嵌的对Marmaid的支持&#xff0c;对流程图、甘特图等的绘制&#xff0c;都非常的方便。 一、安装Markdown的插件 二、创建.md文件 新建一个Markdown文件&…

如何让 history 记录命令执行时间?Linux/macOS 终端时间戳设置指南

引言:你真的会用 history 吗? 有没有遇到过这样的情况:你想回顾某个重要命令的执行记录,却发现 history 只列出了命令序号和内容,根本没有时间戳?这在运维排查、故障分析、甚至审计时都会带来极大的不便。 想象一下,你在服务器上误删了某个文件,但不知道具体是几点执…

css—— object-fit 属性

一&#xff0c;属性值 object-fit: fill | contain | cover | none | scale-down;原本的图片&#xff1a; 属性值效果&#xff1a; <!DOCTYPE html> <html> <head><style>.container {display: flex;flex-wrap: wrap;gap: 20px;}.box {width: 200px…

端游熊猫脚本游戏精灵助手2025游戏办公脚本工具!游戏脚本软件免费使用

在当下这个崇尚高效与便捷的时代&#xff0c;自动化工具已然成为诸多开发者与企业提升工作效率的关键选择。熊猫精灵脚本助手作为一款极具实力的自动化工具&#xff0c;凭借其多样的功能以及广泛的应用场景&#xff0c;逐步成为众多用户的首要之选。 熊猫精灵脚本助手整合了丰…

Docker安装MySql 8.0

1、验证环境 docker -v使用上面的命令检查一下本机的docker的运行环境。执行完成之后&#xff0c;会输出docker的版本号 我本地输出以下内容: Docker version 27.5.1, build 9f9e4052、拉取镜像 docker pull mysql:8.0拉取mysql8.0版本对的镜像。正常情况如下: 如果报下面的…

Jmeter-负载测试

目录 一. 基础负载测试场景&#xff1a;固定并发用户数 1、线程组配置 2、HTTP请求配置 3、添加定时器 4、添加监听器 4.1 聚合报告 4.2 响应时间图 4.3 查看结果树 5、结果分析指标 二. 阶梯式加压场景&#xff08;逐步增加并发&#xff09; 1、插件安装 2、阶梯配…

【新手初学】读取数据库数据

利用注入点让SQL注入语句执行读取数据库数据相关的操作&#xff01; 以下均以pikachu靶场的字符型注入为例进行介绍说明 一、读取用户名&#xff0c;数据库版本信息 在原URL后面添加如下代码&#xff1a; union select user(),version(&#xff09;-- 效果&#xff1a; 补…

Ubuntu与Windows之间相互复制粘贴的方法

一、打开Ubuntu终端 二、卸载已有的工具 sudo apt-get autoremove open-vm-tools 三、安装工具 sudo apt-get install open-vm-tools-desktop 四、重启 直接输入reboot 注&#xff1a;有任何问题欢迎评论区交流讨论或者私信&#xff01;

免去繁琐的手动埋点,Gin 框架可观测性最佳实践

作者&#xff1a;牧思 背景 在云原生时代的今天&#xff0c;Golang 编程语言越来越成为开发者们的首选&#xff0c;而对于 Golang 开发者来说&#xff0c;最著名的 Golang Web 框架莫过于 Gin [ 1] 框架了&#xff0c;Gin 框架作为 Golang 编程语言官方的推荐框架 [ 2] &…

【QT】新建QT工程(详细步骤)

新建QT工程 1.方法(1)点击new project按钮&#xff0c;弹出对话框&#xff0c;新建即可&#xff0c;步骤如下&#xff1a;(2) 点击文件菜单&#xff0c;选择新建文件或者工程&#xff0c;后续步骤如上 2.QT工程文件介绍(1).pro文件 --》QT工程配置文件(2)main.cpp --》QT工程主…