FFmpeg 7.0重大更新

news2024/9/23 19:15:34

0、维护工作

对于任何成熟的软件,每个版本必然包含大量的bugfix、cleanup。维护工作不会出现在Changelog中,不是吸引眼球的东西,但是人力投入的占比最高,是一个项目长期稳定的保证。

维护工作必须得提两个人,Andreas Rheinhardt做了大量的cleanup和重构,Michael Niedermayer修复了大量的安全漏洞(不要被大量吓到,很多是整型溢出之类问题)以及非代码的维护工作。

粉丝福利,博主耗时2个月整理了一份详细的音视频开发学习路线,涵盖了音视频开发FFmmpeg、流媒体客户端、流媒体服务器、WebRTC、Android NDK开发、IOS音视频开发等等全栈技术栈,并提供了配套的免费领取C++音视频学习资料包、技术视频/代码,内容包括(FFmpeg ,WebRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs流媒体服务器,音视频通话等等)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

1、C语言版本升级——C11

编译FFmpeg执行configure阶段,configure脚本会检查编译器对C语言版本的支持情况。FFmpeg 7.0把对C语言版本要求提高到了C11(注意不要和C++11混淆),如果编译器支持C17,默认使用C17

如果还在使用陈旧的编译器版本,可能无法编译FFmpeg 7.0了。我不确定具体的编译器版本要求,大致情况是GCC 4.9有完整支持C11,Vistual Studio 2019对C11支持的比较全了。

2、H.266解码器

FFmpeg没有内置的AV1解码器,对FFmpeg项目来说是个沉重的打击,(虽然dav1d项目发展迅速,对AV1标准的推广起了很大作用)。

眼看着FFmpeg H.266又朝着AV1方向发展,只有第三方解码器封装,却不曾想柳暗花明,FFmpeg迎来了自己的H.266解码器,感谢Nuo Mi!

FFmpeg H.264解码器和H.264标准一样,是一代经典。

FFmpeg H.265解码器的实现过程很传奇,是GSOC(Google Summer of Code)项目带来的,但H.265解码器受H.265一滩浑水的专利问题纠缠,命途多舛,有开发、有停滞、有再次恢复生机,总体架构不甚理想。

FFmpeg H.266刚刚起步,还有很多工作要做。Nuo Mi搭建了高效的架构,FFmpeg作为音视频的hub,可以吸引更多资深专家一起完善H.266解码的功能——这是我的理想。现实可能是大厂藏着掖着卷到飞起也说不定

3、FFmpeg命令行多线程重构

FFmpeg命令行多线程重构的工作花了两年多的时间,在7.0版本终于完成了。关于这项工作,已经写过一篇文章《粗略解读FFmpeg cmd多线程重构》。多线程重构的好处就不多说了,最近逐渐发现了多线程重构带来的一些弊端,值得注意。

多线程重构为了提升吞吐量,增加了内存占用。如果纯CPU处理,后台服务器内存容量充足,影响很小。但是对于硬件编解码和filter,增加AVFrame的数量,可能导致GPU内存分配管理异常。这里还需要一些验证工作。

另外一个弊端是多线程重构过程中丢失了部分功能,比如另一篇文章里讲的视频预览功能。

4、ffplay支持硬件解码和渲染

这是我实现的功能,主要是方便开发测试,详见另一篇文档《为ffplay添加硬件解码和渲染》。

5、读写二维码

FFmpeg 7.0支持读写二维码,依赖两个第三方库:libqrencode和libquirc。

一些人可能觉得FFmpeg读写二维码的功能有些奇怪,但我知道QA同学早就在视频质量测试中用上了二维码,不过是用OpenCV来操作的。二维码抗压缩,可以用来检测视频有没有丢帧、重复、乱序等等有很大发挥空间。当然,最简单的是插小广告……

下面是一个添加二维码的示例,给每一帧打上索引顺序、时间戳、gmtime:

./ffmpeg -hwaccel cuda \
  -i foo.mp4 \
  -fps_mode passthrough \
  -an \
  -c:v hevc_nvenc \
  -vf qrencode=qrcode_width=main_w/5:text="%{n} %{pts} %{gmtime}" \
  -t 60 \
  bar.mp4

效果:

再来识别视频中的二维码:

./ffmpeg -i bar.mp4 -vf quirc -frames 10 -f null -

