FFmpeg 7.0重大更新

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

大家好,欢迎来到IT知识分享网。

0、维护工作

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

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

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添加硬件解码和渲染》。

FFmpeg 7.0重大更新

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 7.0重大更新

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

./ffmpeg -i bar.mp4 -vf quirc -frames 10 -f null - Found QR code at position 0,0 - 0,384 with payload: 3 0. 2024-03-31 14:45:00 Found QR code at position 0,0 - 0,384 with payload: 4 0. 2024-03-31 14:45:00 Found QR code at position 0,0 - 0,384 with payload: 5 0. 2024-03-31 14:45:00 Found QR code at position 0,0 - 0,384 with payload: 6 0. 2024-03-31 14:45:00 Found QR code at position 0,0 - 0,384 with payload: 7 0. 2024-03-31 14:45:00 Found QR code at position 0,0 - 0,384 with payload: 8 0. 2024-03-31 14:45:00 Found QR code at position 0,0 - 0,384 with payload: 9 0. 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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/171347.html

(0)
上一篇 2025-02-23 08:10
下一篇 2025-02-23 08:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信