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 在各种场景下被用于各种处理。大多数在线视频生态依赖于 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 pktint ret = avcodec_decode_video2(decoder, pkt, frame, &got_output);if (got_output)<process frame>// need to manually offset the bufferpkt->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 和自由软件社区的更新相关推荐
- 李晓江:“双碳”目标下的社区绿色更新
上篇内容: 李晓江:"双碳"目标下的城市绿色发展 "光靠绿色技术.绿色材料.绿色装备是实现不了零碳的,必须要有绿色生活方式的推广和广大群众.老百姓的接受." 李 ...
- ffmpeg最新源代码(定期更新)
为了方便那些不能连接到ffmpeg的SVN仓库更新源代码的用户,ffmpeg工程组特开辟一个专区,定期更新ffmpeg的源代码,并将其快照上传,有需要的朋友可以长期关注本帖. ffmpeg的编译指令通 ...
- Delphi 和 C++Builder 免费社区版更新至 10.4.2 版现已发布!
Delphi 和 C++Builder 的免费且功能齐全的社区版旨在帮助您开始编程.这些强大的 IDE 提供了快速探索强大的应用程序开发所需的所有功能. 社区版发布后,社区中的学生和爱好者可以免费使用 ...
- ULTRA社区月度更新报告#3
最近的社区反馈非常积极,我们要感谢你们所有人对我们的支持.到目前为止,我们最新的视频已经获得了超过3000次的点击量,并在所有社交媒体平台上得到了非常积极的转载. 这种热情清楚地表明,这种交流方式对于 ...
- 树袋熊无线网络打印服务器,2大1小完美澳洲自驾之旅(第九天:树袋熊之旅)—2013完整版(社区系统故障更新中)...
考拉之旅 10月8日 关键词:抱考拉.喂袋鼠.鸟瞰布里斯班 在澳洲,考拉的地位犹如大熊猫在中国的地位, 法律禁止抱考拉,而位于布里斯班西南郊的龙柏考拉保护区, 不仅拥有最多数量的考拉(130多只), ...
- FFmpeg Maintainer赵军:FFmpeg关键组件与硬件加速
本文来自FFmpeg Maintainer赵军在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成.在分享中,赵军介绍了FFmpeg的历史.关键组件,并介绍 ...
- FFmpeg 硬件加速方案概览 (下)
被称为"多媒体技术领域的瑞士军刀",FFmpeg拥有广泛的应用基础.不过,当(实时)处理海量视频时,需要借助各种方法提升效率.比如,短视频平台Revvel将视频转码服务迁移到AWS ...
- 自由软件之父回归 FSF,遭 1933 人、21 家组织联名抵制!
作者 | 苏宓 出品 | CSDN(ID:CSDNnews) "I'm Back!" 近日,理查德·斯托曼(Richard M. Stallman)公开表示,想要回到 35 年前自 ...
- FFmpeg 快速上手:命令行详解、工具、教程、电子书
FFmpeg 简介 FFmpeg 是一个开源的音视频处理工具,诞生已22年.它可以用来处理音视频的编解码.格式转换.剪辑.合并.抽取.压缩.解压缩.滤镜.字幕等等.它可以在 Windows.Linux ...
最新文章
- 【实用】CTS请求号传输报错处理
- python中常见的运行时错误_17个常见的Python运行时错误
- 【深度学习】一分钟速学 | NMS, IOU 与 SoftMax
- 生产服务器环境最小化安装后Centos 6.5优化配置备忘
- [转]Laravel与bootstrap-editable实现table的行内编辑
- 网页制作小技巧:dl dt dd标签用法
- Ansible安装MySQL5.7.24
- 计算机程序的思维逻辑 (47) - 堆和PriorityQueue的应用
- java缓存内存泄漏_java – getMethod是缓存并导致内存泄漏
- 针对关键字是字符串的一个比较好的散列函数
- 将远程数据库中的某表数据复制到本数据库(ORACLE)
- java并发编程(11)-- 线程池 拒绝策略
- 全面认识scratch
- React 16 源码解析笔记 02 - JSX 转换为 ReactElement 的过程
- Linux 内核 notifier机制
- Java支持latex,基于Java和LaTeX的文档自动生成技术研究
- 商业模式新生代_商业模式新生代——商业模式设计
- 人人都会点数据分析 | 了解数据
- 紫光扫描仪ocr_清华紫光OCR下载
- 京东手机销售数据分析,华为和三星的距离还有多远?