Found QR code at position 0,0 - 0,384 with payload: 3 0.166000 2024-03-31 14:45:00
Found QR code at position 0,0 - 0,384 with payload: 4 0.199333 2024-03-31 14:45:00
Found QR code at position 0,0 - 0,384 with payload: 5 0.232667 2024-03-31 14:45:00
Found QR code at position 0,0 - 0,384 with payload: 6 0.266000 2024-03-31 14:45:00
Found QR code at position 0,0 - 0,384 with payload: 7 0.299333 2024-03-31 14:45:00
Found QR code at position 0,0 - 0,384 with payload: 8 0.332667 2024-03-31 14:45:00
Found QR code at position 0,0 - 0,384 with payload: 9 0.366000 2024-03-31 14:45:00

除了打印文字信息,还会把信息加到每一帧的metadata中,供程序处理。

6、avfilter AI框架新增了Libtorch后端

FFmpeg 7.0支持三个后端:TensorFlow、OpenVINO、Libtorch。新增的Libtorch后端是Intel贡献的。

7、FLV支持HDR

Zhu Pengfei实现了Enhanced RTMP标准中的PacketTypeMetadata,从而支持了HDR的能力。

8、Android content URIs protocol

主要是方便Android上文件访问的,见另一篇文章《FFmpeg在Android上读取文件的方法》。

9、D3D12VA硬件加速解码H264, HEVC, VP9, AV1, MPEG-2、VC1

这部分也是Intel贡献的(此处@Nvidia和@AMD)。Windows开发我不熟悉,此处略过。

10、showinfo bitstream filter

FFmpeg本来有个avfilter实现的showinfo,是查看解码后的AVFrame信息的。现在增加了一个bsf showinfo,查看码流packet信息,可以作为一个方便的小工具吧,示例:


./ffmpeg -i foo.mp4 \
  -an \
  -c copy \
  -bsf:v showinfo \
  -f null -

n:      0 size:  21691 pts:0 pt:0 dts:-3600 dt:-0.04 ds:3600 d:0.04 
n:      1 size:     35 pts:3600 pt:0.04 dts:0 dt:0 ds:3600 d:0.04 
n:      2 size:     49 pts:7200 pt:0.08 dts:3600 dt:0.04 ds:3600 d:0.04 
n:      3 size:   4568 pts:14400 pt:0.16 dts:7200 dt:0.08 ds:3600 d:0.04 
n:      4 size:    577 pts:10800 pt:0.12 dts:10800 dt:0.12 ds:3600 d:0.04 
n:      5 size:   5205 pts:21600 pt:0.24 dts:14400 dt:0.16 ds:3600 d:0.04 
n:      6 size:    532 pts:18000 pt:0.2 dts:18000 dt:0.2 ds:3600 d:0.04 
……

11、MPEG-5 Essential Video Coding (EVC)

EVC基本上是和H.266(VVC)一起出来的标准,但推广貌似不太理想。作为一个新标准,FFmpeg里也算是有了支持,是通过第三方库实现的,依赖xevd、xeve这两个库,主要是三星赞助的。发展如何有待时间验证。

12、Loopback decoder

loopback decoder是FFmpeg命令新增的一个功能,它允许将编码器的输出再传给解码器,再走一遍解码、filter等处理,例如:


ffmpeg -i INPUT                                        \
  -map 0:v:0 -c:v libx264 -crf 45 -f null -            \
  -dec 0:0 -filter_complex '[0:v][dec:0]hstack[stack]' \
  -map '[stack]' -c:v ffv1 OUTPUT

看起来可以实现编码后同时输出编码质量信息,对编码器开发同学比较有用。

13、其他

还有些新增的codec和filter等,就不一一介绍了。复制完整Changelog如下:

- DXV DXT1 encoder

- LEAD MCMP decoder

- EVC decoding using external library libxevd

- EVC encoding using external library libxeve

- QOA decoder and demuxer

- aap filter

- demuxing, decoding, filtering, encoding, and muxing in the

ffmpeg CLI now all run in parallel

- enable gdigrab device to grab a window using the hwnd=HANDLER syntax

- IAMF raw demuxer and muxer

- D3D12VA hardware accelerated H264, HEVC, VP9, AV1, MPEG-2 and VC1 decoding

- tiltandshift filter

- qrencode filter and qrencodesrc source

- quirc filter

- lavu/eval: introduce randomi() function in expressions

- VVC decoder

- fsync filter

- Raw Captions with Time (RCWT) closed caption muxer

- ffmpeg CLI -bsf option may now be used for input as well as output

- ffmpeg CLI options may now be used as -/opt <path>, which is equivalent

to -opt <contents of file <path>>

- showinfo bitstream filter

- a C11-compliant compiler is now required; note that this requirement

