FFmpeg 和自由软件社区的更新
Posted LiveVideoStack_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg 和自由软件社区的更新相关的知识,希望对你有一定的参考价值。
▲扫描上图二维码了解音视频技术大会更多信息
来源:Demuxed 2021
主讲:Jean-Baptiste Kempf @ Videolan
翻译:钟宏成
谈谈 FFmpeg 社区的变化,以及 FFmpeg 项目中发生的事情。FFmpeg 5.0 发布、CoC 和其他一些东西。
目录
FFmpeg history
Work together
Work better
FFmpeg releases
FFmpeg 5.0 changes
Dav1d 状态
大多数为 FFmpeg, x264 等社区贡献的成员都是志愿劳动,没有任何报酬,大多数开源项目也是这样,这很难。
FFmpeg history
FFmpeg 社区的发展有过很多不顺,过去几年的状况并不理想,我们希望能解决问题,与下游的 FFmpeg 用户一起解决这些问题:
libav 与 FFmpeg 分离几乎十年,现在基本解决了;
主要维护者 Michael Niedermayer 在几年前辞职;
邮件列表中的语气比较紧张;
很多人害怕提交 patch,因为他们不相信自己的代码能被合并,reviewer 都很严格;
下游有很多分支,它们固定在特定的版本上,工作在不同场合,并且在其上有很多 patch。这导致了许多重复工作,并且不更新的 FFmpeg 会有一些安全问题。
Work together
对于 FFmpeg 的社区架构,我们现在有:
General Assembly:由全部活跃开发者组成,负责重要决策;
Technical Committee:解决技术问题,裁决技术讨论;
Community Committee:规范人们在邮件列表与 IRC 频道上的行为,维持工作环境。
Work better
我们同样需要改变开发模式,这些都在讨论中,也许可以有固定的发布周期?或者可以维护一些长期维护版本 LTS release?我们同样在讨论提升开发工具,如何帮助持续继承。人们也在讨论迁移到 GitLab,但目前没什么结果,如果您有好的意见,欢迎参与讨论。最后,code of conduct,其他的一些工具和规则也需要更新。在你看到这个视频的同时,也许一些讨论已经有了进展,但我们还不确定。
如果您有任何反馈,任何建设性的意见,请联系我们,我们来将 FFmpeg 做得更好。
FFmpeg releases
FFmpeg 4.4 在 FFmpeg 4.3 几乎一年后推出,主要有以下更新:
AV1 硬件解码,SVT-AV1 编码器;
AVS3 解码器, Linux VP9/HEVC 10bit;
Cineform HD, SpeedHQ, OpenEXR, TTML 编码器;
RIST 与 Gopher 支持;
许多新 filter。
FFmpeg 5.0 的发布(January 17th, 2022, FFmpeg 5.0 "Lorentz"):
包含 FFmpeg 历史中最大的 API 改变,大约有 90 个 commit 用于删除废弃的 API 与数据结构;
swscale threading;
新 filter。
FFmpeg 5.0 changes
FFmpeg 5.0 最大的变化主要是在 avcodec 的 encoding,decoding:
现在音频、视频使用同一个 API;
编码的输入、输出解耦。
新的回调函数允许编码器输出数据到用户管理的 buffer;
swscale 中的 AVFrame based API;
分离 avformat 与 avcodec,demuxer 不再嵌入整个 decoder context;
新的 bitstream filtering API,可以用于编码包头分析;
codec/format 注册 API 被去除了,现在所有格式总是注册的;
类型安全:在许多 API 中
int
替换为size_t
;一个 API 变化的举例:
// decoding single video packet in old API
while (pkt->size > 0)
// decode pkt into frame, comsumes <ret> bytets from pkt
int ret = avcodec_decode_video2(decoder, pkt, frame, &got_output);
if (got_output)
<process frame>
// need to manually offset the buffer
pkt->data += ret;
pkt->size -= ret;
-------
// decoding single video packet in new API
avcodec_send_packet(decoder, pkt);
ret = 0;
while (ret >= 0)
ret = avcodec_receive_frame(decoder, frame);
if (ret < 0)
break;
<process frame>
Dav1d 状态
Dav1d 的手写汇编代码已经超过 150k 行,现在支持的汇编有:
ARM32 & ARM64;
x86 32bit;
x86 64bit (SSSE3 & AVX2)。
在单线程,几乎所有能做的优化都已经实现了,但在多线程优化上还有提升空间,现在使用的自动多线程模型可以在给定线程数的情况下自动设定 Frame-threads、Slice-threads、Filter-threads。Dav1d 的 1.0 版本即将发布,接下来的工作可能是在 AVX512,PPC 上,或是使用 GPU 加速。
最后,特别需要提到的是,最近 FFmpeg 社区的进展主要有 YouTube 和 Facebook 赞助,许多 dav1d 上的进展由 Netflix 赞助。许多人在他们自己的时间为 FFmpeg 工程贡献,很多时候维护与更新是不容易的,所以对这些开源项目的赞助非常有用!
附上演讲视频:
点击“阅读原文”了解音视频技术大会更多信息!
以上是关于FFmpeg 和自由软件社区的更新的主要内容,如果未能解决你的问题,请参考以下文章