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 状态
![](https://image.cha138.com/20220310/2508938c7bf4449ea2501f58c4ab964c.jpg)
大多数为 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 和自由软件社区的更新的主要内容,如果未能解决你的问题,请参考以下文章