will be bumped to C17 in the near future, so consider updating your

build environment if it lacks C17 support

- Change the default bitrate control method from VBR to CQP for QSV encoders.

- removed deprecated ffmpeg CLI options -psnr and -map_channel

- DVD-Video demuxer, powered by libdvdnav and libdvdread

- ffprobe -show_stream_groups option

- ffprobe (with -export_side_data film_grain) now prints film grain metadata

- AEA muxer

- ffmpeg CLI loopback decoders

- Support PacketTypeMetadata of PacketType in enhanced flv format

- ffplay with hwaccel decoding support (depends on vulkan renderer via libplacebo)

- dnn filter libtorch backend

- Android content URIs protocol

粉丝福利,博主耗时2个月整理了一份详细的音视频开发学习路线,涵盖了音视频开发FFmmpeg、流媒体客户端、流媒体服务器、WebRTC、Android NDK开发、IOS音视频开发等等全栈技术栈,并提供了配套的免费领取C++音视频学习资料包、技术视频/代码,内容包括(FFmpeg ,WebRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs流媒体服务器,音视频通话等等)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

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

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

相关文章

校园超市收银软件的挑战:双系统困境-亿发

在现代零售业中&#xff0c;高效的管理系统是确保业务顺利进行的关键。然而&#xff0c;对于学校直属管理的超市来说&#xff0c;选择合适的收银系统往往是一项挑战。由于缺乏能够同时满足收银和进销存管理需求的高适配性系统&#xff0c;许多学校超市不得不同时使用两套系统&a…

iPhone手机清理软件:让你的设备焕然一新

随着智能手机在我们生活中的地位日益重要&#xff0c;保持设备的最佳性能就显得尤为关键。对于iPhone用户而言&#xff0c;随着时间的推移&#xff0c;手机可能会因累积了过多的缓存文件、重复照片、未使用的应用和各种其他数据而变得缓慢。幸运的是&#xff0c;市面上有多种iP…

可以翻页、互动、留言和弹幕的仿真电子相册制作方法

​在数字化时代&#xff0c;仿真电子相册作为一种结合了翻页、互动、留言和弹幕等多种功能的创意表达形式&#xff0c;正逐渐成为人们记录生活和分享回忆的重要方式。本教程将介绍如何利用FLBOOK这款强大的电子相册制作工具&#xff0c;制作具有这些特性的令人印象深刻的作品。…

ICM-20948芯片详解(6)

接前一篇文章&#xff1a;ICM-20948芯片详解&#xff08;5&#xff09; 五、组件概览及详述 再次给出ICM-20948芯片的内部结构框图&#xff1a; 2. 组件详述 &#xff08;6&#xff09;辅助I2C串行接口 ICM-20948具有用于与外部传感器通信的辅助I2C总线。该总线有两种操作模…

实时采集同花顺要闻直播资讯

采集同花顺要闻直播资讯能实时掌握市场动态、政策变化及企业新闻&#xff0c;对投资者而言&#xff0c;有助于及时做出投资决策&#xff0c;把握市场机会&#xff0c;规避风险。对于研究机构和媒体&#xff0c;它提供一手资料&#xff0c;支持深度分析与报道。 采集网址&#x…

第 8 章 虚拟文件系统(7)

目录 8.5 标准函数 8.5.1 通用读取例程 8.5.2 失效机制 8.5.3 权限检查 8.6 小结 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 8.5 标准函数 大多数文件系统中 file_operations 的 read&#xff0c;write 分别为&#xff1a; do_sync_read&am…

Android开发之事件分发

#来自ウルトラマンゼロ&#xff08;哉阿斯&#xff09; 1 Activity 构成 平常布局展示在ContentView中。 2 事件分发 事件分发的本质其实就是把事件&#xff08;Touch&#xff09;封装成 MotionEvent 类&#xff0c;然后传递给 View 的层级处理。 MotionEvent 事件类型主要有…

51单片机-第七节-DS1302实时时钟

一、DS1302介绍&#xff1a; 实时时钟芯片&#xff0c;可对年&#xff0c;月&#xff0c;日&#xff0c;周&#xff0c;时&#xff0c;分&#xff0c;秒计时&#xff0c;是一种集成电路。 二、DS1302原理&#xff1a; 1.寄存器定义&#xff1a; Command&#xff1a;操作模式…

MySQL:表的增删查改——CRUD(二)

