FFmpeg 和自由软件社区的更新

FFmpeg社区在过去面临分裂、维护者离职等问题,但现在通过改进社区架构和开发模式寻求改善。FFmpeg5.0带来了历史上最大的API变更,统一了音频、视频编码接口,并移除了废弃的API。Dav1d编码器在性能和多线程方面持续优化,即将发布1.0版本。此外,社区得到YouTube和Facebook的赞助,推动了项目发展。
摘要由CSDN通过智能技术生成

550f6b143c212ecb18d012cf1b9bf3fd.png

▲扫描上图二维码了解音视频技术大会更多信息

来源: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 状态

56f69316208557bbc7199729aa5cc700.png FFmpeg 在各种场景下被用于各种处理。大多数在线视频生态依赖于 FFmpeg,许多开源、非开源应用使用 FFmpeg,FFmpeg 也用于许多云上的服务,比如编码、在线转码等。许多人围绕 FFmpeg 创建解决方案,因此 FFmpeg 是整个视频工业里的一个关键部分。很奇怪的是,大多数开发者不知道 FFmpeg 被如何使用,因为许多 FFmpeg 的用户并不与他人交流。FFmpeg 作为关键部分被应用在成百上千的应用中,但其核心社区成员缺只有几十个,并且他们不知道应用场景是什么。

大多数为 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 工程贡献,很多时候维护与更新是不容易的,所以对这些开源项目的赞助非常有用!

附上演讲视频:

db17e8921de2cf29765c52534e26f0cc.png

fdcd628dcc26dbd17595483883c2551b.gif 点击“阅读原文”了解音视频技术大会更多信息!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值