现代 FFmpeg 有多少是由 Fabrice Bellard 编写的?

Has*_*him 1 git video open-source ffmpeg codebase

FFmpeg 被许多人认为是 Fabrice Bellard 的作品,甚至可能是他的代表作,但自从他在 2004 年停止为该项目做出贡献(化名 G\xc3\xa9rard Lantau)后,我想知道它实际上能发挥多少作用。仍然可以说是他的。相比之下,Linus Torvalds 的维基百科页面指出

\n
\n

截至 2006 年,大约 2% 的 Linux 内核是由\nTorvalds 本人编写的。[28] 由于有数千人对此做出了贡献,\n他的比例仍然是最大的之一。然而,他在 2012 年表示,\n他自己的个人贡献现在主要是合并其他人编写的代码,\n很少进行编程。

\n
\n

尽管 Torvalds 仍然是 Linux 内核的积极贡献者,而 Bellard 已经近二十年没有成为 FFmpeg 的积极贡献者了。

\n

FFmpeg 是一个用 Git 跟踪的开源项目,似乎这个问题应该在技术上和客观上得到回答,但作为一个讨厌邮件列表和大型开源项目喜欢做事的普遍过时方式的人,我不会\'不知道从哪里开始这样做。

\n

与其他 FFmpeg 开发人员相比,Fabrice Bellard 实际负责了多少现代 FFmpeg 代码库?

\n

joa*_*nis 6

长话短说

\n

使用 gitblame,您可以得出结论,Bellard 是最后接触代码库 1942819 行中的 8851 行(即其中 0.46%)的人。

\n

细节

\n

存储库中有大约 8000 个文件,总共包含近 200 万行,正在运行git blame在每个文件上运行将需要很长时间,但它可以让您看到 Bellard/Lantau 贡献的存储库中还有多少行。不过,正如 @Gyan 所说,这只会报告与他所写的完全相同的行,空白或样式的任何更改都将归因于进行这些细微更改的人。

\n

话虽这么说,这是循环:

\n
git clone https://github.com/FFmpeg/FFmpeg\ncd FFmpeg\nfor f in $(git ls-tree HEAD -r --name-only) ; do git blame $f ; done > blame\n
Run Code Online (Sandbox Code Playgroud)\n

该循环将需要很长时间才能运行(在我的计算机上大约需要 5 个小时),但最终您将能够使用如下内容从每一行中提取作者:

\n
cat blame | sed -e 's/ *20[012][0-9].*//' -e 's/^[^(]*(//' > blame-author\n
Run Code Online (Sandbox Code Playgroud)\n

这是基于解析blame输出中的行,如下所示:

\n
f1ab71b0463 (Timo Rothenpieler   2017-05-11 22:53:41 +0200 26) *.ptx.c\n6bcd3e05998 (Federico Tomassetti 2015-08-13 20:13:48 +0200 11) compiler:\n5d3049559af COPYING.GPL (Diego Biurrun 2007-07-12 20:27:07 +0000 187) the Program or works based on it.\n
Run Code Online (Sandbox Code Playgroud)\n

我的粗略解析器并不完美,但足以从像blame这样的粗略工具中获取统计数据。

\n

现在让我们来计算作者的行数:

\n
cat blame-author | sort | uniq -c | sort -nr | less -N\n
Run Code Online (Sandbox Code Playgroud)\n

显示代码库的贡献者列表,根据提交日志按照该贡献者最后触及的行数从高到低排名。以下是前 50 名名单:

\n
      1  209136 Paul B Mahol\n      2  121248 Michael Niedermayer\n      3  114289 Anton Khirnov\n      4  109653 Andreas Rheinhardt\n      5   75457 Diego Biurrun\n      6   54739 Ronald S. Bultje\n      7   48739 James Almer\n      8   48571 Kostya Shishkov\n      9   48096 Shivraj Patil\n     10   44086 Martin Storsj\xc3\xb6\n     11   41019 Mark Thompson\n     12   40305 Cl\xc3\xa9ment B\xc5\x93sch\n     13   37204 Stefano Sabatini\n     14   34637 Vittorio Giovara\n     15   26003 Luca Barbato\n     16   21898 Justin Ruggles\n     17   20845 Mans Rullgard\n     18   20403 Lynne\n     19   20172 Nicolas George\n     20   19849 Vitor Sessak\n     21   18044 Kaustubh Raste\n     22   17297 Aurelien Jacobs\n     23   16258 M\xc3\xa5ns Rullg\xc3\xa5rd\n     24   15242 Hao Chen\n     25   14281 Peter Ross\n     26   13971 Mike Melanson\n     27   13943 Marton Balint\n     28   11798 Guillaume Martres\n     29   11284 Rostislav Pehlivanov\n     30   11013 Shiyou Yin\n     31   10836 foo86\n     32    9895 Baptiste Coudurier\n     33    9375 Derek Buitenhuis\n     34    9367 Janne Grunau\n     35    9214 Matthieu Bouron\n     36    9160 Carl Eugen Hoyos\n     37    9065 wm4\n     38    8851 Fabrice Bellard\n     39    8813 Zhou Xiaoyong\n     40    8625 Timo Rothenpieler\n     41    8410 Reimar D\xc3\xb6ffinger\n     42    8361 Steven Liu\n     43    7409 Timothy Gu\n     44    7147 Thilo Borgmann\n     45    6886 Lukasz Marek\n     46    6667 Martin Vignali\n     47    6445 Ben Avison\n     48    6274 Limin Wang\n     49    6213 rcombs\n     50    6138 Daniel Kang\n
Run Code Online (Sandbox Code Playgroud)\n

wc -l blame-author在此列表中,您可以在第 38 位找到 Bellard,有 8851 行,占分析的1942819 行的 0.46% 。

\n

方法学局限性

\n

我应该删除tests/reftests/reference.pnm,因为这些是很多二进制文件,但如果没有它们,仍然有 180 万行,所以答案仍然在 0.4 到 0.5% 左右。

\n

更好的是,我应该识别并过滤掉所有二进制文件。我的blame-author由于它们,再说一次,我相信这是一个小错误,但它仍然存在。

\n

这四个COPYING.*GPL*文件都包含在内,但显然不是由提交它们的人编写的。虽然只有 1680 行,但功劳在于提交某些内容,而不是实际编写它。git blame是一个粗糙的工具。\n其中 492 行归因于 Bellard 本人,因此将其排除在外会将他幸存的贡献估计减少到代码库的 0.42% 左右。

\n

git blame可以接受一个--ignore-revs-file FILENAME列出仅应用样式更改的提交的选项。例如,我在我的存储库中使用它来排除我只是用黑色重新格式化 Python 代码的提交,或者您可以使用它来忽略仅将某些文件中的 CRLF 更改为 LF 行结尾的提交。我没有尝试在 FFmpeg 中查找仅样式提交,但这样做可以提高这些统计数据的重要性。

\n

我在任何地方都没有看到 Lantau 这个名字,所以我假设贝拉德的所有贡献都在这个名字下。

\n

为了将来的参考,如果有人真正关心的话,我的分析基于这个提交,这是撰写本文时 master 分支的 HEAD:

\n
commit 8ad988ac37d4d92dbb60796e26c3ad558a3eebeb (HEAD -> master, origin/master, origin/HEAD)\nAuthor: Saliev, Rafik F <rafik.f.saliev-at-intel.com@ffmpeg.org>\nDate:   Fri Dec 16 09:37:27 2022 +0000\n
Run Code Online (Sandbox Code Playgroud)\n