本篇博客接上篇&#xff1a;MySQL&#xff1a;表的增删查改——CRUD&#xff08;一&#xff09;-CSDN博客 目录 1、查询&#xff08;Retrieve&#xff09; 1.1 条件查询&#xff1a;WHERE 1.1.1 比较运算符 1.1.2 逻辑运算符 1.1.3 查询语句的执行顺序 1.1.3 SQL代码示例…

小试牛刀-walletconnect二维码及交互

目录 1.编写目的 2.实现功能 3.功能详解 依赖组件 3.1 二维码生成 3.1.1 初始化SignClient 3.1.2 创建会话空间获取WC协议uri 3.1.3 生成二维码供用户扫描 3.1.4 等待扫描 3.2 发送交易事务 3.2.1 创建交易事务 3.2.2 向用户发送交易事务 3.3 签名事务 3.3.1 接收…

使用AI绘图工具生成风景图像的教程

随着人工智能技术的飞速发展&#xff0c;AI绘图工具在图像生成和艺术创作方面变得越来越强大&#xff0c;无论你是一个设计师、艺术家&#xff0c;还是仅仅对生成艺术感兴趣的爱好者&#xff0c;AI绘图工具都可以帮助你轻松地创作出惊艳的风景图像。 在这篇教程中&#xff0c;…

医疗设备漏费控制管理系统的必然性及未来发展性

医疗设备控费的必然性 医疗改革的要求 随着医疗改革的不断深入&#xff0c;原有的医药模式已经发生了改变。药品和耗材零差价的执行&#xff0c;使得医院需要寻找新的开源节流、降耗增效的方法。医疗设备控费系统的出现&#xff0c;正是为了满足这种管理需求。 控制成本和优…

【AI】人工智能核心三要素

上图来自甲子光年的资料&#xff0c;如有侵权&#xff0c;请联系删除。 在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;作为引领未来科技变革的重要力量&#xff0c;正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。人工智能之所以能…

文件Io编程基础

1. 标准I/O (stdio.h) stdio.h 是标准C库的头文件&#xff0c;包含了输入输出函数的声明。位置&#xff1a;/usr/include/stdio.h 2. 文件I/O操作步骤 打开文件: 使用 fopen 函数&#xff0c;返回 FILE* 指针。读/写操作: 使用 fread、fwrite、fgets、fputs、fprintf、fscan…

【SOC】SoC架构系统总线的QoS管理——QoS generator

#工具文档理解# QoS——Quality of Service 目录 一、概念 Master对于Latency的敏感性 流量控制和事务级概念 Splitting Pending order IDs 数据包创建和传输的QoS 序列化 一、概念 这一部分描述了QoS机制如何平衡不同发起者的流量访问&#xff0c;以适应互连的有限可…

都2024年了,SQL语句还需要手写吗?

前言 在当今的AI时代&#xff0c;数据库管理和SQL开发已不再是单调的编码过程。借助AI的智能化工具&#xff0c;数据库操作变得更加简洁高效&#xff0c;错误率也大大降低。特别是当AI与强大的数据库管理工具Navicat相结合时&#xff0c;开发者可以更加专注于数据的分析和应用…

home assistant 接入国家电网

一、安装加载项 在 配置 - 加载项 File editorAdvanced SSH & Web Terminal 二、安装state_grid 上传压缩包 在 File editor中&#xff0c;进入 homeassistant - custom_components 文件夹中&#xff0c;点击上传文件。 文件下载路径 https://download.csdn.net/downl…

密码学基础-身份认证

密码学基础-身份认证 概述 书信的亲笔签名&#xff1b;公文、证书的印章起到了核准、认证的功能。 如前文密码学基础-数据加密所述&#xff0c;信息安全少不了身份认证的话题。只有认证了信息的来源&#xff0c;我们才能知道这条信息是否是正确的&#xff0c;合法的&#xff…

如何让贵人一直帮你?

如果有贵人提携了你一把&#xff0c;牢记一定要抱住大腿。 如果一个段位比你高很多的贵人帮了你一个忙&#xff0c;他什么都不缺&#xff0c;他缺的也不是你这个层次的人能够给的了的&#xff0c;但你千万不要以为这个事儿就翻篇儿了。牢记一招&#xff0c;每隔半年给他汇报一下…

超声波眼镜清洗机有用吗?品质上等的超声波清洗机评选

超声波眼镜清洗机有用吗&#xff1f;眼镜是我们日常生活中不可或缺的配件&#xff0c;其卫生状况对健康至关重要。由于眼镜经常与外界环境接触&#xff0c;容易积聚细菌。为了有效解决这一问题&#xff0c;大家都纷纷选择使用超声波清洗机来进行彻底清洁。所以&#xff0c;超声…