来源:Demuxed 2021 主讲:Jean-Baptiste Kempf @ Videolan 翻译:钟宏成 谈谈 FFmpeg 社区的变化,以及 FFmpeg 项目中发生的事情。FFmpeg 5.0 发布、CoC 和其他一些东西。
目录
FFmpeg 在各种场景下被用于各种处理。大多数在线视频生态依赖于 FFmpeg,许多开源、非开源应用使用 FFmpeg,FFmpeg 也用于许多云上的服务,比如编码、在线转码等。许多人围绕 FFmpeg 创建解决方案,因此 FFmpeg 是整个视频工业里的一个关键部分。很奇怪的是,大多数开发者不知道 FFmpeg 被如何使用,因为许多 FFmpeg 的用户并不与他人交流。FFmpeg 作为关键部分被应用在成百上千的应用中,但其核心社区成员缺只有几十个,并且他们不知道应用场景是什么。
大多数为 FFmpeg, x264 等社区贡献的成员都是志愿劳动,没有任何报酬,大多数开源项目也是这样,这很难。
FFmpeg 社区的发展有过很多不顺,过去几年的状况并不理想,我们希望能解决问题,与下游的 FFmpeg 用户一起解决这些问题:
对于 FFmpeg 的社区架构,我们现在有:
我们同样需要改变开发模式,这些都在讨论中,也许可以有固定的发布周期?或者可以维护一些长期维护版本 LTS release?我们同样在讨论提升开发工具,如何帮助持续继承。人们也在讨论迁移到 GitLab,但目前没什么结果,如果您有好的意见,欢迎参与讨论。最后,code of conduct,其他的一些工具和规则也需要更新。在你看到这个视频的同时,也许一些讨论已经有了进展,但我们还不确定。
如果您有任何反馈,任何建设性的意见,请联系我们,我们来将 FFmpeg 做得更好。
FFmpeg 4.4 在 FFmpeg 4.3 几乎一年后推出,主要有以下更新:
FFmpeg 5.0 的发布(January 17th, 2022, FFmpeg 5.0 "Lorentz"):
int
替换为 size_t
;// 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 的手写汇编代码已经超过 150k 行,现在支持的汇编有:
在单线程,几乎所有能做的优化都已经实现了,但在多线程优化上还有提升空间,现在使用的自动多线程模型可以在给定线程数的情况下自动设定 Frame-threads、Slice-threads、Filter-threads。Dav1d 的 1.0 版本即将发布,接下来的工作可能是在 AVX512,PPC 上,或是使用 GPU 加速。
最后,特别需要提到的是,最近 FFmpeg 社区的进展主要有 YouTube 和 Facebook 赞助,许多 dav1d 上的进展由 Netflix 赞助。许多人在他们自己的时间为 FFmpeg 工程贡献,很多时候维护与更新是不容易的,所以对这些开源项目的赞助非常有用!
附上演讲视频:
http://mpvideo.qpic.cn/0b2exuaagaaacaaegya7fvrfbpodao6qaaya.f10002.mp4?dis_k=00a699f7ba795aa9fd686bd2fe6fb447&dis_t=1649674931&vid=wxv_2292154755672129537&format_id=10002&support_redirect=0&mmversion=false