目录
- [00:00:00] 欢迎收听跨国串门计划
- [00:15:01] 都很重要的一点
- [00:30:01] 生成命令行
- [00:45:01] 年轻人
- [01:00:02] 这不是正道
- [01:15:04] 在VLC这边有位最资深的贡献者叫Felix
- [01:30:04] 就是为这些格式
- [01:45:05] 见到Uri
- [02:00:06] 我们之前也聊过
- [02:15:07] 因为有了内存检查器
- [02:30:07] 就像我们说的
- [02:45:10] 封装在MP4或WebM容器里的AVE
- [03:00:10] 所以本地播放器
- [03:15:11] 因为有很多不同的情况
- [03:30:16] 作为他们的贵档方案
欢迎收听跨国串门计划 [00:00:00]
发言人01: 欢迎收听跨国串门计划,这是一档专注于让中文听众无障碍欣赏全球优质外语播客的节目,通过先进的AI声纹克隆技术,我们不仅将内容翻译成中文,还完美保留了原主持人和嘉宾的独特声音,为您呈现全球顶尖的AI财经,健康与科技领域精品内容,我是主播一凯,一位热衷于AI领域的产品经理,很荣幸能为您搭建这座跨越语言障碍的桥梁,接下来,让我为您简单介绍本期我们克隆的这档节目 [00:00:00 → 00:00:34]
并分享几句非常精彩的原话,本期我们克隆的是知名科技播客Lex Freeman Podcast 主持人Lex与两位开源软件领域的灵魂人物Jim Baptist和Karen 畅聊了FFM PEG与VLC的幕后故事,他们一个是VLC的主席兼核心维护者,一个是FFM PEG的资深贡献者,而你平时看视频刷流媒体,几乎每一次点击背后都有他们的代码在默默运转,在对话里有几句原话让我印象特别深 Jim Baptist说过,我们看中的是优秀的代码 [00:00:34 → 00:01:09]
我们不在乎你是谁,就算你是条狗我也不在乎 Karen感叹道 FMPEG很可能是全世界消耗CPU最多的东西之一,我们刚才几分钟里说的每一句话都是某个人毕生的工作,而坚持让VLC保持干净无广告的Jim Baptist 还这样解释他的选择,我拒绝过上千万美元,因为我觉得那是不道德的,那不是正确的事,这些话背后是一群工程师,用热爱撑起的数字基石 [00:01:09 → 00:01:39]
发言人02: 那我们就一起来听听这期的完整对话,重要的是你的代码好不好,我们看中的是优秀的代码,我们不在乎你是谁,就算你是条狗,我也不在乎对吧,我不在乎你来自哪里,我需要看你的代码,哦没错,哪怕我是某家大公司的工程师,在意大利德国美国,我们也不在乎,我们看重的是你的代码资料,因为这才是定义我们社区的东西 [00:01:39 → 00:02:05]
发言人01: 这也意味着我们有很多贡献者,他们来自非常不同的背景,而且极其内向,当然但这没关系对吧 FMPEG 很可能是全世界,消耗CPU最多的东西之一,我们刚才几分钟里说的,每一句话,都是某个人毕生的工作,每一句话背后,都有成熟的研究,所以很多情况下,复杂度是惊人的 FFM PACK有10万行汇编代码,为所有的编解码器 [00:02:05 → 00:02:32]
发言人02: 所有编解码器,单这一个就有24万行,每个适中周期都很重要,我们说的是大概30亿台设备,在不停地解码视频,比如Netflix上30%的视频 YouTube上50%的视频 [00:02:32 → 00:02:45]
发言人03: 都在这些设备上不间断地解码,这就是巅峰视频编解码器的样子 79.9%的汇编 90.6%的C 还有0.5%的其他,不可思议的是 [00:02:45 → 00:02:58]
发言人01: 那些推文明明说的都是事实,人们却因此疯狂,过去两年,他们简直疯了,不intrinsic是没问题的,编译器嘛,你可以优化编译器的自动向量化,那是你的问题,你不懂,我们已经试了不知道多久了,对吧,为了,两年又两年之后,给他们看了几百个,手写绘编的例子,他们还是说,不不不,你做的不对,编译器能做到这一点,情报机构曾经来试探 [00:02:58 → 00:03:25]
发言人03: 类似说你们能不能在VLC上放一个后门,是的,两个情报机构,你们怎么回应的,不行,我当时远没现在这么客气,基本就是说绝对不行,如果我们不得不向软件妥协,那我们就会把它关掉,这一点很明确,有没有什么推文Kieran让你后悔的,推文,还是后悔,还是说就像那个,那首法国歌怎么唱的来着,我无怨无悔,别后悔任何事,不,是因为后悔是对你思想的攻击 [00:03:25 → 00:03:57]
接下来是一场关于FFMPEG和VLC的对话,嘉宾是Jean-Baptiste和Kieran FFMPEG是一个开源的软件系统,它是YouTube,Netflix,Chrome,VLC,Discord 以及几乎所有互联网上涉及视频或音频的平台,背后看不见的支柱,它可以解码、编码、转码、串流和播放,几乎所有曾经存在过的视频或音频格式,对我而言,这是有史以来最令人难以置信的软件系统之一,而且这一切都是由志愿者完成的 [00:03:57 → 00:04:30]
VLC同样是一款传奇软件,它是一个开源的媒体播放器,基本上你扔给它的任何东西,它都能播放任何格式,任何平台,没有广告,没有追踪,它的下载量已经超过了60亿次,对我来说,这也是我最喜欢的软件之一,而且还拥有最标志性的logo 我当然得在这场对话里向他致敬,全程戴着VLC的交通锥帽子,所以再一次最要感谢的是那些了不起的志愿者工程师们,他们把自己的心血和灵魂倾注到了这些代码里,而这些代码被数十亿人使用和喜爱,谢谢你们 [00:04:30 → 00:05:05]
说到我这一集对话的两位优秀的工程师 Jan Baptist是Videoland的主席,也是VLC和FFMPEG背后的关键人物 Karen是一位资深的编辑码工程师 FFMPEG的贡献者,也是现在推特上那个,出名的FMPEG账号的幕后运营者,我强烈建议大家去关注一下,有各种梗图,还有对开源和底层软件工程,毫不妥协的赞美,另外我想说,看到现代文明的很大一部分,竟然是建立在这样一群,不追逐名声或金钱,而是痴迷于工程技术本身的人 [00:05:05 → 00:05:40]
所构建的软件职场,这既让人感到鼓舞,也让人谦卑,我们生活在一个,每天有数十亿人消费食品的世界,但几乎没人会去想,它底下那些看不见的运作机制,但那些机制很重要,开源基础设施很重要,它是人类跨越国界安静协作,为我们所有人构建一些,有用持久且优雅的东西的,伟大范例之一,所以这场对话,不仅仅是关于边界马气,和媒体处理管线,它还关乎那种,更深层的工程精神和慷慨 [00:05:40 → 00:06:13]
正是他们让FFMPEG这样的项目成为可能,我再说多少遍都不够,谢谢,这是Lex Fredman播客,要支持本节目,请在节目描述中查看我们的赞助商,那里也有联系我提问提供反馈等的链接,现在亲爱的朋友们,有请Jan Baptiste和Karen 传说中VLC什么都能打开,你所知道的最奇怪它能打开的东西是什么,你知道吗,有很多人用VLC来录VHS录像带,就像是你插上一个采集卡,基本上就能把VHS视频录下来 [00:06:13 → 00:06:47]
那怎么工作呢 [00:06:47 → 00:06:49]
发言人02: 基本上就是那些采集卡,可以插复合视频输入,或者RCA接口,你插上去VLC 实际上就能播放这些卡里的内容,还有一个模块,可以直接控制一些VCR摄像机,我们最近还支持了DVD音频 [00:06:49 → 00:07:03]
发言人01: 对吧,我们花了一个夏天的时间,来做DVD音频支持,而且已经没有人,在做DVD视频的支持了,还有那些自定义的加密方案,那卢卡斯营业的呢,哦对,当然还有FFMP 支持的各种奇怪的游戏编解码格式,有一款星球大战游戏,开头那十秒钟的片头动画,有人特意去实现了,对它的支持,确保在曾经存在过的,那一张光盘上,那一小段序列,能比特精确地播放,后来有一次,在一个视频技术会议上 [00:07:03 → 00:07:37]
我们举办了一场比赛,看谁能制作出最奇怪,最可怕的视频文件 [00:07:37 → 00:07:42]
发言人03: 然后看看VLC能不能播放它,最后那个文件是什么样的,是一个MKV文件,直接拼接的,每一帧都在改变分辨率,宽高比旋转角度,简直,能播吗,能播,还有一个文件 [00:07:42 → 00:07:55]
发言人01: 整个视频都是用动画字幕构成的,对吧 SSA字幕格式,记得,那一个,每一帧都是黑画面,但是上面叠加了一个动画字幕,每一帧都不一样,还有一个文件,它同时是一个,有效的压缩包和有效的MP3 或者类似的东西,对,所以我们就搞了个愚蠢文件比赛,而且他成功了,他打开了所有这些愚蠢的文件,是的 [00:07:55 → 00:08:21]
发言人03: 顺便说一下,给不熟悉的朋友说一下,我头上戴了一顶帽子,说这帽子是史上最棒,有最丑的logo 公平吗,那个交通追,是啊,毫无疑问,对吧 VLC的logo简直是标志性的 [00:08:21 → 00:08:34]
发言人02: 我们只是一个很小的团队,但这图标在全世界都有人认得,我去印度中国的偏远地方,人们都知道这个交通追,而且我们主网站有25%的流量 [00:08:34 → 00:08:45]
发言人03: 都是通过搜索追行播放器过来的,所以很多人不知道VLC 但他们知道追行播放器,你在谷歌上搜ConePlayer 出来的就是这个,没错 [00:08:45 → 00:08:56]
发言人02: 人们去谷歌输入ConePlayer 然后下载VLC 对吧,所以它真的很标志性,有一次我们开玩笑说,想换掉它,说打算改成一只毛毛虫工程车的样子,那是在4月1号,愚人节那天宣布的,结果我们收到,大概1万封邮件,说千万别换掉这个标志,所以它真的太经典,太有辨识度了,如果你要做一个,视频播放器,你大概会在电视上,放一个播放按钮,那就是YouTube的标志 [00:08:56 → 00:09:23]
发言人03: 挺普通的,而我们的这个,是橙色的,特别亮,而且有点怪异,而且它很荒唐,很荒谬,又特别好笑,它变成了一个梗,梗又变成了文化,你只要见过它,就会记住它,你知道哪怕20年后,人们还是会看到这些追题,然后想起来,哦对那是个视频播放器,没错,我们之后会聊到 FMPEG的使命之一,其实就是存档,你可以想象一千年后,我们会有一堆,只有VLC才能打开的视频,人类文明已经自我毁灭了好几次,最后剩下的可能就是它了,想象一下蟑螂在地上爬来爬去 [00:09:23 → 00:09:58]
旁边就是VLC的标志,还有它能打开的一些存档视频,然后外星人出现了,按下播放键 [00:09:58 → 00:10:04]
发言人02: 他们就能看到,看到这一切,我们当然希望如此,不过也有很多相关的梗,人们会说,我敢肯定把煎饼放进DVD光驱里 VLC也能播放,能吗,不能,我们试过了不行 [00:10:04 → 00:10:18]
发言人03: 但我们还真录了个视频,确实没成功,一个给物理世界的边界马气,我完全想象不出那会是什么样,还真有人做过类似的事,他打印了一个小追体,就像我们当纪念品发的那些,他在里面放了一个RFID芯片 [00:10:18 → 00:10:31]
发言人02: 这成了他播放电影的方式,他把这个追体放到RFID读取器上,就会开始播放,比如星球大战之类的,所以他不放DVD盒子,而是摆了一圈VLC追体,需要播放时就把追体放上去 [00:10:31 → 00:10:45]
发言人03: 真的成了实体物件,我们今天要聊的,就是围绕视频编解码,视频编码,视频解码,视频流媒体,视频播放器,客户端,以及我带的这个,整个让自由媒体得以实现的生态,我们会聊到FMPEG Videoland VLC 还有其他无数了不起的视频技术,使用这些技术的人加起来可能有几十亿JB 你是传奇播放器VLC的首席开发者 Karen除了其他许多成就之外,你也是传奇工具FMPEG的首席开发者,在推特上也很活跃,而且我得说你们两个都挺敢讲的 [00:10:45 → 00:11:19]
今天我们就来聊聊FMPEG和VLC 先给大家一些背景,我相信在听的各位基本上都经常在用这两样技术,只是可能自己没意识到 FanPack基本上处理了互联网上的绝大多数视频,包括YouTube Netflix Chrome Firefox 当然还有VLC以及无数其他视频平台,据估计线上和线下超过90%的视频处理流程都涉及FanPack VLC的下载量至少已经有65一次,但真实数字很可能远远不止 [00:11:19 → 00:11:53]
因为根本没法精确统计,几乎任何操作系统上都能运行,几乎支持任何媒体格式,唯一的限制是它不能打开键柄,那么我们先来梳理一些基础知识,帮大家理解这背后都涉及些什么,当我们在像VLC这样的播放器里,按下播放键时,到底发生了什么,从文件或者流到屏幕上,显示出像素扬声器传出声音,这个过程是怎么样的,有哪些主要阶段需要了解,这有好几个阶段,第一个阶段是从一个地址,比如某种URL获取到字节流 [00:11:53 → 00:12:27]
发言人01: 举例来说可能是HTTP 文件DVD等等,给你一条通往媒体的路径,然后给你一个数据流,这个流需要被所谓的容器,也就是解副用器切割开,我会尽量少用术语,它需要开始把视频帧和音频帧分离开,它从操作系统一块一块地拿数据,然后需要把这些帧切割成压缩数据,接着它要对视频帧做简单的解析,主要是为了搞清楚这个编解码器,能不能用GPU解码,还是得退回到软件解码 [00:12:27 → 00:13:01]
我们通常容易以为 GPU能处理所有事情,都能硬件加速,但实际上可能有高达45%的文件,是GPU解码不了的,所以识别这些文件,同样的编解码器可能有不同变种,有些能用GPU解码,不同GPU厂商的能力也不同,这些都得识别出来,如果能用GPU就交给GPU这个黑盒子去处理,如果要走软件回退,那一开始要先做商阶码 [00:13:01 → 00:13:34]
也就是把比特流里的数学编码去掉,这要用到像霍夫曼编码或者算术编码这样的技术,来解压比特流的数学层,然后我们需要开始读取真内预测的语法元素,真内预测就像视频里的静止图像,也就是你的I针,这一切都在空间域里操作,你在空间域做完针内预测,会得到一个残差,因为你的预测跟真实情况不完全匹配,你做了预测但还差一点点,这就叫残差 [00:13:34 → 00:14:07]
残差是存在频域里的,并且会被量化以节省空间,接着我们需要做逆变换,把它们重新拉回空间域,再把这些残差加上去,所以解码的很大一部分过程,就是处理这些被压缩的内容,没错,对 [00:14:07 → 00:14:26]
发言人03: 你还得预测出那个位置,应该是什么最高质量的内容 I-ZEN是你的空间域里最好的表示,然后根据边界码器的不同,还会有大量时间方向的压缩,接着你再预测,预测被捕捉到的原始真实画面,应该是什么样子,对,人们往往意识不到,视频和音频的压缩比有多惊人,大家不知道我们到底压缩了多少,拿音频来说,从普通音频到MP3 [00:14:26 → 00:14:50]
发言人02: 会压缩到原来的十分之一左右,到了视频,你需要压缩大概两百倍,所以你得去掉所有那些,你其实并不在意的细节,因为我们做的所有压缩,都很重要的一点 [00:14:50 → 00:15:02]
都很重要的一点 [00:15:01]
发言人02: 都很重要的一点,经常被人忽略,它是给人看给人听的,所以无论是音频,还是视频编辑码器,基本上都是在模拟人耳的工作方式,包括耳朵的各种响应特性,对人眼也是一样,比如说,在视频里,我们并不用RGB 大家都以为我们在用RGB 其实不是,我们转换到UV 其中一个分量是亮度,其他的是颜色,这正好匹配你的眼睛,你眼睛里有视追细胞和视感细胞,有些对亮度更敏感,有些对颜色更敏感,所以我们需要大幅压缩 [00:15:01 → 00:15:34]
也就意味着要丢弃信息,但丢弃信息时,必须符合人类的感知特性,这就是它难的地方,然后我们还要用上,最强大的数学能力,各种非常复杂的技术,就像Kieran说的,我们转到频域,做大量的量化,来达到最好的压缩效果,但看起来还要很好,你在压缩的时候,其实是在为了人类感知,去尽量保留最高质量的内容,这一点非常重要,压缩跟ZIP不一样 ZIP是数据进去数据出来,你试着用各种压缩方法,逼近无损的极限,而在我们这里 [00:15:34 → 00:16:08]
我们是在有损地处理信号,所以我们得用最好的方式,去降低音频和视频信号的质量,而且我们能做到,但这首先需要大量关于眼睛如何工作的理论知识,还需要很多数学上的变换和技巧,比如说当你从RGB转到UV时,我们通常会降低颜色分量相对于亮度分量的分辨率。大多数时候光这一步不需要进一步压缩,文件大小就已经减半了,而大部分人根本看不出来诸如此类,然后你会用到非常复杂的数学变换。 [00:16:08 → 00:16:41]
当然,你会想到负力叶变换,但实际上我们用的并不是负力叶变换,而是像离散余弦变换之类。但思路是类似的,都是转到频域,我们会把视频切分成很多块,这就是为什么如果解码出错,或者编码质量很差,你就会看到那些方块,通过这种方式,我们能达到极高的压缩率,每一代新的编解码器,在相同画质下,码率还能再降低大概30% [00:16:41 → 00:17:08]
发言人01: 但这需要极其巨大的算力,不不,但你得展开讲讲,它好了30% 但是在压缩能力上,可能有一个数量级,甚至两个数量级的提升,这才是最大的区别,什么,你是指压缩能力吗,抱歉,是达到压缩级别所需的CPU算力,对所以你得能利用CPU 有时候还要用到GPU [00:17:08 → 00:17:34]
发言人03: 就像你刚才提到的,然后我们得提一句,很多这种编程,都是在尽可能底层的技术站上完成的,不管是C语言,当然了,就像传奇推特账号,反复强调的那样,大量的汇编语言 [00:17:34 → 00:17:47]
发言人02: 所以整体上发生的过程是,你先有一个地址,对吧,这个地址通过操作系统,给你一个字节流,一个数据流,对吧,这是第一步,第二步就是解附用,在这里你会把音频,视频,字幕,分到不同的轨道里去,然后对每个轨道,你会把它们解压缩,解码音频,用音频codec 视频,用视频codec 字幕,用字幕codec 一旦你把这些东西都解码之后,你就有了原始图像,原始音频,然后你就会去跟你的显卡和屏幕对话,把图像显示出来,音频也是一样的 [00:17:47 → 00:18:21]
你会跟你的声卡对话,然后声卡再把模拟信号,送到你的扬声器里,我们刚在过去几分钟里说的每一件事 [00:18:21 → 00:18:29]
发言人01: 每一句话,都可能是某个人一辈子的工作,关于每一句话,都有成堆的书,所以很多情况下,这个复杂度是高的离谱的,你知道,每一句话背后,整个行业里都有成千上万的人,在为此工作,写了很多书,所以这里面有海量的细节,无数的微妙之处,既涉及学术上的现实,又涉及工程上的实际,而这两方面都很重要 [00:18:29 → 00:18:56]
发言人03: 我们提到了Codec 但我觉得你还没有提到容器,那么咱们聊的这些内容里,真正的容器都有哪些呢,大家都很熟悉 MP4 MOV MKV这些,所以容器的概念,和装在里面的东西,到底有什么区别,容器也就是我们常说的附用器,对吧,当我说解附用,意思就是解除附用,对吧,所以你看附用器,多路附用器和多路解附用器,对吧 [00:18:56 → 00:19:22]
发言人02: Mux和Demux就是干这个的,而Codec实际上是编码器解码器,对吧,所以容器就是多个轨道的集合,对吧,普通人把它叫做文件格式,但其实比那要微妙一些,不过大家最熟的当然还是MP4 但是我刚入行的时候,主流是AVI对吧 AVI是微软推的视频格式,而Movie后来演变成了MP4 是苹果推的格式,在开源社区里,有一位至今还在V6栏活跃的人叫Steve La [00:19:22 → 00:19:49]
发言人03: 他发起了Matroska格式,这个格式要更复杂一些,功能更完备,当然还有很多其他格式,所以我的意思是,这其实很常见,可能咱们这场对话里,也会有人把容器和口袋搞混,对吧,比如说把MP4和H264混为一谈,这算不算一个很严重的错误,不算,不算,因为从技术上讲 H.264的名字其实是MPEG-4第十部分 [00:19:49 → 00:20:14]
发言人02: 因为MPEG-4其实是一个原规范,里面包含了好几个东西,里面有第二部分就是音频Codec 比如AAC就是MPEG-4音频的东西,其实在MPEG-4规范内部,就有好几个视频编码,其中一个就是MPEG-4第十部分,也叫AVC也叫H.264 所以这完全是整个行业的问题,他们把事情搞得很难懂,所以这非常难,导致人们搞不懂,为什么你有收说MPX第十部分 [00:20:14 → 00:20:42]
发言人01: 其实你指的是H264 而它又不是MP4格式,所以从技术上说,你是可以把各种不同的Codec 塞进容器里的,而且往往乱的不行,所以不过总的来说,大家理解的MP4通常就是 H264加AAC音频 99%的情况下是这样,其他的情况都是极少数,一些很小的边缘情况,跟这个比起来真的微不足道,所以就算有人对此感到恼火,也没什么大不了的,但实际上,就拿VLC来说吧,文件名可能写着MP4 [00:20:42 → 00:21:16]
但里面的东西,可能完全是另一回事,这正是 FMPEG和VLC面临的挑战之一,现实世界跟三个字母的文件,扩展名完全是两码事,这一点很重要,必须得说,对吧,比如说在VLC里面,我们是不管文件格式的 [00:21:16 → 00:21:33]
发言人02: 对吧,我们会直接查看文件内容,去搞懂里面到底是什么,因为太多人会说,这是个视频,那它肯定是MP4 但从技术上说,它可能是个MOV 或者可能是个MKV 对吧,所以我们会实时分析 [00:21:33 → 00:21:46]
发言人03: 我们拿到的所有数据,我们不信那个扩展名,那么它是MP4 这个事实能给你什么信息呢,它有帮助,对吧,它会给你一个提示,对吧,就像它的后缀是MP4 我会首先用MP4容器解附用器,去探测它,看它应该是那个,但我不信它,如果我搞不定了,我会说,好那我试试别的,所以它会提高,那个模块的优先级,那么你是怎么做到,这里稍微扯开一点,你知道,最笨的情况是,你去试了,结果发现,它用的口袋,跟你预期的不一样,这时候大多数播放器,就直接崩了,对,对 [00:21:46 → 00:22:21]
那你们怎么做到,不崩溃的,从哲学上讲,我确定这中间,有一大堆的绊脚石,在这些地方,你很容易就直接崩溃,停止,吓傻了,就这样了 VLC是怎么做到,这就是VLC这么受欢迎的原因, [00:22:21 → 00:22:37]
发言人02: 但原因其实是VLC最初只是一个叫VDOLAND流媒体解决方案的客户端, 那是很久很久以前,大概90年代末的时候, 当时你播放视频的时候,视频是通过UDP在网络上传输的, 数据可能会受损,所以你从一开始就不信任你的输入, 这一点对安全性也非常重要,因为你不能信任输入, 所以VLC里面的所有东西,都准备好了要处理损坏的文件,这是从一开始就定下的哲学思想,所有的工程设计都围绕着这一点,而且这变成了一种文化对吧 [00:22:37 → 00:23:12]
所以举个例子 VLC当年变得特别流行,就是因为很久以前,人们会下载盗版内容 [00:23:12 → 00:23:18]
发言人03: 虽然今天大家做的少多了,而我们这些人从来都没有,当然不是,像播放某些AVI文件的时候,原数据是在文件末尾的对吧,你在下载的时候,是拿不到那些原数据的,对不对,所以VLC当时的做法就是,这个文件坏了,但我还是试着解读它,这在当时非常有用,我们之前已经暗示过,各个不同阶段有多厉害,也暗示过边界码器有多厉害,它涉及的内容深度,丰富性和复杂性,那么让我们试着定义一下,什么是视频边界码器,这里面都包含什么 [00:23:18 → 00:23:52]
压缩到底是什么意思,你已经稍微讲了一点,但我们能不能再展开聊聊 [00:23:52 → 00:23:57]
发言人01: 那么任何视频里,都存在着巨大的冗余,既有空间上的,也有时间上的,任何视频编解码器的目的,就是去除这些冗余数据,利用数学特性,作为这个缩减过程的一部分,大多数情况下,压缩所用的算力,要比解压多好几个数量级,因为压缩在财务上,和CPU资源上都更昂贵,所以从这方面说,它是非对称的,常常是这样,因为压缩只做一次,但解压可能有很多观众,所以要把信息拿来压缩到1% [00:23:57 → 00:24:31]
2% 去掉冗余信息,运用数学特性把它变小,同时还要有一些特性,比如抗插错能力,就像JB前面提过的 VLC最早是用来播放UDP网络流的 UDP网络流是会丢包的,所以编解码器的设计目标之一,就是要具备可恢复性,你得能够中途加入一个流,这不一定是一个文件,你需要能够加进去,进入解码流程,然后开始解码,那给不太熟悉的朋友,一个更具体的例子吧,比如你看任何类型的电影,对吧 [00:24:31 → 00:25:04]
发言人02: 镜头会摇移会移动,你会注意到,比如背景里的云在一分钟,甚至30秒里都是一样的,对吧,所以你可以重用,你看到的背景里的那朵云,你可以从一个帧重,用到另一个帧,对不对 [00:25:04 → 00:25:18]
发言人03: 所以你的内存越大,算力越强,你能做的比较就越多,也就能压缩的越厉害,现代的大多数编解码器,基本上就是这么干的,再讲得更明确一点,视频是什么,视频就是一堆像素,每个像素有红绿蓝三个值,你有一个像素网格,然后假设每秒24 30或60帧,这些像素每秒重复30次,展现出不同的内容,所以那个哲学上的,技术上的问题就是,我怎么把这些全部压缩,用100倍的压缩比存储下来,对甚至1000倍 [00:25:18 → 00:25:51]
对吧 1000倍,目标是1000倍对吧,而目标是,当你说冗余的时候,冗余是什么意思,是指那些东西如果没了,人眼最好能注意到,所以比如,你有一朵云的画面对吧,到了下一帧,那朵云还是同一个云,所以它就是冗余的,你只需要把它放一次,不用重复放对不对 [00:25:51 → 00:26:10]
发言人02: 或者比如我身后的黑色背景,整个画面上的黑色,都是一样的对吧,所以你就可以说,好在这个画面里,拿左上角的像素,和右上角的像素来说,我不用给你数值,我只告诉你,它跟左上角的一样,然后对于第一帧你可以说,附用之前某个帧的内容,或者更早的帧,以此类推,对不对,所以你可以说,这其实是无线的,但它在内存和算力上,是有限的,因为比如说,你要是想在过去的200帧里 [00:26:10 → 00:26:37]
发言人03: 在4K分辨率下比较像素,那需要巨大的算力,然后当你播放的时候,你又得把所有这些再解压缩,所以编解码器里的编码和解码,是你要同时开发的一个,偶合过程吗,是的,没错 [00:26:37 → 00:26:50]
发言人02: 而这两者之间,有不同的权衡,对吧,你是要压缩得更狠一些,但那样解码可能会更难,还是你要把编码做得更复杂,以便解码更容易,或者你要让编码更简单,因为你需要速度,但那样客户端,播放器那边就要花更多时间,这就是为什么有那么多,不同类型的编解码器,因为这事从来都不简单,而且更复杂的是,像AVE AVR或者VVC 这样的现代编解码器,它们其实并不是单一的编解码算法,而是一个工具集合,对吧,同一个编解码标准里 [00:26:50 → 00:27:25]
包含了多种工具,多种编解码手段,根据画面内容,来获得更高的压缩率 [00:27:25 → 00:27:30]
发言人01: 所以我再展开一下,像AV1 VVC这样的编解码标准,面向的使用场景非常广,可能是屏幕分享内容,可能是普通视频,也可能是动画,所有这些,需要不同的编码工具,所以现在通行的做法就是,把一堆工具集合起来,起名叫AV1 AVR或者VVC 来满足不同的使用场景,所以你可能是用 Zoom共享你的PPT 然后你又需要,给观众看一段视频,这时候边界码器,就需要根据内容,来切换工具组合 [00:27:30 → 00:28:04]
用不同的方式进行压缩,而且像你说的,这每一个部分,构成AVE的每一个工具背后,都有一群非常了不起的工程师,没错,好了,我们之前一直在兜圈子,聊了VLC [00:28:04 → 00:28:18]
发言人03: 它的logo MOS 那现在聊聊FFM Pack吧 FFM Pack到底是什么 FFM Pack基本上就是,编解码器的底层库,所以包括压缩解压复用器 [00:28:18 → 00:28:31]
发言人02: 解复用器还有滤镜,核心就是这些,然后你还有一些工具,可以让你创建一条流水线,去处理任何类型的视频文件,它作为一个库,被用在几乎所有的东西里面,从VLC到Chrome 到你的智能电视,基本上你在网上看到的任何视频,通常都用到了FFM Pack 而且它包含了所有这些工具,有时候还会依赖其他库,比如XR64 Libby PX等等,对吧 [00:28:31 → 00:28:56]
发言人01: 所以它真的是现在处理图像的,适时标准工具,从哲学层面来说,我觉得这件事特别了不起,你的家庭视频,你祖母的家庭视频,跟那些万亿级的公司,实际上是在同一个竞技场上,用的是同样的技术站,你根本不会觉得意外,这些大公司,可能电脑上跑的就是,三千行的FFM PEG命令,确实有些公司会用API 但有些就是靠长长的命令行来干活,对,有一堆工具,比如直接可以用的命令行工具 FFM PEG [00:28:56 → 00:29:31]
当然还有FF PROBE 还有几个酷 Libav Codec [00:29:31 → 00:29:35]
发言人03: Libav Format Libav Filter 但是命令行的FFM PEG 简直是个传奇,因为它能剪切,有那么多的参数,你可以定制一切,没错,它就是一门语言,真的是一门语言,没错,对 [00:29:35 → 00:29:48]
发言人02: 你完全可以把它当做一门编程语言,对,当然了,肯定的,因为大多数人用FFMPEG 就是指定输入文件,输出文件和格式,对吧,但我们见过有上万个字符的命令行,也见过有人用编程的方式,生成命令行 [00:29:48 → 00:30:02]
生成命令行 [00:30:01]
发言人02: 生成命令行,来用FFMPEG 还有一大堆人用AI来生成 FFMPEG的命令行,因为你根本不知道该怎么写,但你可以指定非常多的滤镜,对吧,通过命令行,所以FFMPEG 就是一个多媒体处理的工具箱,所有人都在用,每个看你视频的人也都在用,你看YouTube 服务端是FFMPEG 客户端那边很可能就是Chrome 而你在Chrome里看视频,其实也在用FFMPEG 你用OBS录屏,那也是FFMPEG 对吧,你用的一大堆重要的,大型的专业设备,里面很可能某一部分 [00:30:01 → 00:30:36]
就跑着FFMPEG [00:30:36 → 00:30:38]
发言人03: 我想说的是功能实在太多了,给大家一个概念吧,我自己经常用FFMPEG 做各种事都是很日常的操作,比如拿一个视频,加上片头视频和片尾视频,让它们之间做一个黑场过渡,就是画面先按下去,然后亮起下一个视频,音频也跟着做同样的处理,还有音频的交叉溶解,让声音先静下来再响起来,还有很多功能,比如在屏幕显示,硬字幕把字幕烧入进去,你可以自定义字体,可以做各种音视频的分层叠加,能做的事情成千上万 [00:30:38 → 00:31:12]
而且所有这些对几乎任何边界码器,都像魔法一样有效,不管你在音频还是视频测塞什么进去,它都能处理,这就像举个例子,你用FMPEG可以在命令行里,做那些本来要在Adobe After Effects里做的事,对吧,这很有意思 [00:31:12 → 00:31:30]
发言人02: 因为比如对于图像处理,就没有这样的工具,虽然有几款工具,但没有FFMPEG这么全面的 Image Magic有类似的,对,但它做不了某些复杂滤镜,确实在命令行里,你找不到Photoshop的等价物 [00:31:30 → 00:31:44]
发言人03: 但视频方面命令行里有FFMPEG 是的太不可思议了,这就是一个例子,当一群很厉害的人聚在一起,有了一个愿景,并且坚持那个愿景很多年,这本身就很了不起 [00:31:44 → 00:31:57]
发言人02: 背后的愿景VLC和FFMPEG都是这样,把一切非常复杂的东西变得普通人,也能轻松使用,让每个人都能用,我们的目标就是把技术上,极度复杂的东西变得易于使用,人们用VLC的时候,拖个文件进去,根本意识不到那文件有多复杂,但就是能播放,或者人们在FFMPEG里塞进任何东西,加上复杂滤镜,它就像变魔术一样直接能用 [00:31:57 → 00:32:23]
发言人01: 这就是我们的使命,搞定这些复杂的东西,如果做播客需要传统的电视演播室配置,那我们就不会在这儿,你也不会在这儿了,正是像FFMPEG这样的工具,让播客流媒体革命,也要去革命变得大众化 FFM派在其中是个大玩家,因为他普及了这项技术,比如在90年代,你需要价值几十万美元的设备,像汽车一样大,才能做压缩,而现在每个人都有了,几乎完全平等的条件,这真的很了不起 [00:32:23 → 00:32:56]
他给了很多人发声的机会,对了我澄清一下,我们说你也不会在这,不是指你这个人,而是指这个播客,抱歉 [00:32:56 → 00:33:04]
发言人03: 你作为,我是说VLC跟从生物学上,创造我这个人,可没什么关系,大家也意识到,一切都在从文字,转向图片,在从图片转向视频,看看社交网络,视频无处不在,它是最强大的媒介,当你看到Shorts Reels和TikTok的时候,视频的力量,真的很惊人,但背后的复杂程度,也很重要,这正是人们,没意识到的地方,我是说,真的,它把力量赋予了,全世界的个体,这是真正的自由,而且,我简直不敢相信,我们还没提到,最明显的那一点 [00:33:04 → 00:33:37]
对于不熟悉的人来说,它是开源的,背后有一个由用户和开发者组成的开源社区,所以它真的是一场运动,我们会从不同角度聊聊背后的社区,但你能不能先谈谈开源这一块,当我们说FFMPEG是什么,它是一个开源项目,好的 FFMPEG VLC X264 [00:33:37 → 00:33:57]
发言人02: 以及我们所做的一切都是完全开源的,对于不理解开源是怎么回事的人,我常用的类比是巧克力芝士蛋糕,通常你想买芝士蛋糕,你会去面包店,他们给你一个成品,另一种获得知识蛋糕的方式,是让你奶奶给你一份怎么做蛋糕的食谱,我们做开源的时候,不仅给你巧克力蛋糕,还给你重新制作同样蛋糕的食谱,同时还告诉你如何建造烤箱,而且允许你修改食谱,并转卖给其他人,这是因为软件其实就是一长串小指令的食谱,计算机并不聪明,他们只是跑得飞快 [00:33:57 → 00:34:32]
所以一个普通的程序有上百亿条指令,而不是像巧克力食谱那样,只有几十条,很多软件行业就是卖软件,就像只卖给你最终的芝士蛋糕,在开源里,我们把一切都给你,这样就能让很多人一起协作,因为这样一来,你们就决定要做出最好的程序,最好的视频处理食谱,然后就创建社区,在FFM PEG社区,从项目开始至今,大概有两三千人贡献过代码,这跟Linux内核一模一样 Linux可能有一万人在各处贡献,他们聚在一起,当然主要是线上 [00:34:32 → 00:35:05]
共同打造出某个领域最好的工具,在FFMPEG和VLC这里,比如有人发现某段代码不行,就会去研究编解码器,然后给FFMPEG添加对某种文件的支持 [00:35:05 → 00:35:18]
发言人03: 这样所有人都受益,因为我们为更大的利益而工作,为每个人而工作,这就是开源的意义,而且我们得提一下,根据许可证类型的不同,你大概可以围绕它,在它的基础上封装构建 [00:35:18 → 00:35:31]
发言人01: 打造出一家价值十亿甚至万亿美元的公司,是的,人们确实这么做了,确实,没错,过去有很多问题,主要是云服务商,他们基本上在云端,运行一些开源工具,然后给你一个API去访问,像MangoDB和Elasticsearch 这样的数据库,就更改了许可证,来避免这类情况,这也是我们在FFMPEG 经常被问到的问题,你们为什么不那么做,但你做不到,我们有成千上万的贡献者,有些人甚至已经不再试了,你需要得到 [00:35:31 → 00:36:04]
他们所有人的同意,而且JB 稍后也许会详细聊聊 VLC在重新许可这件事上,经历了多么大的挑战,许可证其实是一种社会契约,它决定了社区事实上由谁掌控,社区里大家除了许可证之外 [00:36:05 → 00:36:21]
发言人02: 几乎什么都达不成一致,人们围绕着许可证去争论去讨论,而这也让许可证分叉成为可能,对吧,有时候社区会分裂,但也正是因为许可证的存在,才有机会再合并回来,这样的例子我们见过很多次了,比如GCC和GC 还有以前的EGCC 还有所有的网页浏览器,对吧,他们最开始是KHTML 后来变成WebKit 再后来又变成了Blink 对吧,所以说开源许可证就是社区的核心,来自世界各地,有着不同宗教信仰,不同政治背景的人 [00:36:21 → 00:36:56]
在同一个项目上,用同样的方式工作 [00:36:56 → 00:36:59]
发言人03: 去解决一个特定的问题,而我们正在解决的这个特定问题,就是让多媒体对每个人来说都变得简单,我在Perplexity上查了一下,看不同的开源许可证,大多数主流开源许可证可以分成两大类,一类是宽松型的,限制条件非常少,另一类是助左权型的,要求衍生作品,也必须采用同样的许可证,下面是你在实际中会经常碰到的,一些主要许可证的简要使用总结 MIT许可证 BSD Apache GNU GPL AGPL LGPL在哪呢,哦LGPL [00:36:59 → 00:37:33]
再看一下,还有Mozilla公共许可证 Eclipse公共许可证,清单还很长,种类真的很多,我觉得真正流行的就是MIT GPL和LGPL 还有BSD 对BSD和Apache 有时候你会看到Apache Apache许可证,那也是一个选项,它尝试将代码贡献到公共领域,同时还有一个宽松的备用许可证,针对不同的事情,有各种不同的许可证,很多人不明白的是,公共领域这个概念,在全球范围内其实并不存在 [00:37:33 → 00:38:05]
发言人02: 所以所有的开源许可,其实都是在利用著作权法,利用国际著作权法,来赋予你如何使用软件,或如何修改软件的权利,它实际上就是你给最终用户,或者开发者的一份著作权许可合同,第一类许可证就是非常宽松的,比如MITBSD 你把代码拿出来,基本上你想怎么用就怎么用,你拿去用,想修改就修改,这类许可证在JavaScript的领域 [00:38:05 → 00:38:30]
发言人03: 和BSD操作系统这类项目中很流行,所以这些许可证中,有一个参数是看他们是否要求署名,意思就是,如果你用了代码就必须声明,没错,所以在那些宽松型许可证里 [00:38:30 → 00:38:42]
发言人02: 有的要求你声明使用了它,这就叫署名,有的则不要求,然后还有另一类许可证,就是著作权许可证,要求你必须把修改后的代码回馈给社区,而且还附带着不同的条件,有些是比较弱的著作权许可证,比如Mozilla公共许可证,有些则更强一些,比如GPL 甚至还有像AGPL这样非常强的,所有这些不同的许可类型,都取决于你的目标是什么,以及你想如何构建你的社区,这就是为什么我提到社会契约,因为这一点非常重要 F, MPEG和VLC主要用的是GPL或LGPL [00:38:42 → 00:39:17]
Linux内核用的是GPL 但Android用的是Apache [00:39:17 → 00:39:21]
发言人03: 一大堆JavaScript框架用的,基本都是MIT 所有的BSD变体 [00:39:21 → 00:39:26]
发言人02: 比如OpenBSD,NetBSD,当然都用的是BSD许可证,所以这其实是一种哲学层面的选择,你希望人们以怎样的方式回馈社区,基本上就是这样。 [00:39:26 → 00:39:37]
发言人03: 我记得你之前提到过,你在某个时候,把项目的某些部分,从GPL迁移到了LGPL 能不能说说,这两者之间的区别,以及向更宽松的方向迁移,需要做些什么,也就是朝着更宽松的方向 LGPL比GPL更宽松,是的,你要明白,从更宽松的许可证,转到更严格的,总是可以的,对吧,因为这些许可证 [00:39:37 → 00:40:04]
发言人02: 本质上就是一种声明,所以如果你想限制更多,你总是可以进一步限制, 对吧, 在一个GPL项目中, 你可以引入MIT代码, 但反过来就不行, 对吧, 因为MIT更宽松, 而GPL的约束更严格。实际上, 我就把VLC的核心引擎LibLC从GPL改成了LGPL, 这么做有两个原因, 第一个原因是, 这样人们就能在第三方应用中使用VLC引擎LibLC了。实际上, 很多在你手机或平板上播放视频的应用, 内部都是用的VLC引擎, 进而调用FFMPEG [00:40:04 → 00:40:38]
这样一来,我就可以创立一家公司,专门做咨询和集成工作,把VLC整合到第三方解决方案里,比如整合到游戏引擎,或者类似的东西里,如果用GPL就做不到这一点,因为那意味着,你必须把所有东西都开源,而对于很多商业公司来说 [00:40:38 → 00:40:54]
发言人03: 他们并不想那样,所以用LGPL 你就可以围绕他创立一家公司,没错,可以做商业化的东西,不必开源,这真是一个巨大的跨越,所以你可以,就是为了在游戏里播放视频,没错,问题在于 [00:40:54 → 00:41:08]
发言人01: 我是一位游戏开发者,我想播放一些视频,但我不想,仅仅为了播放这些视频,就被迫把整个游戏都开源,所以基于LibLC的LGPL许可,咨询业务就能帮到你 LGPL也就是酷GPL 过去常这样叫,它允许你这样做,还有FMPEG也是一样 LGPL强制要求你,回馈你对这个组件,这个酷所做的修改 [00:41:08 → 00:41:32]
发言人02: 这就是为什么叫酷GPL 所以你可以将FFMPEG 以LGPL的方式用在任何类型的应用中,甚至是币源应用, 但你需要把你对FFMPEG做的修改回馈给社区。 [00:41:32 → 00:41:45]
发言人03: VLC也是同理。从开源的角度来看,使用GPL是不是会带来限制?因为如果你是一个库,如果你的代码是GPL, 就意味着你基本上是在阻止公司围绕它来建立商业模式。是这样吗?我这么说公平吗?这要看具体是什么公司。但对于那些商业模式要求应用必然的公司来说,确实会受到限制,这就是为什么我把它迁移到了LGPL 这是第一个原因 [00:41:46 → 00:42:13]
发言人02: 第二个原因就有点不那么为人所知了,就是苹果iOS应用商店的服务条款,使得在上面发布GPL应用变得非常复杂,而LGPL应用则相对容易一些,所以VLC在Windows、MAC和Linux上是GPL 核心库是LGPL 但在iOS上 iPhone版和Apple TV版用的是,另一种不同的许可证,叫NPL 是的,我当时去改了许可证 [00:42:13 → 00:42:38]
发言人03: 这说来话长了,所以我理解要更改许可证,基本上你需要联系所有的贡献者,是的,有一点非常重要,就是要明白,开源项目在美国著作权法下,被称为合作作品 [00:42:38 → 00:42:51]
发言人02: 在大陆法系下叫集体作品,或协作作品,意思是,大家一起朝着同一个目标工作,最终产出一个软件,形成一个发布版本,但著作权是由每个个人各自保留的,有些开源项目不这么做,他们强制要求著作权转让,但我们社区不这样,所以每个人基本都保留着,自己所写代码的著作权,而且即使你的贡献后来被删除了,这个著作权依然存在,因为新的贡献可能是基于你之前的代码写的,对吧,所以如果你想正当地重新授权,你就必须找到所有的贡献者 [00:42:51 → 00:43:25]
当时我不得不联系了超过350个人,有时候他们也就只是一封邮件的事,所以有时候你得真的去追踪,我甚至亲自跑到某个地方,去他们工作的地方当面说,你好,我是根据网上的信息找到你的,你能把那个代码的许可证,从GPL改成LGPL吗,大部分时候他们根本不在乎,他们只是想帮助VLC 但这也让我遇到过非常复杂的情况,有一次我找到一个人的工作单位,他是一位工厂工人,我跟他说,我需要你签字 [00:43:25 → 00:43:59]
因为真正写那段代码的是他去世的儿子,对吧,所以我不得不解释,所有这些开源的道理,一直跟他解释说,不我不是什么公司,我不是想夺走他儿子写的那两行,五行代码,那代码确实很有用,而且这件事整个社区都同意了,那位父亲完全搞不清楚状况,他是个工厂工人,我当时也年轻得多,大概14年前吧,我当时几乎要哭了,真的非常非常难,你明白吗,这关乎的是人的生命,我们后来还聊了他儿子的照片,所以把这件事做对做得妥当,真的很重要 [00:43:59 → 00:44:32]
但是这也意味着,你必须追踪到每一个人,因为每一个贡献都有价值,有些项目不尊重这一点,在重新授权时有点太激进了,但正如我所说,这会摧毁整个社区的核心,因为大家唯一能达成一致的,就是这张许可证 [00:44:32 → 00:44:48]
发言人01: 所以这点至关重要,我要强调一点,这个社区里的人是形形色色的,有的人身处叙利亚战区,只能间歇性用电,各个阶层的人都有,富人,穷人,年轻人 [00:44:48 → 00:45:02]
年轻人 [00:45:01]
发言人01: 年轻人,老年人,所以能把这么一群人团结起来,本身就是一件了不起的事,没错,这太不可思议了,而且他们中,很多人都是性格内向的人,所以你想找到他们,让他们回复一封邮件 [00:45:01 → 00:45:15]
发言人02: 可能会非常困难,我们大多数都是内向的人,对吧,你得更精确一点,你是极度内向的那种,真的是极度内向的人,对吧,但事实上,社区里什么类型的人都有,这不要紧,重要的是,你的代码好不好,够不够出色,技术够不够牛,我们只在乎代码是否卓越,不在乎你是谁,抱歉,我们根本没办法验证你的身份,也验证不了,就算你是一条狗,我也不在乎,我不在乎你来自哪里,我只看你的代码,这一点很重要,因为很多人不理解,他们来到社区,提交一些补丁,结果被拒了,就不高兴,但我只能说 [00:45:15 → 00:45:50]
抱歉,没达到我们的标准,但他们会说,我可是意大利德国,或美国某家大公司的工程师,我们不在乎,我们在乎的是代码质量, 因为这是定义我们社区的东西, 这也意味着我们有来自很多不同背景的贡献者, 包括像WinTraverse那样的人, 没问题,这很好啊。说到社区里的传奇人物, [00:45:50 → 00:46:09]
发言人03: 当然少不了林纳斯·托瓦兹, 他创建了Linux, 并长期担任Linux内核的维护者。传说中,他在审查代码, 秉持精英治理原则时可是相当严厉的, 会直接说这不够好。你能谈谈林纳斯·托瓦兹的这个传奇吗,林纳斯是独一无二的人物对吧,我甚至会说他在Git上的贡献,比他在Linux内核上的工作还要有趣,他确实很严厉 [00:46:09 → 00:46:36]
发言人02: 但人们没看到的是,通常他严厉的对象,是那些维护内核某一部分的人对吧,所以他们认识他,他并不是对每个人都这么严厉的,关键在于他在自己房间里创造的东西,现在正支撑着网络上几乎每一台服务器,包括微软的云服务Aro 我敢肯定 70% 80%的服务器都在运行Linux 所有安卓手机也在运行Linux 它通过开源的力量所做的一切,简直令人惊叹,没错 Linux内核的质量非常高,要达到这个标准确实很难 [00:46:36 → 00:47:09]
但我们在质量上不能妥协,绝对不能妥协,因为归根结底,你得理解一点 VLC的核心社区只有5个人 FMPEG的核心社区在10到15人之间,而最终维护你的代码的,就是我们这些人,对吧,在你那个时间线上,可能有一千个贡献者,但只有大约一成的概率,会有人留下来,而且是长期留下来,你可能会换工作,换伴侣,生小孩,生活中遇到意外,或者只是换了份工作什么的,你很可能不会再回来,所以代码最终,是由我们来维护的 [00:47:09 → 00:47:43]
它必须易于维护,必须写得非常出色,没错,有时候这意味着,你需要反攻重写你的代码,因为它可能只是不错,但还没达到卓越,我们需要卓越 [00:47:43 → 00:47:54]
发言人03: 因为我们人手太少,而要维护的东西,对整个世界都至关重要,但我们也应该提一下,在维持这种高标准的卓越时,有时候语言上,确实会有些尖锐,有些严厉,这有什么可说的吗 [00:47:54 → 00:48:07]
发言人02: 确实如此,对吧,另外一个事实是,我们做的是底层开发,技术性极强,你进入这个社区,就会发现它的调调非常,就像一种亚文化,那些从外部进来的人,基本上不了解这种亚文化,像FFM PEG和VLC社区里的大多数人,我们每年都会搞视频开发者日,就是VDD 在现实生活中,大家玩得可开心了,都很喜欢,但确实在线上的时候,有时候那个语气 [00:48:07 → 00:48:33]
发言人03: 你自己都意识不到,它听起来怎么样,不过这也还好,这是一种文化,我的意思是,你在游戏文化里,能看到人们交流的方式相当严厉,激烈,而且大家都明白,表达爱和尊重的方式,在不同社区里,看起来就是不一样,有时候这得看情况,如果是一个读书俱乐部,人们通常会和气得多,但如果是一个高风险,用活量达数百万的开源项目,那就不一样了 [00:48:33 → 00:49:00]
发言人02: 但值得注意的是,我们这里很少有你在游戏社区里,看到的那种侮辱性言语,所以林纳斯的语气,即使在开源社区里也略显另类,他更多是针对结果说狠话,比如不这不行,这是垃圾 [00:49:00 → 00:49:13]
发言人01: 你会看到的是这一类的话,性量对事不对人,针对的是代码,不是个人,对是的,这完全就是就是论事,我觉得你得这么看,你知道著名的FMPEG项目,几乎完全是由志愿者开发的,这是事实,你得想象一下,有人白天辛苦工作了一整天,回到家,可能还有一堆别的事情要操心,所以你说话直接点,这并不是针对个人,你很累很忙,但你仍然在乎这个开源项目,只不过你未必能跟人详细解释 [00:49:13 → 00:49:47]
手把手地教他每一个细微之处,另外你还得意识到 [00:49:47 → 00:49:51]
发言人02: 大多数人并不以英语为母语,这对于像FNPAC和VLC这样的开源项目,尤其如此,他们主要以欧洲为中心,有时候来自美国或某些地方的人,会对这种语气感到很不高兴,但很多时候,其实也是因为他们不太了解,对吧,语言这东西很难说,英语是一门难学的语言,有那么多微妙之处,语气变化 [00:49:51 → 00:50:16]
发言人03: 你未必能完全掌握,所以在这样的社区里,由于文化和语言的不同,沟通起来往往也很困难,话说有一个传说 JB你曾多次拒绝数百万美元,为的就是让VLC保持开源,免费无广告为所有人服务,那么给我讲讲你背后的想法吧,是什么让你把数百万美元,就这么搁在桌上不要了,是啊,这简直都成个梗了对吧,在Reddit上,就是Reddit上的一个梗,不错,是啊是啊,我看到有,在Reddit上,你戴着VLC帽子,看起来像个巫师,上面写着 [00:50:16 → 00:50:51]
JB VLC媒体播放器的创建者,他拒绝了数千万美元,以保持VLC的免费,谢谢你,让巴迪斯特,你甚至在Reddit上可以召唤他,是啊,通常你看到就是,人们会在Reddit上追我,对吧,然后我就出现了,接着我就说声早上好 [00:50:51 → 00:51:09]
发言人02: 结果就拿到20400个赞,太棒了,对吧,我在Reddit上的业力,至少那个账户上,高得惊人,所以首先需要回答的问题是 VLC背后的故事是什么,因为是的,这是真的,我拒绝过数千万美元,没错,好几次,是的,我本可以成为千万富翁,在海滩上悠哉游哉,但我没有这么做,因为我觉得那是不道德的,那不是正确的事,对我自己来说,这一点非常重要,我为更大的善而工作,我为人们而工作,而且这不只是我一个人的感觉 [00:51:09 → 00:51:43]
另一个原因是,我也觉得自己并不完全有资格去拿那笔钱,让我给你解释一下,为什么VLC的故事其实非常奇特,在法国我们有大学,还有一种顶尖的精英院校,这些顶尖的精英院校,包括工程学院,商学院,以及法学院和医学院,但他们都是在大学体系之外的,要进这些学校,你得花上两年拼命学数学和物理,才能考进那些最好的工程学院,其中有一所学校,他后来改过名字,但当时他叫中央大学校,因为他是中央的 [00:51:43 → 00:52:18]
二战之后学校太小了,所以需要搬迁,他们打算把他搬到法国的中部,一个叫的地方,结果校友们不干了,说不行,我们这么了不起的学校,不能搬,那可是建了,埃菲尔铁塔的那所学校对吧,于是他们就在巴黎南部,离巴黎非常近的地方,买了一块地,那是一个由校友非盈利组织,来管理的校园,正因为这样,校园里的一切都由学生来管,大学什么都不管,所以广播电视超市图书馆,甚至谁住哪个房间,通通都由学生来管,太厉害了 [00:52:18 → 00:52:52]
这真是一个了不起的实验 [00:52:52 → 00:52:54]
发言人03: 竟然没有一下子就乱成一团,反而蒸蒸日上,它运行得特别好,而且我通过做这些课外活动,真的学到了非常多的东西,因为你才22岁,如果你不管好自己的校园,就会停电 [00:52:54 → 00:53:07]
发言人02: 对吧,所以你就会很上心,不过话说回来,到了80年代,他们做了一个全面的实验,部署一个网络,主要由IBM和Sancom赞助,那是一个另拍环网络,另拍环这东西,现在几乎没人知道它了,它是一种网络技术,里面没有路由器,所有人都连在一起,真的就像一个环,当你想发一条消息,你会告诉旁边的机器,然后它再把消息传给下一台,下一台再传给下一台,就这样沿着环传下去。令牌还的问题当然就是它非常慢,因为网络上的每一台计算机都得打开消息 [00:53:07 → 00:53:42]
看看是不是发给自己的,哦不是给自己的,然后再把它像令牌一样传回去,这个令牌就在还你转圈,在80年代你在学校里用远程登录,发发邮件那还行,但一到90年代情况就变了,开始有电子游戏了,你要是玩那种高延迟的游戏,基本就死定了,所以在1994 1995年那会儿,像毁灭战士和毁灭公爵,这些游戏流行起来,他们就需要更快的网络,于是学生们就去找学校,说你知道吗,我们想要更快的网络,我们得学习,但也得玩游戏啊。 [00:53:42 → 00:54:17]
结果学校告诉他们,哎呀,对不起,我们帮不了你们,校园又不是我们的,是你们在管你们自己想办法吧。你能想象吗,他们就这样把学校的合作方打发了,于是他们真的自己去想办法了,去找了一家法国大公司的首席信息官。这家公司当时在法国做电视业务,那位首席信息官说,你们知道吗,视频的未来在卫星,当然今天我们知道不是这样,但至少在1995年,那是个好想法,第一个卫星天线的想法是,与其给1500名学生,每人都装一个卫星锅和一个解码器 [00:54:17 → 00:54:51]
不如装一个超大的天线,只用一个解码器,再把视频直接送到网络上,这就需要非常快的网络,今天这听起来很平常,但在当时,那可是最早做视频流的尝试之一,于是他们搞了一个项目,起名叫网络二传90年代,所有有点未来感的东西都叫二传,没错,他们做了网络二传这个项目,结果项目完全是拼凑出来的,跑了45秒就崩溃了,不过没关系,他们要的就是40秒的演示,它有内存泄露也没关系,他们塞了64兆的内存 [00:54:51 → 00:55:24]
而不是通常的8兆或16兆,然后演示就该停在那里了,这就是学生们搞的,网络二师项目,他们当时处理的视频格式是什么?是MPEG-2,因为卫星信号用的是MPEG-2传输流, MPEG-2视频和MPEG-2音频, 就在那个年代,项目本来到此就该结束了。大家都很高兴,他们建成了一个惊人的ATM网络, 速度达到155兆比特每秒, 那可能是当时欧洲最好的网络之一, 他们就把项目停了。过了六个月或一年,来了两个学生, 说你们知道吗? [00:55:24 → 00:55:57]
说不定其他人也会关心在局域网上看视频, 于是他们创建了VideoLine项目, 其中一个学生叫克里斯托夫·马肖, 他是和我的好朋友, 他们开始做这个项目, 当时甚至还不是开源的, 他们花了大约三年时间, 才说服学校同意把它开源, 因为学校想要靠那两个MPG-2解码器的 [00:55:57 → 00:56:17]
发言人03: 知识产权和学生的版权来赚钱。我确认一下当时主要的应用是在局域网上播放视频。就是在局域网上播放视频。顺便说一句,那是在YouTube之前吧。 [00:56:17 → 00:56:29]
发言人01: 比YouTube早了十年呢,你用的还是奔腾溜碎,或75的处理器,对吧,当时主流的机器是486DX 主频33兆盒子,对吧,别忘了,那时候电视还是主要的视频形式,在90年代,能收到新频道,就是件大事,你从小只看四个频道,突然有了第五个,或第六个,那就是天大的事,所以能有这样一个卫星服务,让你看到几十个,甚至上百个频道,简直是开天辟地的,尤其是这所大学里有很多不同国籍的人 [00:56:29 → 00:57:04]
对吧,所以有很多人想看不同的频道,最后他们装了好几个天线,对准不同的卫星 [00:57:04 → 00:57:10]
发言人02: 比如有很多人来自中东那边,所以他们就去找那些相关的卫星,总之这个方案效果很好,他们开始了Videoland项目 Videoland里有很多方案,有些方案简直异想天开,比如说怎么在单波网络上实现主播,不过这我们就不细说了,太复杂了,但是Videoland的客户端部分,后来就成了VLC 实际上,他们几乎是强逼着学校同意的,让它开源,因为学校完全不懂这些,到了二三一年,还算比较早的,学校终于在二一年初,同意把它开源,我是在二三年加入这个项目的 [00:57:10 → 00:57:45]
因为那年我进了这所大学,所以我要先说明一点,我并不是VLC的创建者 [00:57:45 → 00:57:50]
发言人03: 因为实际上没有单一个人创建了它,它就是从VLM项目里,自然而然脱胎出来的,你刚才提到,我再重复一下,但想说得更清楚一点 Videoland 不管在当时还是后来,它是一套围绕视频的技术集合,而你称为客户端的那个VLC 正是大多数普通人想到的东西,没错,就是当你点开一个视频 [00:57:50 → 00:58:16]
发言人02: 弹出来的那个播放器,点击播放,所以我在23年入学,后来我创建了一个叫Videoland的,非盈利开源组织,我把所有东西都从大学里拿出来,建立了一个非盈利项目,想让它能够持续下去,确实我花在VLC和VideoLine上的时间,比任何人都多,这是肯定的,但它是之前那个VideoLine学生项目的延续,而那个项目又是网络二项目的产物,追根溯源从头到尾是一脉相承的 [00:58:16 → 00:58:42]
发言人03: 我相信在这个过程中,你一定有过不少时刻在思考,从开源的视角来看,未来会是什么样子,因为当时互联网正在爆发,有那么多公司,大家可能不记得了,都在赚着大钱 [00:58:42 → 00:58:56]
发言人02: 我可以告诉你,到了二衰五年这个项目本该就死了,是我决定要继续做下去,有一段时间我们只剩下两个活跃的开发者,但我认为这项技术很出色,很有用,将来也会有价值,于是我把我的人生,我的时间都投入了进去,我把它从一时的几十万用户,发展到几百万,再到我们今天看到的,很可能全世界有几十亿份VLC在各地被使用,这就是VLC故事的一个缩影,还有很多非常有趣的故事,关于世界各地的人如何为它贡献,就像你提到的 [00:58:56 → 00:59:29]
在叙利亚或者印度某个角落的人,但是一路走来,我收到过不少邀约,比如捆绑一些工具栏,你还记得那些可怕的工具栏吗,它们基本上就是间谍软件,或者会篡改你的网页浏览器,和搜索引擎,甚至是在VLC内部植入广告,我不喜欢这些东西,我不是反对赚钱对吧,我很乐意赚钱,我也创办过好几家初创公司,其中有一家我希望它能做得很好,关键在于,我认为赚钱要讲伦理,要用正确的方式去赚,搞那些偷偷摸摸的广告,或者偷窃用户的数据,这不是正道 [00:59:29 → 01:00:03]
这不是正道 [01:00:02]
发言人02: 这不是正道,比方说如果某天Netflix跑过来,说想跟VLC整合,那故事可能就不一样了,对吧,但他们没有来,当时找到我们的,只有那些不正派的广告公司 [01:00:02 → 01:00:13]
发言人03: 如果我同意了,我会赚到很多钱,对吧,但三年以后,这个项目就完了,会有人分叉它,就变成别的东西了,这甚至不仅仅是广告,或者类似的问题,更是那种见不得光,不诚实的东西,所以你的直觉很准,你的门槛很高,你一下就判断出,不行,这违背了他该代表的精神,但这对我来说也是这样,我很自私地讲,我晚上睡觉前,得对自己当天做的事情感到快乐,也许是成长环境 [01:00:13 → 01:00:40]
发言人02: 也许是我父母的错什么的,但我相信事情有对错之分,当时那个决定是对的,现在依然没错,我想为自己在做的事情感到骄傲,如果我当时出卖了,就会背叛很多很多人,是啊 [01:00:40 → 01:00:53]
发言人03: 我得说我和绝大多数网民都感谢你当时的那个决定,这很鼓舞人,对于其他正在推动开源运动前进的人来说,这会让他们明白,如果你坚信是对的,做这样巨大的牺牲是没问题的,我认为在那个事情上决定是对的,这也是VLC能那么成功的原因,因为它代表了一种精神,它象征着自由以及开源社区所能创造的东西,是的 [01:00:53 → 01:01:19]
发言人01: 而且能服务全世界那么多人,这很重要,我们应该强调一下,在2000年代下载一个程序,结果他偷偷装上间谍软件,这太常见了,那时候这些条款会用非常小的字,藏在没人会看的许可协议文本框底部,然后你就会发现,我装了这工具栏,还改了我这么多设置,那时候你装个程序想干点什么,几乎每次都碰上这种事 [01:01:19 → 01:01:44]
发言人03: 你设想一下自己是个当时的开发者,我觉得在座各位听众很容易理解,那个年代你很容易说服自己,拿几千美元,就几千美元去做那件事,是的,要对多的多的钱说不,那需要胆量和远见,我最后一次收到的报价,高得离谱,他们还跟我说,想想看,有这么多钱,你就能构建新的开源项目了 [01:01:44 → 01:02:07]
发言人02: 这就像一种思维把戏,挺难抗拒的,但对我来说,我就是觉得,不行这种事不能这么做,或者这不是正确的事,所以我就不做,再说一遍,不是我不喜欢钱什么的 [01:02:07 → 01:02:19]
发言人03: 纯粹就是那事不对,好的,我再次代表我自己和广大网民,谢谢你,我想再聊聊开源运动,以及你反复强调的事实 FMPEG和很多开源项目一样,是由支援者构建的,最近在推特上 Karen 也就是你,有点小风波,你推特上的风格很新辣,我觉得那很好的表达,并颂扬了那些了不起的开发者,开发工作,以及那些代码,特别是汇编代码,用于构建某些编辑码器,和这些竞争技术,但这引出了一桩闹剧,告诉我整个故事 [01:02:19 → 01:02:53]
跟谷歌安全工程师之间,发生了什么,先说清楚 [01:02:53 → 01:02:56]
发言人01: 谷歌是开源社区,最大的支持者之一,而且长期以来一直如此,只是我觉得这次,有些事做得有点过头了 FFM派本身,这也不是什么秘密,就在官网上写着,它处理的是不可信数据,当你解析不可信数据时,可能会出现安全问题,这非常正常,但最近的变化是谷歌开始用AI为一个开源项目生产安全报告 FFM PEG的志愿者们就得去应对这些,他们给了非常有限的资助 [01:02:56 → 01:03:31]
甚至抢先把他们AI有多厉害的消息告诉了媒体,在这些问题修复之前就这么干了,而且是在公开论坛上,是的,那么用AI在代码里找到一个缺陷一个安全漏洞,然后在你还没来得及修复的时候,就公开报告了,对,他们宣布自己AI有多厉害,给了一个行业标准的90天期限,却没有真正理解,志愿驱动开发的性质,而且这个漏洞出在一个,冷门的上世纪90年代,游戏边界马气上,我们先从他们的角度 [01:03:31 → 01:04:05]
看看这件事,你能帮我从他们的角度分析一下吗,好的,他们拥有大量资源,致力于为无处不在的开源项目,保障安全,他们用了大量算力,还有非常昂贵,能力极强的安全研究员,从他们的视角来看,他们这么做,就是在做贡献,但我觉得分歧就在这里,这件事引出了很多,有趣的问题,我觉得,有一部分安全社区的人,看待自己有点像建筑设计师,从来不用去工地,去工地对他们来说,有点掉价 [01:04:05 → 01:04:39]
那些日常的施工活,他们只管做安全方面的事,后续是别人的问题,安全行业在处理事情时,语气也常常非常激进,他们用的词语非常激烈,他们会用很强的字眼,比如,你就要被攻破了,对普通大众来说,被攻破听起来是件很糟糕的事,对他们来说,意思就是被黑了,我个人的看法是,这有点像你家里的挂锁,不是每个人家里的锁,都是为了保护和机密,或者诺克斯堡级别的,他们只是用来防范 [01:04:39 → 01:05:11]
与其保护目标相匹配的威胁,而现在的情况可以看作是,他们用AI大规模的去撬这些锁,然后说,嘿你的锁不安全你得处理,但实际上他们才最有资源去修复这些问题,但他们似乎并不想提供补丁,或者给予资金支持 AI的规模也带来了问题,这些bug报告非常冗长,他们几乎是对非常小众的边界马气,发起了由AI生成的bug报告,构成的拒绝服务攻击 [01:05:11 → 01:05:46]
安全社区还有一个问题,就是所有东西都被标记为高优先机,你会听到这回要你命的,这是世界上最重要的事,你必须处理这个高危,高危超可怕,吓死人的漏洞,结果只是一个1993年,某张光盘上用过的游戏编解码器,这就是矛盾所在,到处跟人说你的挂锁不安全,但那不过是某人的业余项目,那个编解码器的安全性,由那个开发者自己判定,那是他的爱好,进行安全分析是好事 [01:05:46 → 01:06:20]
但没必要贴一个吓人的大警告,说是严重漏洞,最近我还看到另一个所谓的漏洞,这次不是谷歌发现的,不过比如一个过滤器可能溢出,出现整数溢出,导致你的一个像素颜色不对,这居然被标记为高微7.5的,严重程度,红色警告,安全行业在某个时候,得意识到,不能一直像这样喊狼来了,因为这样只会导致人们,好比说在自己的电脑上,贴上密码变迁一样,你总不能天天喊狼来了 [01:06:20 → 01:06:54]
我知道制造恐惧,是他们的操作方式,但从谷歌的角度来看,归根结底,他们要么出钱,要么出普丁,谷歌使用FFMPEG的规模,可能你,我都难以想象,数百万的CPU调用,是的,他们在涉及自己产品的领域有贡献,比如VP9 AVE 但从更广的层面看,贡献比例是不成比例的,没错,他们资助学生,资助暑期代码计划,我觉得前FFMP开发者Alex Strange [01:06:54 → 01:07:28]
发言人03: 他以个人身份发了个帖子,所以他在Hacker News上,发了关于安全工程师的帖子,帖子是这么写的,安全报告的问题在于,安全人员实在是自我炒作的狂热分子,括号 Linus曾经用更难听的话称呼他们,想象一下,你是一个千倍的资源开玩开发者,如果一个安全研究员在你的代码里找到一个bug 他们会给他起一个可爱的名字,搞个带logo的网站,谷歌会给他们100万美元的赏金,他们会去DevCon领奖 [01:07:28 → 01:07:59]
我猜他们还会去参加某种秘密的安全圈狂欢派对,所有人都穿得像黑客帝国里一样,而当你修复这个问题的时候,没有一个人会为你做这些事,基本上是在评论,不同参与方的激励机制,是不匹配的,这里的问题在于,发现漏洞和修补漏洞之间的资源,极不平衡,这是最大的问题,那场风波之后,谷歌做了一些改变 [01:07:59 → 01:08:22]
发言人01: 他们现在开始提供补丁了,对,他们现在也有了,修复问题的赏金计划,所以那场风波之后,情况确实有了一点改变,这是好事,对吧,但我们看到,我们经常谈论谷歌,也看到其他一些大公司 [01:08:22 → 01:08:35]
发言人03: 跑出来说,你们必须修这个bug 因为它对我们的产品至关重要,你能解释一下SHAZI事件吗 FMPEG的推文是这么写的 XZ事件表明,依赖无心志愿者的做法,会造成多大麻烦,那些市值上万亿美元的公司,居然期望从志愿者那里,获得免费的紧急支持,微软Teams在一个满是志愿者的 bug追踪器上发帖,说他们的问题优先级很高,而在此之前,志愿者曾礼貌地请求微软,签一份长期维护的支持合同 [01:08:35 → 01:09:08]
结果他们只给了一次性的几千美元了事,这完全不能接受,不是我们编的,这就是微软Teams实实在在干出来的事,后来你们把截图和细节都贴了出来,让大家看到这些万亿美元级别的公司,根本不愿意掏多少钱,也不愿意给多少支持 [01:09:08 → 01:09:24]
发言人01: 他们以为开源项目就是传统的供应商,有服务水平协议,他们觉得公共bug追踪器,就是第三方供应商的Jira 可以在上面为所欲为,但它根本不是,它只是用来报bug的地方,我觉得让这件事,尤其恶劣的是,他们抬出微软的名头,那可是一个家喻户晓的产品,如果只是一份,普通的bug报告 [01:09:24 → 01:09:49]
发言人03: 情况会好得多,对,所以他们差不多就是明说,这事很严重,因为微软内部,有很多人在用它,我很好奇,背后的心理是怎样的,我觉得在这些公司里,或许你们可以纠正我,你说的对,他们就是把FFM PACK 当成一个供应商,觉得微软肯定付了他巨额资金,他们在打交道的时候,就默认了这一点,而在这整个链条里,没有一个人会停下来想一想,等等,我们是不是该给FFM PACK [01:09:49 → 01:10:16]
发言人02: 几百万美元,这在大公司里,是一个非常非常大的问题,虽然我们现在说的,是某几家,但情况到处都一样,对吧,很多这类公司里,比如我们跟那个人聊的时候,他不过是微软Teams 某个项目的经理,以前从来没真正,跟开源社区打过交道,完全没概念,对吧,但问题在于,这类公司通常都设有,所谓的开源项目办公室,这些人才是应该去,跟开源供应商,或者开源社区沟通的人,可他们往往没有在公司内部,把这个关系解释清楚,而我们这边的意思很简单 [01:10:16 → 01:10:50]
我们不是你的供应商,如果你真要我当你的供应商,我很乐意,我会给你发合同 [01:10:50 → 01:10:55]
发言人03: 列清服务水平协议,我其实已经围绕开源项目,创办了五家提供,这类服务的公司,所以那完全不是问题,咱们得说一句,你们发的那些火药味十足的推文,还有那场混战,确实带来了结果 [01:10:55 → 01:11:09]
发言人01: 而且是正面的结果,捐款大幅增加了,虽然还是不够支付,哪怕一个全职开发者的薪水,但在认知层面和技术层面,大家对FFM PEG重要性的意识,都因为X事件而显著提升,可以说它达到了目的,人们认识到了FFM PEG 到底有多重要 VioLan这边也一样,举个最简单的例子,有一年多的时间 [01:11:09 → 01:11:34]
发言人02: 我们没法在Android Play商店更新VLC 就因为商店的一个bug 我们唯一能让那边回应的办法,就是像你说的那样,发一封措辞非常激烈的声明,说我们打算停止在Android上分发VLC 而我们有大概一亿人在用,然后Android那边就真的有人来找我们谈了,我们在微软那边也遇到过类似的事,也说我们要停止在Windows商店分发VLC 不幸的是,我们太小了,我们解决这些问题,唯一有力的武器,就是在社交网络上公开喊话,因为它能像雪球一样越滚越大 [01:11:34 → 01:12:07]
现在他们开始听我们说话了,大公司往往很难直接跟我们沟通,比方说VLC 很可能是Windows上使用量前十的软件之一,可我却不属于微软的SV计划,在微软连个固定联系人都没有,我敢肯定其他任何软件,比如Adobe Spotify都有联系人,我就是没有 [01:12:07 → 01:12:27]
发言人03: 所以提高声量确实有用,虽然有时候会很辣,充满戏剧性 X和推特正好适合干这个,但确实高效,所以各位听众,大家都应该去关注 FFMPEG的推特 [01:12:27 → 01:12:40]
发言人01: 也就是X 关注v6栏的X账号,还有去捐款,给FFMPEG捐款,谢谢你 Lex 这些年来,你一直是FFMPEG 和v6栏的支持者,在X上帮我们吆喝,感激我们所做的事情,永远的FFM PEG 然后比如说像Tim Sweeney Kamek 还有其他一些非常高层次的人,也在我们的X账号上,帮忙提高了关注度 [01:12:40 → 01:13:07]
发言人03: 这同样帮了很大的忙,对,是的,我想说除了有那么多人用它,对世界影响这么大之外,它还极好地代表了一个,伟大的开源项目,体现出汇编和C元的价值 [01:13:07 → 01:13:20]
发言人01: 体现出对现实世界系统编程的,那种认真态度,还不止这些,我们待会肯定会聊到汇编,那本身就是一个大话题,但这同样也是在致敬,像Andreas Reinhardt 这样负责维护的人,我相信他是不领报酬的支援者,在做大规模的代码重构 Andreas Reinhardt和Anton Keity 用现成重写了FFM PEG 致敬这些人,致敬那些不为人知的付出,从用户角度看,其实什么都没变,文件还是一模一样,但这就好比一架飞机 [01:13:20 → 01:13:54]
在飞行中被重新制造了一遍 Christian Garcia说 [01:13:54 → 01:13:59]
发言人03: 他十几岁的时候就在运营这个账号,指的是FFNPAC的账号,而你们回复说,青少年在FFNPAC里写的会变代码,比谷歌工程师写的还多,但这更能说明,有多少了不起的贡献者 [01:13:59 → 01:14:12]
发言人01: 其实就是青少年,就像JB说的,我们不在乎你是谁,从哪里来,做什么的,这些年来,青少年们写下了数千行会变代码,还要特别提一下当年的Daniel Kang 同样也要强调像Rukapen这样的人,他才16岁,为FFMPEG做的最早的一些贡献,就是直接找到问题并修好它,让那些所谓的安全研究人员相信见处,而他只有16岁,根本不存在什么门槛 [01:14:12 → 01:14:45]
没有那种你必须上大学,是从某位教授弄懂什么什么的障碍,只要你能学C语言,老实说从卡卡那本C程序设计语言就能学到,你就能学会编,这点也许我们待会再聊,你是可以为世界级技术做出贡献的 [01:14:45 → 01:15:04]
发言人02: 在VLC这边有位最资深的贡献者叫Felix [01:15:04 → 01:15:07]
在VLC这边有位最资深的贡献者叫Felix [01:15:04]
发言人02: 在VLC这边有位最资深的贡献者叫Felix Messi和IOS上的所有东西都是他一个人做的,他从GLT开始做起,那时候才16岁,还有一位叫Edward Wang 曾经是谷歌编程之下的学生,在Videoland待了三年,当时他14岁,他们都是谷歌编程之下,和谷歌代码之下的参与者,这些项目,面向学生甚至高中生,我们为X8664 [01:15:04 → 01:15:29]
发言人01: 写了大量的回编代码,既为了VLC 也为了FFMP 所以每个人都可以参与贡献,而且他做得很好,因为他没有炒作恐慌,他创建了一个CV 也就是公开暴露的安全问题,搞出那些吓人的,红色7.5优先机,他只是在Git里,发现了一个问题,三天内就修复了,没去演什么安全大戏,我当时爱发帖说,孩子们干得真棒,反观另一边,确实有一小部分安全社区的人,我不是说所有安全研究者都这样,就像Lex说的,他们喜欢小题大做 [01:15:29 → 01:16:03]
制造戏剧来抬高自己,他们会兴高采烈地,把这个定成高优先级 CVE 8.0之类的,可那问题其实还在Gate里,都还没发布,只是开发中的版本,三天后就被修复了,我其实只想释放一点善意 [01:16:03 → 01:16:20]
发言人03: 包括对更大的社区,向谷歌的工程师们致以爱与敬意,就像你们说的,其中有世界上最顶尖的软件工程师,他们确实贡献了很多,即使是在安全方面也是如此,另外你们知道,我是CEO的Tegar粉丝,非常爱CEO 他也被卷入了这场混战和戏剧中,我觉得如果你把视角拉远到,人类历史的漫长弧线上,这场戏剧对每个参与其中的人,都产生了积极影响,捐款涨了,话题得到了更多关注,也让大家有机会吵一吵,而最终他们搞明白了 [01:16:20 → 01:16:54]
FFMPEG到底是怎么一回事,我们看待这件事的方式 [01:16:54 → 01:16:58]
发言人01: 就像是一场说唱对决,说到底,你懂的,没人真的做了什么,我们互相放话,没错,但我们可以就这么让它过去 X 这地方特别适合国际说唱对决,你说些话,我扯扯你妈妈,但这不意味着,你懂吧,我会真跟他有过节,对我感觉就是这样 CEO那事 JB可能可以多说说,稍微有点过火了,但你知道只是好玩而已,就是说唱对决那种 [01:16:58 → 01:17:31]
有点像WWE你懂的,大家都在X上找点乐子,没必要太当回事,你知道那个什么少年的事,就是那样,所以那家伙是谷歌员工,他说嘿经营开源业务,还有其他方式,我心想老兄,就找点乐子嘛,对吧,这就是这个账号的意义所在,而且如果你能通过这种方式,教大家关于开源项目汇编等等,我觉得这里能提供很多东西,并不是为了嘲讽而嘲讽,而是在展示,我认为X让我们明白的是 [01:17:31 → 01:18:05]
这些不是大公司的开源项目,不像Kubernetes 那里有成百上千人拿钱做开发,这些只是在地下室,用业余时间做东西的人,而如果你能用,好玩娱乐的方式,来触及这个话题,我觉得那才是好的,那才是X的价值所在,还有我们拥有的影响力,还有,而且说实话,对吧,哪怕在谷歌 [01:18:05 → 01:18:30]
发言人02: 谷歌是一个实体,但里面有那么多不同的人,对吧,而且我们一直都和很多,谷歌工程师合作,甚至从YouTube到Chrome 到Chrome Media 再到谷歌的其他部门,那都是很不一样的实体,但我们做的事是最有效的,比如说SEO那事,是有点过火,我让他,我把大家都安抚下来,我给他打了电话,我们说好吧,这有点太过了等等,但最终呢,这是一场硬碰硬的交锋,但对项目是有好处的,就像我们在过去两年里,对开源真正的社区开源的认识,是大大提高了,这很有用,你觉得是什么 [01:18:30 → 01:19:04]
在激励我们一直在谈的,那些了不起的贡献者呢,驱动力是什么,引擎是什么,看到像你说的,他们坐在自家地下室里,这真的很有意思,驱动力是什么,引擎在哪里,有很多驱动因素,但奇怪的是,最主要的一点是,我们在多媒体领域做的事,是播放视频,而视频很酷,对吧,比如我们社区里很多人,最初是因为喜欢看动漫才加入的,对吧,而这就是我的建议,每当有人问我,我应该为开源做些什么,如何开始,我的回答总是一样的,做你热爱的事 [01:19:04 → 01:19:37]
我做VLC是因为我热爱电影,对吧,我喜欢翻来覆去的看同一部电影,哪怕我老婆恨我这么做,因为这就是你感兴趣的主题,首先这是人们通常接触VLC和FFMPEG的第一点,第二点是从技术上说,因为我们追求卓越,这里就是史上最好的学校,是史上最好的编程学校,如果你在FFMPEG里把C语言学好,知道怎么写汇编,那你肯定会成为最顶尖的程序员之一,哪怕你后来去写TypeScript 因为你做过最棒的事情 [01:19:37 → 01:20:10]
而且你会得到一些最有经验的程序员的评审,他们会审视你代码的每一部分,告诉你哪里不够好 [01:20:10 → 01:20:17]
发言人01: 这就好比我们是你遇到过的,最好的编程老师,对吧 Andrew Kelly创立了Zig语言,他曾经是FFMPEG的开发者,在FFMPEG这所学校里,历练之后创立了Zig 我是说,这里是学习真实世界编程,方方面面最好的地方,在这里做出的东西,被几十亿人使用,你无处可藏,必须开诚布公地,面对自己的不足,以及如何学习 [01:20:17 → 01:20:43]
发言人02: 如何变得更好,多媒体里还有个有趣的点,就是你只有16毫秒来显示一帧,它不像游戏引擎,可以基本慢下来等一帧,所以你必须够厉害,对吧,没别的选择,否则你就没视频了,而且因为编解码器的原理,如果你丢了一帧,就会破坏视频的画面,对吧,所以你必须做得好,必须完美,才能得到正确的结果,而且这不只是纯数学意义上的编程,很多人不理解,但为了在开源多媒体社区里,正确的编程,你需要明白计算机,是怎么工作的,当你写汇编的时候,你需要了解CPU流水线,对吧 [01:20:43 → 01:21:17]
你需要明白CMD是如何工作的 IU是如何工作的 IU是如何工作的 IU是如何工作的,对吧,而这就是我认为,如今的很多工程师,软件工程师所缺失的东西,理解我们所说的,计算机体系结构,而且说真的,有些争论是这样的,我们该用这条汇编指令,还是那条 [01:21:17 → 01:21:36]
发言人01: 然后有人说,不行,在这种CPU上,它会多花三个周期,对最终输出影响巨大,对吧,我们得展开讲讲 FFMPEG很可能是世界上最大的CPU用户之一,很可能就在我们说话的此刻,它正运行在妥妥一亿,甚至十亿颗CPU上,所以每条指令都至关重要,在CPU使用率方面,我们做的一切影响都是巨大的 [01:21:36 → 01:22:01]
发言人02: 所以首先你是因为一个有趣的主题而来,然后你因为它的卓越而留下到最后,你为之自豪,因为它就在每个人的终端里,你看很多人会说,我在某家咨询公司工作,我在做一个门户网站,让大家能下载PGE的发票,哇好棒啊,对吧,很多工作都是那样的,你不会把这事告诉你的奶奶,但如果你去见奶奶跟她说,我做的事情,让你能在笔记本上看视频,他们就能理解,这一点非常重要,对吧,因为你在做VLC FMPEG X264 这些东西服务着数亿人 [01:22:01 → 01:22:36]
你产生了实实在在的影响,所以你可以为自己骄傲,因此我认为,除了简历好看之外 [01:22:36 → 01:22:41]
发言人01: 所有这些就是大家做出贡献的原因,是啊,那些都是副作用,在这个话题上,我最喜欢的一句话来自John Collins 他说,世界是一座激情项目的博物馆,你知道,所有东西都是激情项目,而在开源,在多媒体,以及整个开源世界里,你可以快得多的做到,网络效应也快得多,你知道吧,我可以开一家咖啡馆,作为我的激情项目,但我得符合建筑规范,得盖房子,得找地方,得处理那么一大堆事情 [01:22:41 → 01:23:15]
而在软件世界里,那个激情项目可以快速推进,可以被网络效应放大,而这种放大效应,可能比各个部分的总和还要大,你可以找到那些,对极其冷僻事物感兴趣的人,然后通过网络效应,做出真正了不起的东西 [01:23:15 → 01:23:34]
发言人03: 说到激情项目这个话题 Tim Sweeney 其实在一条,称赞JB的推文下面回复说,世界上有许多事情,仅仅是因为某个很棒的人,决定去做才发生的 VLC就是这样的例子,这让我觉得很有意思,确实在软件世界里,极少数人,有时候一个人,就能创造出不可思议的东西,就像你翻来覆去说的那样,我觉得JavaScript 就是一件不可思议的创造,最初就是由一个人做的,还有一些编程语言,比如Python C和Java 都是这一个人有愿景,有设计,有时一个周末就诞生了最初的火花 [01:23:34 → 01:24:09]
是的 Linus用两周时间构建了Git 哇是啊 [01:24:09 → 01:24:13]
发言人01: 它改变了世界Git 我是说它真的改变了世界 Linus的热情就在于,嘿把这些压缩包上传到FTP 搞定它,但对我来说,这不仅在软件领域,对吧 [01:24:13 → 01:24:25]
发言人02: 我相信个体能够改变世界,对吧,正如你所说,这需要好的愿景,对吧,那种我想做那个的愿景,它是有用的,它将会很有用,不论是去造火车,汽车,还是火箭什么的 [01:24:25 → 01:24:39]
发言人03: 我相信那些相信自己,有愿景的人,能对人类产生巨大的影响,让我们在重新深入之前,先退远一点看看,我们会一直在技术战里,上上下下,你懂的,我们一直在来回谈VLC和FMPEG Kieran你说过 FMPEG和Videoland的VLC是共存的,没有一个中心重要点,而是你所谓的双星系统,没错,它们因为彼此而成功 [01:24:39 → 01:25:03]
发言人01: 你能解释一下它们的区别,以及它们如何互动吗,它们是竞争对手吗,我不认为它们是竞争对手,简单的答案,在展开之前先简短回答 VLC置于FFM PEG 就像安卓置于Linux 它们互相依赖,因为彼此而共存,所以我用双芯系统来做类比,对了,我最近才知道,离我们最近的恒芯系统,半人码座Alpha星 [01:25:03 → 01:25:29]
发言人03: 居然是一个三核型系统,这让我感觉挺不好的,而当你开始做相关的物理计算时,那简直是噩梦,对吧,是啊,但就像三体问题一样,不过不管怎样 [01:25:29 → 01:25:40]
发言人01: 很多FFM PEG流程都涉及X264项目,这是VideoLAN的一个项目,我想大概有80%多的流程,都依赖于VideoLAN的项目 VLC显然我们讨论过,是一个VideoLAN项目,它使用了FFM PEG 这让FFM PEG 能够接触到各种奇怪的文件,历史上VLC 还用过一些捐款来资助 FFM PEG的开发,我们稍后可能也会聊一些,逆向工程的事,所以这就像是一个双星系统,他们互相协作,相互促进,很多开发者是共享的 [01:25:40 → 01:26:14]
也没有一个集中的地方,这是一个良性循环,大家一起努力 [01:26:14 → 01:26:20]
发言人03: 我们应该提一下 X264是H264视频标准的编码器,所以H264是标准对X264 它是这个标准的一个开源实现,基本上所有人都在用它,用于各种事情,是的,所以这就是主要驱动力,当你想到一个包含H264编码的MP4文件时,如果它来自一个软件环境 [01:26:20 → 01:26:46]
发言人01: 比如数据中心之类的地方,那么它很可能是用X264创建的,而这属于Vidualand旗下,一个Vidualand项目,所以在Vidualand生态里,它就属于Vidualand这个世界 [01:26:46 → 01:26:58]
发言人03: 而videoland包含了很多东西,你去videoland的网站看看,上面有一大堆图标,比如,如果你去看那里有好多库,对吧 LibVDCSS 对 LibVDNF LibVDPSI LibVLC 当然还有VLC本身,以及其他一堆库,对,还有很多很多,对吧,比如最近的DVD项目,我们可能会聊到,它是videoland最新的项目,已经无处不在 [01:26:58 → 01:27:24]
发言人02: 而且我们最近还宣布了一个音频库,非常疯狂,但很棒,我们这个我稍后再说,稍后再说,那是个疯狂的项目,但真的很棒,那么X264也是VideoLine的项目之一,在我看来 X264是有史以来最出色的编码器,这也推动了FFMPEG的采用,很多大公司里,人们开始使用FMPEG 就是因为他们想用X264 而X264也提升了FFMPEG的知名度,同时VLC之所以流行,也是因为它能播放很多,由FFMPEG生成的文件 [01:27:24 → 01:27:59]
对吧,所以这真的是许多项目交织在一起,相互协作 [01:27:59 → 01:28:03]
发言人01: 没错,不过有个是挺有意思的,在X推特上,每次有人提到VLC 总有人会提醒说,其实里面是FFMPEG在做实际工作,但就像我说的 [01:28:03 → 01:28:16]
发言人02: 这并不是说我们不在一起协作,而且给你一个概念,当我为Windows编译VLC时,我大概编译了差不多1600万行代码,对吧,其中只有100万行是在VLC自己的仓库里,而FFM PEG总共大概有200万行左右,对吧,这意味着有非常多的依赖在外面,而且如果你看FFM PEG本身,它也集成了很多第三方库,比如X264 Label Pools等等,对吧,所以我们全都互相依赖 [01:28:16 → 01:28:42]
发言人03: 没错,这就是为什么我想做这期节目,就像我们现在做的这样,把FFM PEG和VLC放在一起,因为它们真的就像是同一个东西,就像我说的是一个双芯系统,而我们所有人都在围绕着他们运行,我们能不能简单提一下,这一路走来的几位关键人物,我们还没有真正聊过FFMPEG的历史,也许你可以跟我说说Fabris 说说Michael Mayer [01:28:42 → 01:29:08]
发言人01: 以及这里的一些关键人物,关于FFMPEG的不同时代吗,因为确实有几个关键时代和关键人物,让它成为可能,就像你提到的Fabris 它提出了最初的构想,然后大概在2000年代,我愿称之为FF MPEG的2000年代,那是属于Michael Myers的时代,他完成的关键工作,包括对当时的DVX和XVD的全面支持,以及各种MPEG 4PAR2的奇怪变种,这是在MPEG 4PAR时 [01:29:08 → 01:29:42]
也就是我们现在用的之前,所以那是2000年代的视频编码器,有各种五花八门的解码器,那时你需要安装不同的播放器,来播放每一种文件格式,比如用Windows Media Player 播放Windows Media格式,用RealPlayer播放RealMedia格式,而FFM Pack在那时的,另一项关键工作,就是为这些格式 [01:29:42 → 01:30:05]
就是为这些格式 [01:30:04]
发言人01: 就是为这些格式,提供了原生的解码器,我还记得自己十来岁的时候,那时候发现有一个播放器,能解码所有这些文件,而不用安装一堆,臃肿的专有播放器,这真的让人很兴奋,因为当时你下载RealPlayer的时候,里面塞了一大堆别的东西,一堆广告,各种乱七八糟的,而只要有一个简单快速的库就能搞定,这直接促成了那种局面,然后我觉得2008年往后是一个巨大的转变 [01:30:04 → 01:30:36]
因为那时H64变得成熟了,这也是高清视频时代的开始 264成了其中的核心解码器,所以我称这时候为2000年代末到2010年代,这时那些厉害的逆向工程师们出现了,做了真正惊人的工作,但一开始仅仅是一个,能同时播放DVX XVID Windows Media和Real Media格式的播放器,本身就已经是一项巨大的成就,不用再去下载那些,带有奇怪广告,和间谍软件的编码气包了 [01:30:36 → 01:31:10]
VLC 1.0就是在那个时候发布的 [01:31:10 → 01:31:12]
发言人03: 大概在2009年 2009年 2010年这段时间,对,那之后它一下子就爆发了,对不需要各种边界马气包,它就能在所有这些不同的,实际上等于是所有边界马气包 [01:31:12 → 01:31:24]
发言人01: 都以FFMPEG的形式集成在VLC里面,再加上我们还有各种模块,来处理所有类型的,当时的边界马包很诡异,在2000年代出现各种奇怪的边界马包,带着各种DIO文件来自各种地方,里面还夹杂着大量间谍软件,你知道吗,根本不靠谱,你根本无法信任,而拥有一个开源的单体播放器,或者说单个播放模块载播放器,能搞定这一切,而且还是开源的,但我想强调的是,在2000年代 [01:31:24 → 01:31:58]
Michael所完成的这项任务,是科幻级别的,边缘案例的数量多到超乎理解,你可以想象有一个中国的CCTV系统,它用了一种,奇怪的MPEG-4变体,叫做MPEG-4 Part 2 也就是MPEG-4 ASP 那是一种很怪的遍体,你必须修正对它的支持,同时还得不破坏对其他,所有格式的兼容,这样的例子有上百万个,所以你的意思是,很多逆向工程就是,就是在那里发生的,它始于2000年代 [01:31:58 → 01:32:32]
早期的Windows Media相关东西,因为那是闭源的,还有Real Media也是,所以Benjamin, Larson, Scoff 这些人,那个时代就是关键,是打下基础的时期,然后到了2010年代,基本上就是Michael和Costia的时代,他们构建,实现了一些最难的辩解码器 JB也许可以聊聊Ghote Meeting 4和5 还有那是什么,什么是Ghote Meeting 那么我们来聊聊,这位了不起的乌克兰人 [01:32:32 → 01:33:06]
他那时候住在德国,而且特别喜欢瑞典对吧 [01:33:06 → 01:33:09]
发言人02: 是的,他这个人就像社区里,很多非常聪明的人一样,它是那种近乎天才的类型,它能够逆向工程那些,极其复杂的编解码器,它做这些,而我和Karen还有一帮工程师 [01:33:09 → 01:33:22]
发言人01: 但显然水平还没到那个层次,真的,它逆向过那些 20兆大小的二进制Blob 对给大家一个参考,一个1兆的二进制Blob 做逆向工程,大概就需要一个月的工作量,而这个家伙在搞的是,二三十兆的Blob 也许我们待会儿,可以聊聊其中的奥妙,它是怎么做到的,但这个家伙真是专攻那些非常困难,非常冷门的便捷码器,而且他是做着玩的,对吧 [01:33:22 → 01:33:49]
发言人02: 对,然后GoToMeeting对VLC来说,一直是个大问题,因为那是很长时间里排在第一的功能需求,于是我就设了一个赏金,然后这个哥们有一天说,好JB我来弄,结果他用了两个月就搞定了,后来他解释他是怎么做的,他轻描淡写地说,我看了看代码这部分,看起来像我以前在WMV里,见过的ADCT之类的东西,他就这么弄了,最搞笑的是,他写的代码里充满了各种玩笑,里面有好多关于JB,也就是我,Camp,Calf的笑话,代码写得非常漂亮对吧? [01:33:49 → 01:34:21]
发言人03: 我特别想提的一点是,我有机会跟一些这样的开发者聊过,也就是那些在会编语言级别工作的人,他们总是把一切说得好像挺容易, 这背后是一种谦逊,因为可能做这些事情,所需的能力实在太高了,以至于其他一切都显得简单,我想这正是我们能学到的一课,所以在社区里,给人印象最深的,就是那些搞逆向工程的人,以及那些写汇编的人,对吧 [01:34:21 → 01:34:47]
发言人02: 这两种人都非常让人佩服,比如X264变得那么厉害,就是因为一位叫 Loren Merritt的人,他当时好像是华盛顿大学的,他就是通过大量汇编优化,让一切都变得又棒又快,对 [01:34:47 → 01:35:00]
发言人01: 这大概就是那个黄金时代,那么多事情都步入了正轨,比如你看Costia 他把整个世界都看作一份二进制规范,他根本就不需要文档什么的,他的态度就是,我有一个二进制文件,我就能把所有东西搞明白,他经常挂在嘴边的词就是二进制规范,你知道这根本不是问题,然后它会消失一阵,再回来就能做出一些很有意思的东西,你能不能更具体的谈谈,或者多提供一些细节和色彩,讲讲逆向一个blob 到底需要做些什么,好,那我们以goatmeeting为例,这是个很好的例子 [01:35:00 → 01:35:34]
比如说,我在goatmeeting上,录制了一个会议,我怎么能够,在不需要goatmeeting 播放器的情况下,回放它呢,甚至可能根本就,没有这样的播放器,我可能要把会议录像,发给一个,没有改播放器的人,所以首先,有大量其他的东西,你需要找到实际的,视频会议客户端,这可能容易,也可能不容易,你得找到真正做解压缩的那个模块,你需要一种方法,从这个模块里把UV数据dump出来,所以这通常涉及到打开返回编器 [01:35:34 → 01:36:08]
尝试猜测钩子函数在哪里,以便将该模块集成进来,并原生运行该模块来解码一个样本文件,所以要弄清楚这个模块在哪里,执行解码过程,并找到一种方法hook进去,输出原始的UV数据,因为当你实际进行逆向工程时,你会需要这个作为对比点,你需要精确到比特级别,或者在某些情况下,接近比特级别,然后你打开返回编器,运用大量知觉去搞清楚,比如DCT在哪里 [01:36:08 → 01:36:43]
商编码在哪里,虽然没有一套规则手册,但总是有某种模式可循,比如GOTMEeting 它有很多屏幕编解码工具,还有不同的变种,所以我记得有什么GOTMEeting 四五,不应该是二,三四,二三四,对,这里要提一下 GoToMeeting在早期的录制会议中,使用的是它自己的专有编解码器 [01:36:43 → 01:37:06]
发言人03: 这些历史文件通常存为WMV格式,需要一个特殊的解码器,才能在Windows上正常播放,如果没有安装这个解码器 Windows媒体播放器,以及一些编辑软件,就无法解码视频轨道,你可能就只能听到声音,或者看到黑屏,天哪,我可记得这回事,但这正是逆向工程要解决的问题,这就是关键所在,对吧?因为GoToMeeting这个东西现在知道的人已经不多了, 现在大家都知道Zoom Teams这些, [01:37:06 → 01:37:33]
发言人02: 但假如快近10年15年, 面对一个为32位Windows打造的GoToMeeting编解码器, 你会说,好吧,但我在用安卓,用iPad,用其他设备, 你怎么播放?这些文件就成了被封锁的文件, [01:37:34 → 01:37:47]
发言人03: 而我们做的逆向工程对人类来说是极有价值的。我不得不说这个逆向工程的过程真是太震撼了, 对,太疯狂了。这就像,怎么说呢,我最近读了很多考古学家的采访,就是说,你手里的信号太少了,对对,慢慢的你积累了很多经验,你理解了原始代码的结构,就能开始推断一些基本的东西,对,但你就好像,好像考古学家,拿着小刷子 [01:37:47 → 01:38:14]
发言人01: 试图重建整个人类,解决方法嘛,关键是得谦虚,不过Kieran确实做过一些理想工程,在CF Form上,对,那个时候 CF Form不错嘛,对,那个时候之前,其实导致了那项工作的开源,所以在做二进制层面的同时,你显然会有样本,很多情况下,你没有多少样本,所以你不得不搞清楚,所有的不同变体,而CF Form 比如说,它实际上是那个,编解码器里一系列,不同方法和工具包的集合 [01:38:14 → 01:38:46]
因为它经常会自然的增长,而难点在于,找到一个能让你上手,又不用实现另外十个不同东西的样本,所以就从那里开始,我觉得很幸运,当时我纯粹偶然的找到了一个样本,里面有很多平坦块,是一个动画,这真的帮了大忙,因为它没有用特别复杂的编码工具之类的,这样就能有点进展,然后一步步构建起来,直到你发现,嘿这里有几位,我漏了这个,漏了这个,还有它走的一个异幅分支 [01:38:46 → 01:39:21]
然后就 [01:39:21 → 01:39:22]
发言人03: 所以你说的样本,是指样本视频,对,然后你在追踪,想推断这个边界码器,在做什么,对,通过观察样本,然后看机器层面,看机器代码 [01:39:22 → 01:39:34]
发言人01: 在机器代码上说,你看,这个字节是6 走这个分支,然后换一个不同的样本,太疯狂了,真的,这太疯狂了,你看,这就很疯狂,然后你再去看一下 GoToMeeting这样的东西,对 [01:39:34 → 01:39:48]
发言人02: 就像我做的,容易,对吧,想象一下,对没错,复杂度高了两三个数量级,一个在德国某地的哥们,一个人在做这个,对,而且很长一段时间里,你就像在一个黑盒里,因为一个解码器,很长一段时间,因为里面有那么多步骤,从商解码,真内预测,运动预测,到IDC等等,很长一段时间里,你什么都看不到,对吧,所以你完全是在内存里调试 [01:39:48 → 01:40:15]
发言人01: 调试,全靠猜,而且你可能把存储系数的缓冲区,完全搞错了,所以你可能完全钻进了牛角尖,以为是这个,然后见鬼,不是,那是别的东西,而且你是在几十兆字节,几百万条指令的,二进制文件上,做这件事,对吧,所以你就在调试器里,一步步地走,一条指令,一条指令地看,嘿,这条指令改了这里,这条做了这个,在CPU层面暂停程序,在CPU层面把它暂停住,观察发生了什么,试图搞清楚,有时候,你得进到虚拟机里,对,这样你才能暂停虚拟机 [01:40:15 → 01:40:49]
暂停虚拟机,把内存转存出来,因为有些辩解码器可能有加密,可能上面有数字版权管理之类的东西,所以你需要从虚拟机里导出内存。 [01:40:49 → 01:40:58]
发言人02: 就像我当初在2003年加入那个叫Central的公司时,John L. Johansson基本上破解了DVD规范,做出了DEX,还给我们展示了他怎么破解苹果的Fairplay DRM,就是MP4的Fairplay,就在他的笔记本电脑上操作的。 [01:40:59 → 01:41:15]
发言人03: 我当时很年轻,才21岁,那真是让人震撼,因为它基本上是在虚拟机里调试Windows 用那种,哇太不可思议了,震撼,而且很激励人,从你的经验 [01:41:15 → 01:41:27]
发言人01: 还有你在社区里看到的情况来看,会不会有时候让人觉得气馁,会不会,大家会帮你,会给你发样本吗,大家都很热心,但有时候你根本接触不到编码器,这种情况就更难了,因为你只能去问,必须去要样本,我记得我们以前经常在推特上求样本,就发个帖说,嘿我需要这个罕见样本,然后,有很长一段时间,我也一样心里想,哦我需要这个边界码器,然后我就自己去写了这个边界码器,而且,如果你运气好,如果你运气不好,可能只能拿到一两个样本 [01:41:27 → 01:42:02]
甚至什么都拿不到,就算拿到一两个,然后有时候你会突然挖到一座金矿,对方会说,对我们公司有十万个这种文件,因为我们之前有些业务一直依赖它,那种情况是最棒的,因为这样他们就能在超大范围的编码工具上,测试为精确性了,你能解释一下为精确性吗,为精确性是这样,大多数视频编解码器,当然不是全部,但从大概2000几年之后,都有了为精确的定义,也就是说,每一个实现都必须产生,完全一模一样的比特 [01:42:02 → 01:42:36]
解码出来的数据,必须比特为完全一致,针对大量样本都这样吗,对,任意一个给定的样本都是如此,所以Lex的实现 JB的实现,还有我的实现,对于H.264的输出,必须比特位完全匹配,但在90年代的MPEG-2 可不是这样,可以说,这是视频行业犯过的,最大的错误之一,我想,当时在1992年,在会场里的那批人,我们俩那会儿,估计都还穿着尿布呢,但有些当事人后来也承认了 [01:42:36 → 01:43:10]
我得特别提一下 Uraresnick 它就承认过那是那个时代的一大错误,你是说编码器需要能够跑测试,来验证为精确性,我觉得这确实是一个很好的保证 [01:43:10 → 01:43:24]
发言人03: 就像有个平行的例子是浏览器的工作方式,你知道浏览器读取HTML 然后渲染出来,但不同引擎之间可做不到为精确性,我倒是觉得FFM PACK有点特殊 [01:43:24 → 01:43:37]
发言人01: 它形成了一个赢家通吃的局面,拿浏览器来类比其实挺好的,因为浏览器也得解析大量不同内容,然后以特定方式渲染,这就像解码器一样,但现在依然有多个浏览器引擎 Firefox一个 Chrome一个,还有几个日本做的也挺不错,但多媒体领域普遍不是这样,在众多边解码器上 FMPEG 某种意义上已经赢者全拿了,我想关键是,每增加一个新的边解码器,它带来的价值,其实远超这个边界马气本身 [01:43:37 → 01:44:11]
因为它让整个生态都变得更强了,天哪这太酷了,我用Perplexity查一下 [01:44:11 → 01:44:16]
发言人03: Uri Resnick是一位多媒体和信号处理研究者,他在Kiva University获得了计算机科学博士学位,发表了150多篇论文,拥有超过80项美国专利,还是多项主要多媒体标准的重要贡献者,包括HR64 MPEG-4 AVC HR65 还有MPEG-4 ALS和G718 那个G711是电信领域的东西,电信,所以他跟公司的联系更密切 Real Audio Real Video对吧,当时那些技术真的非常重要,他以前在Break Off写代码 [01:44:16 → 01:44:50]
这背景就联系上了,这个人我必须找机会跟Uri好好聊聊,他太靠谱了,而且他可能是最好的人之一了,真的,比如我现在正在做的那个创业项目,叫Bur 对,我每年都会在丹佛的My High Video大会上,见到Uri [01:44:50 → 01:45:06]
见到Uri [01:45:05]
发言人03: 见到Uri [01:45:05 → 01:45:06]
发言人01: 他给了我特别多好想法,特别多好东西,他真是个特别棒的人,他还总是说,他总说认识我们是件多好的事,但你听听这话,我倒觉得正好相反 [01:45:06 → 01:45:17]
发言人03: 这倒让我想起了你之前提过的Fate测试,就是你跟我说过的,那个用来测试所有要合入FMPEG的内容的,机器严格的流程,你能带我过一遍这个测试流程吗,好的 [01:45:17 → 01:45:31]
发言人01: FMPEG有一个系统叫做Fate 也就是FMPEG自动测试环境,因为FFMPEG跑在太多不同的操作系统上,还能用那么多不同的编译器来编译,所以产生了数量惊人的配置组合,你能看到那些非常离谱的组合,比如编译器版本,操作系统遍体,指令集等等,你往页面顶部看,单单MacOS就有无数遍体,因为它还要区分 iOS T Voce 这些 [01:45:31 → 01:46:04]
发言人03: 我正看着飞.ffmpag.org这个页面,上面显示81分钟前 76分钟前刚跑完的测试,能看到各种不同的架构,操作系统,编译器 [01:46:04 → 01:46:17]
发言人01: 苹果客户端版本,还有他们的组合,这些组合,他们都是由志愿者运行的,所以这些都是志愿者系统顶部的那些,比如我办公室里托管的那些机器,就承载了各种各样的东西,其他人也托管其他东西,它存在的意义是要确保,因为FFM PEG里,有非常复杂的C代码,你确实会遇到误编译的情况,编译器有时就会把C代码编译错,这种事偶尔会发生,有一个记录所有编译的日志,对 [01:46:17 → 01:46:51]
记录所有编译,所有测试的日志,我想其他某个页面,会显示所有测试都通过了,如果你,你点击,就能看到所有的测试结果,所有测试都成功,日志,对,所以你看到,所有不同的编解码器,所有不同的滤镜转换,所有那些测试,都在通过这个规模的程度,真的相当疯狂,所有这些组合,太疯狂了,这不只是一个矩阵了,这就像是一个,各种组合的数据透视表 [01:46:51 → 01:47:26]
太疯狂了,而且这是我们工作的关键部分,因为你可能在本地做了一个更改,测试没问题,但实际上它却破坏了Mac上GCC版本11 或者类似的情况,然后你就能去修复它,我们也有五编译的情况,有时候编译器本身就会有个bug 产生错误的输出,这在视频上会产生很大的影响,因为帧与帧之间有依赖关系,输出里即使一个很小的变化,也可能激联成相当大的画面故障,你看到PowerPC 你看到Risk 还有过Risk [01:47:26 → 01:47:59]
过去还有过一些奇怪的东西,比如Deck Alpha 你看到Visual Studio不同的版本 Intel编译器Apple Clang 你说得出来的都有,有哪些痛点,比如你是不是有情绪开关,或许某个特定的操作系统,某个特定的编解码器组合,会让你做噩梦,对我来说,这其实很直接,因为我有一份政治工作,我自己创立的公司,专做在电视体育场,和演播室之间,转播体育比赛的设备,比方说 [01:47:59 → 01:48:33]
我们必须处理 10比特视频,而10比特视频,有一系列的挑战,你不能直接在CPU上,原生处理10比特的数据,这就意味着,你得把它放进16位里,也就是说,有6个比特,是浪费掉的,所以就有了各种不同的打包格式,来更高效的封装数据,因为当你要通过网络发送时,如果不想损失,你就需要节省那40%的带宽,比如说在PCI Express上 [01:48:33 → 01:49:07]
你可能就只有那么多总线带宽,所以我们内部有一些,有些是行业通用的,有些是我们自己硬件内用的,我想我们有个5x5 甚至6x6的格式转换矩阵,覆盖了从每一种格式,到另一种格式的转换,事实上,我发给你的那个就是其中之一,他们全都是手写的会变代码,并且全都支持不同的CPU世代,所以把这些无数种不同组合,全都处理好,真的让人很崩溃,顺便问一下 [01:49:07 → 01:49:39]
你提到的公司是Open Broadcast Systems 是的,不和那个免费OBS流媒体服务,没有任何关系,对,不过JB和我创立的公司,都大致基于FNPEG和VLC的理念,所以那真是非常底层的工作,在大多数公司里,这类东西不会用汇编来写,他们会觉得C已经够快了,可你也看到了 C其实并不快,所以这上面写着比C快62倍,对,所以就是把做底层编程 [01:49:39 → 01:50:14]
做实时编程的那种理念,用到商业应用里 JB和我已经围绕这个创立了公司,在很多情况下,我们从开源社区招聘开发者,运用同样的理念,所以这很好的展示了,我们正在做的事情,在大多数公司,他们会说,我用C来写更快完事,但实际上你可以做的比那好得多,对我来说,一些头疼的事,在于那些很难支持的操作系统,对吧,因为你看看VLC 多亏了Fate和Fmpeg [01:50:14 → 01:50:47]
发言人02: 我们让最新版VLC 跑在Windows XP上,而且现在还能在上面跑,同时也跑在Windows 11上。我们支持从macOS 10.7到最新的macOS, 不管现在最新是哪个,好像是26吧。我们支持iOS 9开始,现在我们实际上能支持到iOS 26,对吧?我们支持许多种Linux、BSD、Solaris。最新版VLC甚至还运行在OS 32上。你知道,可能全世界也就10个OS 32用户, 其中一位就在维护VLC 然后你就会意识到 [01:50:47 → 01:51:21]
围绕VLC和使用FMPEG编解码器的这个小团队,他们支持的操作系统数量,比微软谷歌或者苹果还要多,而他们有着近乎无限的力量和资源,但最糟糕的比如iOS 为了能在iOS9上构建,我们需要把几个不同版本的Xcode IDE和Apple SDK 做非常巧妙的混合,搞出一个像弗兰肯斯坦那样的拼凑版本,这样我们才能继续支持iOS 9, 这个Apple的编译器早已不再支持的版本, [01:51:21 → 01:51:52]
好让程序仍然能在M32的iOS 9设备上运行。你也看到了,在Fate上,它仍然支持iOS 9,对吧?所以我的头疼主要就围绕着支持这么多操作系统, 但这很重要,因为我们说到太多人来说, 嘿,谢谢你,我还在用我的iPad 2看电影, 它在iOS 9上还能跑,对吧?这也是一种影响,就是你不必强迫别人去买新硬件,如果优化做得好,它本来就能好好工作,这又回到了我们之前聊到的汇编话题,这其实也是在对抗一种想法,就是你得不停买新东西 [01:51:52 → 01:52:27]
发言人03: 而事实上你本可以通过,更深入的优化来改善,这已经是一门失传的手艺了,你得跟我讲讲这门失传的艺术,或者说这些传递汇编火焰的守护人,汇编到底是什么,它美在哪里 [01:52:27 → 01:52:40]
发言人01: 为什么这么有挑战性,它到底是怎么运作的,当你写汇编代码的时候,你直接用的是,处理器实际执行的指令,大多数时候,我们会用像C元这样的高级语言,来写代码,编译器会根据你的C代码,生成汇编语言和机器码指令,而在5MPEG里,我们用一种特定的汇编风格,叫SIMD 也就是单指令多数据流,举个例,假如我想在标量汇编里,给一个数加5 [01:52:40 → 01:53:13]
这相当于你每次只处理一个元素,比如我有一个数字10 我想加5 我就用add指令 10加5得到15 但用simd的话,我可以有一个包含16个,不同数字的向量,如果我想给整个向量里的每个元素加5 我只需要运行一条指令,这条指令就能一次性,对全部16个元素做加法,可以想象,这天然就非常适合视频处理,视频嘛,本质上就是像素网格 [01:53:13 → 01:53:46]
我能在多个像素上同时做操作 FFMPEG做法与众不同的关键之处在于,我们在绘编之上几乎不用任何抽象,不用任何主要的抽象层,世界上有一部分人,用所谓的intrinsics 也就是一些C函数,它们的行为跟手写绘编很像,但又不完全一样,使用Intrinsics时存放数据的CPU寄存器,是由编译器来分配的,所以关键要理解的是,我们手写CMD时 [01:53:46 → 01:54:19]
能获得10到50倍的速度提升,而那个特定函数是62倍,这太疯狂了 FMPEG的账号经常发推文展示这些,就是想告诉大家,我们就是在做这些事情,你是一个能欣赏绘编之美的人 [01:54:19 → 01:54:37]
发言人03: 而且它在这些应用里确实极其有用,竟然能大大超越C语言,这真的很疯狂,没错这是必须的,因为我们要谈到的一个项目叫DAV1D DAV1D是开放媒体联盟推出的一种格式的解码器,也就是AV1视频解码器,给不太了解的朋友解释一下,我们之前聊的是H264 AV1是另一个非常流行的标准和编解码器,正在逐渐占领互联网,那个格式刚推出的时候,很多人包括开放媒体联盟自己的成员 [01:54:37 → 01:55:10]
发言人02: 像谷歌、奈飞、亚马逊、Mozilla都说,这格式太复杂了,必须靠硬件才能做解码,但是我和其他几个人主要是 Ronald、Hendrick和Martin 我们说我们需要一个极其出色的软件解码器,因为硬件普及还需要很长时间,于是我们写了这个项目,简直到了疯狂的地步,大概有3万行C代码 [01:55:10 → 01:55:34]
发言人03: 却有24万行手写绘编 24万行手写汇编,太不可思议了,这大概是我们提到的,最大规模的汇编代码库之一了 Kieran可以纠正我,但我印象里FFMPEG 所有编解码器的汇编 [01:55:34 → 01:55:47]
发言人02: 总共有大概10万行,而单单W1D这一个项目,就有24万行,这当然是个视频项目,我们把它优化到了极致,因为项目启动时的座右铭就是,每个适中周期都至关重要,之所以每个周期都重要,是因为W1D被用在VLC 和某些AVE软件播放站里,我们说的是大概有31台设备,在不停地解码视频,比如现在奈飞有30%的视频,是AV1格式 WireTube有50% 而你经常没有硬件解码器,因为很多设备都没有用DEV1D 我们发现,在一两个核心上 [01:55:47 → 01:56:21]
你就能流畅解码720P视频,这简直,没错,就是 [01:56:21 → 01:56:26]
发言人01: DEV1D 不可思议对吧,这就是 DEV1D 瞧瞧,正好,这里还有一条你发的推文,也很火爆,你说,巅峰视频编解码器就该长这样 [01:56:26 → 01:56:38]
发言人03: 79.9%的汇编 90.6%的C代码,还有0.5%的其他,而且很神奇的是,这种明明是基于事实的推文,却让人们抓狂,他们很不爽,说什么,过去两年他们一直这样 [01:56:38 → 01:56:51]
发言人01: 疯狂反驳,说不intrinsic 就挺好的,编译器能,他们还会说,我从来没,你可以优化编译器的自动向量化,这是你的问题,你不懂,我们早就试过无数遍了,对吧,两年过去了,我们展示了成百个手写绘编的例子,他们还是说,不不不,你做的不对,编译器能做到这些,那可是数量级的差异,那可是数量级的差异,手写绘编可以远远超过C元 [01:56:51 → 01:57:17]
发言人02: 他们常说的两点是,没错,但现代编译器有自动向量化,对吧,因为我们做的SIMD 就是向量化,但这两者根本没法比,对吧,不是接近,而是差得远,不是慢个5% 10% [01:57:17 → 01:57:31]
发言人03: 而是慢了好几倍,我们能不能,我不知道你能不能,从哲学角度谈谈,因为会有很多,出色的软件工程师,工程师继续学习,从业者听这期节目 [01:57:31 → 01:57:44]
发言人01: 大家听了可能会想,我们应该从中,获得什么直觉,我们到底该领悟到什么,顺便说一下,他就是因为那些推文,才去学绘编的,他直接就去了,他说我觉得这是,让我搞清楚,而且你知道,他记录自己工作的方式,所以从哲学上讲,重要的是要认识到,硬件性能飞速增长的时代,已经过去了,对吧,在摩尔定律的尽头 [01:57:44 → 01:58:11]
发言人02: 我们在AI内存方面,都面临限制,你需要深入底层,做更多优化,从现有硬件中,榨取更多性能,因为我们对CPU算力 GPU算力的需求,正在爆炸时增长,而硬件的速度,并没有同步爆炸,对吧,所以人们做的,就是增加更多核心,对吧,但基本上到某个点,你不可能有250个核心,对吧,所以我们所做的就是把机器的每一寸性能都榨取出来,不,还不止这样 [01:58:11 → 01:58:38]
发言人01: 我们是在虐待机器,我们用机器的方式是连它的创造者都没想到过的,有时候我们会用一些跟手头任务完全无关的指令,我们在视频处理中会用到加密指令,去做跟加密毫无关系的事,而且,我们做的另一件有点疯狂的事情,比如在WED里,就是我们并不使用操作系统的函数调用约定,我们,你应该解释一下 [01:58:38 → 01:59:03]
发言人02: 那个极其复杂,但基本上,通常当你在代码中,从一个函数跳转到另一个时,有一种方式会保存寄存器,保存CPU的状态,然后再进入另一个函数,这算是标准做法,它是 [01:59:03 → 01:59:17]
发言人01: 有点复杂,那我稍微简化一下,所以W1D做了一些,滥用调用约定的事,你可以这样定义调用约定,我写了一个函数,然后想调用另一个函数,数据怎么在函数之间共享,这有一套约定,就是所谓的调用约定,而大VD为了性能优化,有时候会创建自己的调用约定,所以如果我想调用Lex Friedman写的酷,我们得约定好一套规则,这样我才能在汇编层面,跟你共享数据,而汇编中的一个挑战就是,每个操作系统其实不是每个 [01:59:17 → 01:59:51]
但至少我能想到的X86上,就有Linux 32位 Windows 32位 Windows 64位 Linux 64位,他们全都有自己的调用约定,所以Lauren Merritt 做了一件很了不起的事,我们之前也聊过 [01:59:51 → 02:00:09]
我们之前也聊过 [02:00:06]
发言人01: 我们之前也聊过,就是她创建了一个,非常轻量级的抽象层,这样你只需要写一次会员代码,它就能帮你处理,所有调用约定的问题,因为这本来一直是个麻烦,你得管理四种不同的变体,但Dove1D为了速度做得更绝,它在内部使用自己的调用约定,绕开了函数之间的那些规则,基本上就等于说,好我要用这种方式调用函数,因为我知道它就在我自己的库里面,它值得为每个操作系统 [02:00:06 → 02:00:40]
都定做一套特殊的方案,如果是自定义的话不行,但挑战总体上是这样,而且就每个指令集而言也是如此,还要强调的一点是,我们对每个指令集都做了这些事,每个指令集都有自己手写的汇编代码,这更疯狂,而且这个矩阵近年来变得更大了,因为有Risk V 有ARM 64位,有新的4V1 还有41000X86 有AVX512 AVX 所以我们会做运行式检测,我们看FFMPEG 或者DevED跑在什么机器上,它支持哪些特性 [02:00:40 → 02:01:15]
因为你也可能用一台2008年的笔记本,上面根本没这些运行式检测,然后我们根据情况设置函数指针,之后就这样跑起来 [02:01:15 → 02:01:25]
发言人03: 或者你也可能是在一台Risk V的机器上,是的,而在这所有之中,为了更快,我们甚至不遵循操作系统的调用约定,因为我们知道,我们会从自己的二进制文件内部被调用 [02:01:25 → 02:01:38]
发言人02: 所以我们可以不按常规方式保存所有寄存器,直接共享数据,因为那样会导致在L1和L2缓存中,频繁加载和保存寄存器,而我们这样做能更快,所以我才说理解CPU架构,计算机架构是关键,这也是为什么它是手写的,我不知道还有谁,我从来没听说过除了DiveED之外,有别的项目这么做,这就是Kieran所说的,这是一种艺术对吧,这是一门艺术 [02:01:38 → 02:02:04]
发言人01: 我觉得在这个大众市场里,没有多少东西是跑在数十亿设备上的,我知道有些专业领域,比如高频交易,他们对这方面极其认真,因为他们要从市场接收数据,并且需要在若干微秒内做出反应,所以指令确实很重要,但那不是一种,跑在数十亿设备上的,大众产品,那是超级专用的,运行在超级专用的硬件上,而我们跑在所有的硬件上,从,抱歉我一直追问,但这真的是一种反直觉的,甚至可以说是革命性的想法 [02:02:04 → 02:02:39]
汇编居然有巨大的价值 [02:02:39 → 02:02:40]
发言人03: 我们到底该从中领悟到什么,你知道很多听这期节目的人,包括我自己在内,可能都心想,我写了很多年CC++ 一路跟着C++标准升级,深深爱上了C++ 甚至搞过圆编程之类的,然后大约15年前,因为记忆学习,我越来越多的转向Python 所以对我来说,在这个Python和JavaScript的世界里,现在更是氛围编程,我只需要用自然语言,坐在按摩浴缸里喝着饮料,直接对电脑说话,就像真的,我为什么要回到那么底层去呢 [02:02:40 → 02:03:15]
直觉就是,你能在投入的每一美元上,获得更多算力,对吧 [02:03:15 → 02:03:20]
发言人02: 有时候你遇到的问题就是受限于硬件,一个很好的类比就是你在量化,在LM量化里看到的,人们会说,哦我要用FP8甚至FP4来做,或者像微软的某个项目,做到了1.5比特,因为你就是受限于内存,受限于你能跑在什么机器上,因为到某个点我们在做实时处理,而且我相信这在AI推理上也会发生,有时候你需要更快,而你不可能总是靠堆更多更强的硬件来解决,对吧,所以你需要去分析代码,看哪里是关键任务 [02:03:20 → 02:03:52]
哪里是那些被不停调用的地方,比如说WED就是一个好例子 [02:03:52 → 02:03:57]
发言人03: 它每天会被运行数十亿小时,是的,那就有意义,在FFMPEG的命令行界面,那些胶水代码上这么做就没意义,但在那些关键地方就有意义,是啊,这也跟我们后面会再聊,但你新创立的公司BIR 就是在做这类事,追求超低延迟,口号是每一毫秒都算数,所以当你真的在某个维度上,极度受限时,我们其实也到了一个节点 [02:03:57 → 02:04:24]
发言人02: 之前做了那么多了不起的东西,但现在硬件开始反过来限制我们了,成本在涨,因为我们需要更多算力,于是你就卡在CPU 内存,网络,这些地方必须去做优化,而真正的价值就在这里,尤其未来做AI的时候,它能帮你完成很多业务逻辑的编程,但有一件事你永远没法,凭感觉写代码直接搞定,那就是面向硬件的极致优化,让程序跑得尽可能快 [02:04:24 → 02:04:50]
发言人03: 我很想跟你聊聊,到底什么人该学汇编,又该怎么学,不过咱们先去趟洗手间,好欢迎回来,现在有一个很棒的项目仓库,里面是一套汇编课程,首先 [02:04:50 → 02:05:01]
发言人01: 你觉得开发者应该去学汇编语言吗,如果想学你建议怎么入门,这个ASM Lessons到底是什么,其实我本人,一直对书上和网上教汇编的方式不太满意,因为他们太像语法课了,你学一门语言,本来就不是从语法结构开始的,你一开始会说,你叫什么名字,然后从那里出发,去解决真正在交流当中,遇到的问题,你不会一上来就学什么,这是疑问句,这是副词,但几乎所有汇编的书,都在挨个讲指令,甚至包括很多根本用不上的 [02:05:01 → 02:05:36]
解释每条指令做什么,怎么变,实际上变化并不大,另一个问题是,我们这个圈子教汇编,更像是手把手,传手艺,就像铁匠带徒弟一样,一个带一个,当然这好像是最贴切的比方了,这种方式,在线上根本没法规模化,还有就是,我做这套绘编课程,是按照FFM PEG里的那种方式来教的,跟一般意义上,比如说嵌入式设备,那种超低功耗廉价芯片上的绘编,完全不一样,那是另一套玩法 [02:05:36 → 02:06:09]
我觉得这里如果能先强调一下,入门的要求就好了,其实门槛很简单,高中数学再加一点C语言,甚至说实在的,也不需要多少C 主要就是指真得搞清楚,对,我们聊过这些技术有多牛,但像高中生Daniel Kang 都已经写绘编,并贡献给FFM PEG了,我印象里也确实有人,因为这条课程开始贡献代码,所以我真正想做的,是让这门快要失传的手艺,延续下去,因为我们已经用David的例子,证明了,是可以做出惊艳的东西的 [02:06:09 → 02:06:43]
FFMPEG里面现在还有很多代码,只是部分用了汇编优化,所以课程真的是从最基础的地方开始,一步一步走,把很多行话,很多语法都解释清楚,但并不会去教你中断处理指令,不同的跳转目标之类的东西,实际上完全是围绕向量化来展开的,而且还会介绍各种各样的计算器,通用计算器,向量计算器,例子也特别好,这套客车真的很酷,它就是一个经典样例 [02:06:43 → 02:07:16]
不过有些汇编语言真的特别美,我觉得它美,就像在驾驶一架喷火战斗机,那是飞行最纯粹的样子,而且你还能把这架飞机,推到连设计师都想象不到的极限,比如我们有时候会滥用加密指令,去干别的事,那种美感和艺术感,就好像你和处理器之间,没有任何隔层,只有你和驾驶舱里的操纵感,你一动操纵感,它是物理直接连到复义上的,你能让飞机做出正常情况下,做不出的动作,就是那种级别的好看和神奇 [02:07:16 → 02:07:51]
但我也不觉得现在这种,一个带一个的传授方式,能长期持续下去,哪怕我自己是这么学来的,也这样教给了好几个人,因为我们做汇编的那种,特殊口味和方式 [02:07:51 → 02:08:05]
发言人03: 很难靠这种模式一直传下去,这就真的好像,我刚想说巫师在往下传手艺,我看看自己戴着这顶帽子,也确实像个巫师,但你们其实就是智者 [02:08:05 → 02:08:18]
发言人01: 在传授这门手艺,我能问问关于LLM的事吗,他们能帮上忙吗,他们对汇编的理解,说实话比我预想的要好,但还是不行,我问过他一些问题,他一开始就会开始瞎编,倒不完全是幻觉,而是擅自修改东西,然后我问他,这样改比特机能完全一致吗,不行修一下,它就又给你来一遍同样的错误,反反复复,因为没有像Stack Overflow那种,规模的训练预料可以用,训练数据根本不够,这就是最大的问题,我自己刚入行的时候 [02:08:18 → 02:08:52]
做的就是Itanium的回编 Itanium是一种已经死掉的处理器架构 [02:08:52 → 02:08:57]
发言人02: 当年是英特尔和惠普一起搞的,他们本来想做64位,结果输了,后来是AMD 搞出了AMD64 也就是后来的X8664 但E-Tuning当时非常有意思,因为那些处理器有巨大的浮点算力,可以做FMA 很像我们现在跑大语言模型,需要的那种计算能力,你甚至能在每一行里打包三条操作,基本上你每秒钟能有60亿次操作的输出能力,但内存总线的带宽只允许15亿次,等于CPU比你快了4倍,所以你不得不在内存里做各种疯狂的事情,去压缩数据 [02:08:57 → 02:09:31]
附用寄存器,做那种极度依赖于一的优化,当时没有任何语言能自动做到这一点,我还留着那本Italian编程手册,因为英特尔出的书质量特别高,但就像Karen说的,如果你不知道自己要干什么,那书根本读不了,全是韩话 [02:09:31 → 02:09:48]
发言人01: 而现在这套课程就特别好,因为它是围绕一个真实的问题来展开的,而且你可以自己动手做,已经有人提交了补丁,说我学了你的课程,这是我第一次改出来的代码,这太棒了 [02:09:48 → 02:10:00]
发言人02: 而且课程里还有一个叫X86int的框架,是Lauren写的,他当时在X264项目里工作,这个框架可以帮你做更多事情,让你不用太纠结于不同的调用约定,很久以前,我们就有很多学生,用这个给X264贡献过代码,所以这完全是可行的,我也相信,理解汇编语言是非常必要的,哪怕你平时不太写,也能帮你搞清楚,电脑里面到底在发生什么,这会让你变成更好的程序员,这一点我敢跟你保证,因为通过这个过程,你会开始理解计算机里的内存架构,比如计存器 [02:10:00 → 02:10:34]
一级二级三级缓存内存,固态硬盘磁盘等等,这会慢慢形成一种 [02:10:34 → 02:10:39]
发言人01: 很好的编程素养,让你成为更好的程序员,那你们怎么看Rust语言,这已经快成一个梗了,在这件事上,我跟Kieran的看法,差别挺大的,我觉得他们在内存安全,这个概念上做的事,是有价值的,但要说到,手写汇编级别的提速,不,手写汇编肯定不可能,这是已经确定的 C语言,也许还有可能,但我对Rust 有很强烈的世界欲,既视感就是那种,我们要来彻底解决这个问题,而且要用一种特定的方式,来做的感觉,你是说有点太无头帮了 [02:10:39 → 02:11:14]
他把很多精力放在自我重要感上,而不是去解决现实世界里的问题,这让我想起Sinclair C5 就是当年 Sinclair计算机公司的,克莱夫爵士造的那辆车,他说以后大家都会,开着这种电动车到处跑,结果呢Rust 给我的感觉就有点像那个,我觉得这个社区好像不太明白一点,想让大家牵引过来,你必须先做出一个,和现在一样好甚至更好的东西才行,对确实有很多人在用Rust做重写,但如果只做到 [02:11:14 → 02:11:47]
现有功能85% 90% 就像很多对Krutus的重写那样,那剩下的1%要花的,可是99%的时间,借用Elon Musk那句很有名的话,原型很容易,这种阶段的东西很容易,但要造出一辆真正的电动车,你得先做出一辆,跟现在一样好,甚至更好的车 Rust 目前还没到那个阶段,我不是不愿意在 FFM PEG里看到Rust代码,但前提是,它必须跑得一样好 [02:11:47 → 02:12:19]
能支持相同的单元测试机制,要没有缺陷,不能自己随随便便,就打破ABI 我觉得它还有很多路要走,毕竟它现在仍然只有一个,编译器实现,所以,嘿这是我的内存安全乌托邦,光这么说是不够的,即使我们心里,可能都认同内存安全这个目标,我写过很多Rust 当时主要有两件大事,一是往VLC里面加Rust模块 VLC能流行起来的原因之一,也是它一个很关键的架构决定 [02:12:19 → 02:12:50]
发言人02: 就是它有一个非常小的核心,外加海量的模块,你可以用C写模块,可以用C++写,用ObjectiveX写,凡是能跟C交互的语言都行,所以我们就写了一些Rust模块,这方面我有实际经验,其中一部分就是我亲自写的,再一个就是我现在的新创业公司,它是一个完全开源的项目,主要就是用Rust写的 Rust在它特别擅长的那个维度上,确实非常好,它就像一个更懂得内存安全的C++ 让你能在内存所有权上做的事情,目前没有别的语言能做得到 [02:12:50 → 02:13:24]
但是当你从头开始一个新项目,全部用Rust写的时候,它会很棒,可当你需要跟原有部件交互的时候,它就非常不舒服了,而且Rust社区里有一部分人,他们觉得应该用Rust重写一切,一切都会因此变好,但答案是,不,我在自己当技术管理,当创业者的这些年里 [02:13:24 → 02:13:43]
发言人03: 得到的经验几乎永远是,不要重写,很多人刚接触一个代码库时,第一反应往往就是这样,因为他们不理解过去那种,做事方式里蕴含的智慧,所以就会说,我们得把它重写一遍,这也就是为什么会有上千个JavaScript框架,但原因在于有一点非常重要,需要理解写代码要比读代码容易一个数量级,是啊,你也能在LM身上看到这一点,他们能写代码 [02:13:43 → 02:14:09]
发言人02: 但分析代码就困难得多,所以当你面对一份非常复杂的代码时,你读不懂,对吧,因为理解别人写的代码要花费多的多的精力,你并不了解他当时整个的思考过程,我经常拿一些语言开玩笑,比如Pearl 他的语法就极其复杂,想象一下,我在编程师智力状态达到了巅峰,写出了我这辈子最好的代码,但六个月之后,我自己也读不懂了,对吧,因为读代码就是更难,所以很多时候,你接手一个项目,并不理解其中所有的智慧,所有的业务逻辑,做事的原因,可能也没被记录下来,于是你就说 [02:14:09 → 02:14:44]
好吧,我来重写,但问题是,你其实做不到,对吧,就像Kieran说的,我要用Rust重写Krutius 然后你当然很快就完成了 80% 接着那10% 就得多花点时间,而最后的那一部分,你得从另一头去啃,所以对于新项目来说,这非常好,所有设计解析文件,网络的部分,因为有了内存检查器 [02:14:44 → 02:15:09]
因为有了内存检查器 [02:15:07]
发言人02: 因为有了内存检查器,简直棒极了,但对我们来说,还有一点需要从另一个角度看,想象一下,我拿一个软件来说,比如DAV1D或者X264 对吧,它们的运行式代码,有大量是用汇编写的,如果我把C源那部分,用RUST重写,对吧,这样就更安全了,是的,但随后你面对汇编部分,因为是手写汇编,你可以在内存里任意跳转,所以即使我出于安全原因,用Rust重写了C部分,一旦你写了手写汇编,就会破坏所有的安全性,因为我们可以跳转到任何地方,因此在我看来 [02:15:07 → 02:15:42]
我们需要某种安全汇编,对吧,也就是在编译期,对汇编进行检查,这类似于我们在Videoland 对Dove1D和X264 所做的Checkism项目,在编译期对你的汇编进行插装,检查它不会在内存里任意跳转,因为否则的话,你可能用RUST重写了一部分C代码,但如果你想要达到同样的性能,你就得用内联汇编,这时候就把你的整个安全模型给破坏了 [02:15:42 → 02:16:08]
发言人01: 这就是我对RUST的一点看法,不我只是想从我个人角度说,我对汇编真是太着迷了,那种速度上的提升,你懂的几倍甚至几十倍,永远都让人看不腻,所以在个人层面,我运行我们内部的测试套件,看到那些性能提升,我到现在都惊叹不已,然后编程能带来快乐和幸福感,原因有很多,但我认为最大的快乐之一,就是代码优化 [02:16:08 → 02:16:34]
发言人02: 而听起来,你正处在这一块的最前沿,那真是太酷了,而且在社区里,我想提两个人,他们简直就是汇编的魔法师,这两位其实都住在北欧,一个在瑞典,一个在芬兰 Henry Kna 对Intel X86汇编的了解,到了什么程度呢,我们向英特尔问一些事情的时候,他们却说,你们干嘛来问我们,你们有Henrik 他比我们懂得多,他几乎知道每一代CPU上,所有3MD指令的周期数,对这是Pentium 4 这是Nihalem 这是Core 2等等,这个人可以说是 [02:16:34 → 02:17:08]
全世界最懂汇编的人了,没错,而且他还是你见过的最友善的人,非常低调,你根本看不出来,他太厉害了,而另一位叫Martin Martin Stasio 他主要做ARM方面的事情,对吧,就是利用指令集,用在iPhone和Android的设备上那些,他居然在手机上写绘编,编辑用的就是那种 [02:17:08 → 02:17:28]
发言人03: 很烂的虚拟键盘,一边还在游乐场看孩子玩,对吧,这完全是另一个境界,所以这两个人真的是,所以说,当你在那种高层次上,编写绘编时,其中一部分就是 [02:17:28 → 02:17:41]
发言人01: 了解你所编程的架构,没错,那么X86 特别是在ARM上,没错 ARM 特别是,但我的意思是这些架构都很复杂,对吧,是的,但ARM在某些方面,跟X86的乱序执行不太一样 ARM其实没那么糟,但你真的需要理解,所有不同代际的ARM处理器,因为它们各个都不一样,有了72之类的,等等等等,还有苹果的变种,有这种变种,那种变种,而在X86上,你需要编写在所有这些变种上 [02:17:41 → 02:18:16]
都能高效运行的代码,但大体上你有Intel和AMD 它们有一些子变种,但一般来说,在一个变种上跑得快的东西,在其他变种上基本也快,而在ARM上情况就复杂得多,完全是另一局游戏 [02:18:16 → 02:18:34]
发言人03: 我们正在这趟,非线性的历史旅程中穿梭,不过我们刚才谈到了Michael Mayer 我想问一下,曾有一段时间 FMPEG出现过分裂,分出了Libav 是的,在开源项目里,有时候大家会有分歧,对吧,你真是说得太客气了,是啊,而好的一面是,因为许可真的缘故,你基本上可以拎起炉灶,对吧,这很正常,而且一直都在发生,比如当年GCC [02:18:34 → 02:19:00]
发言人02: 在GCC两时代有过EGCS 后来才演变成GCC3 还有KHTML分列出WebKit WebKit又分出Blink 这都是同样的过程,而且就像我自己,今天想在VLC里做个新功能,我会先自己单干,等做好了再合并回社区,所以在FFMPEG社区也有过一次分裂,分出了Libaf 几年之后社区又合并回来了,大家继续往前走,这种开源社区里的戏码是很正常的,但这些分叉其实很重要,因为他们改变了社区的现状,不谈那件事,就说GCC那次分叉吧 [02:19:00 → 02:19:35]
它让GCC变得好得多了,因为有那么一些人想要从根本上改变架构,让它跑得更快,当然这总是关乎人的问题等等,但最终你会发现,FMPEG今天要比分叉之前更好,而且现在我们又重新聚在一起了。我花了很多时间,Karen也可以讲,在这个社区里老实说,很多事情并没有被很好的解释,因为大量原因并不公开,但我觉得这很正常,也是好事。 [02:19:35 → 02:20:03]
发言人03: 是啊,你把它说得太美好了,但其实开源项目内部有过战斗,相当激烈的战斗。我的意思是这是一个充满热情的社区,大家必须以分布式的方式来决定事情的方向,对我查了一下资料 FNPAC和Libav的分裂发生在2011年,主要原因是项目治理领导风格和开发流程,而不是根本性的技术分歧,后来FFNPAC实际上吸收了Libav的工作,而Libav则渐渐凋零,大多数发行版和开发者都回到了FFNPAC 从用户的角度看,那真是一次怪异的经历,因为你知道 [02:20:03 → 02:20:38]
我是一名Linux用户,所以不管是Ubuntu还是什么,突然之间,我记得好像有那么一段时间 Ubuntu切换到了Level 12 是14 大概是那个版本,对,大概是那样,然后他们又切回去了,我当时就想,这都发生了什么,所以你能够感受到,内部那些不同争论 [02:20:38 → 02:20:57]
发言人01: 带来的联谊效应,说句公道话,在苹果上,你输入GCC 实际调出的却是Clang 他们也做了类似这样的事情,所以,是的,对我来说,那个分叉虽然闹得很大,充满了戏剧性,但Lebuff的大部分开发成果 [02:20:57 → 02:21:11]
发言人02: 后来都合并回了FFMPEG 所以实际上FFMPEG 获得了一个功能超级,这给用户带来了更多的功能,以及很多之前讨论过的东西,比如说,关于代码审查和提交方式的争论,现在在FFMPEG里,已经完全定下来了,而且是按照委员会,大多数人同意的方案走的,所以实际上,曾经活跃在分叉上的开发者,都回来为FFMPEG工作了,因为当初的分歧,已经解决了 [02:21:11 → 02:21:37]
发言人03: 最终FFMPEG 比以前变得更强了,我知道大家都喜欢听八卦,不过,我主要的担忧是,我能理解从很长的历史来看,这一切最终是好的,但我确实担心,因为对开源项目成功,至关重要的那些人,人数实在太少了,我见过这对他们,造成了心理负担,有时候会导致倦怠,这些厉害的人,处在开源项目的核心,会有那么一个时刻,说到底,他们做这个的动机是什么,最初是因为自己热爱,这事让他们开心,但到了某个节点 [02:21:37 → 02:22:12]
一觉醒来,觉得来自这些八卦的炮火,有点太猛了,所以从项目层面看,项目会继续甚至更繁荣,但有时候某些个人会想,我真的已经受够了,是的,但这不仅仅是关于人的问题,你刚刚提到的,其实是当今开源领域最棘手,也最有趣的部分之一 [02:22:12 → 02:22:30]
发言人02: 就是维护绢带,在这点上就是个问题,还有Daniel Stenberg 他是Curl的维护者,大概也是全球最棒的开源推广者之一,顺便说一句,他也是欧洲开源学院的成员,和我一样,所以我特别荣幸能跟他待在同一个社群里,他反对他称之为AI废料的东西,因为这会带来大量虚假报告,垃圾补丁,让维护者维护软件的负担变得特别重,这对开源开发者心理的消耗,比项目分叉要大得多,举个例子 X事件就是因为项目只有一个人在维护,他基本上被两个攻击者给整垮了 [02:22:30 → 02:23:04]
那些人会在半夜这种奇怪的时间,不停地问他问题,让他筋疲力尽,最后他实在受不了了,说行了我干不动了,然后把提交权限直接给了攻击者,所以开源社区里的倦怠是真实存在的,不过多数时候,这跟维护本身有关,对吧,确实 [02:23:04 → 02:23:21]
发言人03: 但我在想我们该怎么帮助他们呢,那些人实在太重要了,这些项目核心的人太重要了,所以比如说,我现在就维护着一大堆多媒体,和非多媒体的酷,因为原来的维护者,被搞烦了,撩挑子了 [02:23:21 → 02:23:35]
发言人02: 有些是视频相关的,有些在videoland之外,因为有时候,你真的需要皮厚一点,对吧,你收到的倒不一定是攻击,而是这个不行,那个不行,然后你就会往心里去,这也是为什么 Google的那件事,是个问题,他们没有意识到,到头来,就是那张经典的图,你看整个技术站,最后发现底层的,某个随机的开源项目,维护着整个,内布拉斯加一样的东西,互联网就是这样,你看到那个项目了吧,对 [02:23:35 → 02:24:01]
发言人03: 这个就是那个梗,我是说,它适用于太多东西了,很多项目都是这样,但这里指的是,整个现代数字多媒体技术设施,然后最底层,一切依赖的那个东西,就是FFMPEG 确实如此,然后通常你知道,就那么几个人在维护这些,还有F FMPEG或者VLC嘛,对吧,他们有10到15个核心开发者,还不算最糟的开源项目,而像LibXML2 [02:24:01 → 02:24:28]
发言人01: 安装量可能更高,维护者却只有一个人,对吧,就一个人 LibXML2 是,对 LibXML2嘛,曾经有过一次大的停滞,现在没人维护LibXML2了,而它几乎是唯一一个,到处都能解析XML的库了,所有的,那些各种,难以想象的边缘情况下的XML解析,然后还会被安全研究员攻击,说,你看,还有一个疯狂边缘情况,你们没考虑到,这就像,但真要解决那个问题 [02:24:28 → 02:25:02]
所需的知识体量是巨大的,还有一个人,为全世界维护所有失去数据,他就住在美国中部 [02:25:02 → 02:25:08]
发言人02: 我记得是内布拉斯加,还是南达克他州,开源维护者的心理健康,大公司要么不在乎,要么根本看不到,他们只会说,哦我在做一份开源报告之类的,有一部分是财务问题 [02:25:08 → 02:25:20]
发言人03: 人们绝对应该从各个方面,资助开源项目,但另外一部分,是在基本的人性层面,属于精神层面的东西,你想想FMPEG的处境,互联网上有那么多东西都依赖它, [02:25:20 → 02:25:33]
发言人01: 但人们却常常用居高临下的态度去对待那些推动和维护这些项目的人。在安全社区里,他们确实就那么做了。我记得当时有一种声音,有一部分安全人士说, 不,这些人写的是垃圾代码,他们得把自己那坨实代码修好。我就想,不不不,这是个别人的业余项目, 你用一个安全扫描工具跑一遍,发现了一些AI生成的东西,那哥们写的不是垃圾代码,那只是一个极端边缘的情况 [02:25:33 → 02:26:08]
达到了99.9999%的那种程度,他根本没想到那种情况,因为这只是他用来解码,星球大战游戏的业余项目,我明白这种业余项目的性质,那都是辛苦活也很美好,正确的做法该是去赞美这些人 [02:26:08 → 02:26:25]
发言人03: 因为他们做了相当了不起的工作,真的很不可思议,有些人愿意站出来一开始,甚至可能永远拿不到报酬,他们做这些完全是出于热爱,而人类文明就是靠这样的人在运转,我们应该赞美他们,给你个概念,我在videoland的时候说到过死亡威胁,真的,你之前跟我提过这个,背后到底是怎么回事,所以 [02:26:25 → 02:26:50]
发言人02: 那大概是2009 2010年的时候吧,当时苹果正从PowerPC转向Intel Core处理器, 那大概是2006年的事。到了2009或者2010年, 我决定不再为PowerPC开发新版的VLC了, 那时候VLC马上就要出1.0版本了, 我们只有四个人, 就是那种不行, 这不可能的状态, 然后我就收到一封死亡威胁信, 里面还有粉末, 记得那时候有不少探局恐吓事件对吧, 起因就是因为我决定不再维护PowerPC的版本了。当然那不是真的探局, 就是些面粉之类的东西,但我收到的那封信上写着 [02:26:50 → 02:27:25]
你这个垃圾去死吧 PowerPC万岁之类的话 [02:27:25 → 02:27:28]
发言人03: 那是2009还是2010年,我还年轻,我当时想,为什么我到底做了什么,是啊,这种事真的能击垮你的精神,就是那种,为什么,我妈吓坏了对吧,我们不得不去见警察什么的,但现在呢,我要说,我很高兴那时发生了这件事,它极大的塑造了我,对吧,我能承受很多仇恨,我对此泰然处之,对吧,真糟糕,这就是现实的一部分,因为所有IVLC的人,所有FFMPEG的人,比如我,你知道我这辈子确实有数百次,可能上千次,脸上挂着微笑 [02:27:28 → 02:28:01]
就因为FFMPEG让我开心俱好,我有多少次机会说出这些,零次,直到我发现有个推特账号 [02:28:01 → 02:28:08]
发言人02: 偶尔我会给他发消息,我喜欢Reddit上关于我的一个梗,虽然出于很多原因,我并不喜欢这个梗,但有人会说 JB在Reddit上我确实在,对吧,然后我说打个招呼 [02:28:08 → 02:28:20]
发言人03: 然后我收到好多人说,感谢你开发VLC, 然后我会截图分享到SignalArc上, 是的,我们用IRC在不同的地方。我有个小插曲,你提到IRC是专为老年人设计的Slack, 所以你们还在用IRC? [02:28:20 → 02:28:34]
发言人01: 当然是,我手机上也有。当然,每天都用得挺好。哇,它工作正常,工作正常,你还有手摇启动的电源。但是没有有一个… 那里有社交功能。有广告,社交媒体广告,没有追踪,什么都没有,它是,说实话,最大的问题,对吧,和slack相比,就是它没有现成,是的,这很烦人,有时候没有表情,也挺遗憾的 [02:28:34 → 02:29:01]
发言人02: V3有,是的V3 但没人用那个,而且,你不能编辑消息,是啊,对吧,除此之外,它用起来完全没问题,没有表情,你们怎么沟通,这就是为什么,我说它适合老年人,所有人,而且我们知道 [02:29:01 → 02:29:15]
发言人03: 我们知道表情,我们喜欢你知道,那种蓝状表情之类的,是啊,没错,酷,总之,你们用IRC沟通,我们刚刚在聊什么来着,是啊,我们之前在聊死亡威胁,是啊 [02:29:15 → 02:29:29]
发言人02: 但是有人感谢你,有时候是啊,有人会给我发消息说,感谢你开发VLC 而我总是回复,因为我想验证一件事,你需要感谢开源社区,是啊,拜托,所有正在听的人 [02:29:29 → 02:29:42]
发言人03: 庆祝庆祝FFM Pack 庆祝VLC 庆祝所有那些卓越的开源项目 Linux 一切,有太多了,有太多了,而且你知道我的意思吗,即使在开源之外,也要庆祝那些 [02:29:42 → 02:29:54]
发言人01: 创造你常用且热爱的软件的公司,庆祝人类的努力,庆祝那种不仅仅满足于,做出还行的东西,而是要做出真正卓越的东西的,人类奋斗精神,是的,这很重要,对吧 [02:29:54 → 02:30:07]
发言人02: 就像我们说的 [02:30:07 → 02:30:08]
就像我们说的 [02:30:07]
发言人02: 就像我们说的,我们为技术工作,我们为普通人,做一些非常复杂的事情,我们希望我们在技术上的卓越,能够汇集每个人,是啊,这就是为什么,这就是我们工作的原因,对吧,这就是我早上起床的动力 [02:30:07 → 02:30:20]
发言人01: 因为我希望人们使用我们的东西,因为它让每个人的生活更轻松,我想解决难题,做点有意思的事情,去解决一些有趣的技术挑战,我们是工程师,天生就喜欢造东西,对吧 [02:30:20 → 02:30:33]
发言人02: 我很小很小时候就清楚,自己想当一名工程师,想造汽车,对吧,也许未来某个时候,我真会回头去搞汽车,对吧,但怎么说呢 [02:30:33 → 02:30:43]
发言人03: 现在做的也是我们想造的那些又酷又有用的东西,而且必须得有挑战性,对吧,你得让你的大脑真正转起来。你们两个最初是怎么爱上编程,爱上建造和工程的? [02:30:43 → 02:30:55]
发言人01: 吉兰,你第一次编程是什么时候?微软的QBasic,那会儿我在用Windows 3.1,后来是Windows 95,玩微软QBasic。哇,你当时写了什么程序?就比如惩罚表,或者简单的技术循环 10 20 30 40这样的,不错,做完那个以后,我觉得自己已经什么都能做了,我从那种基础练习,直接跳到了想做一个足球游戏,不是美式足球,是英式足球,视频游戏,我把所有东西都画了出来,心想我就要干这个,但当时我其实没弄明白 [02:30:56 → 02:31:30]
从写basic和画几张图,直接跳到做一款电子游戏,中间到底要多少工作量,但那段路我也就这么走过来了,我记得我也是从Basic起步的,后来在小学快结束的时候,用了Turbo Pascal 不过我第一次真正算得上 [02:31:30 → 02:31:46]
发言人02: 严肃编程是在中学的第一年,就是你大概11岁的时候,那时我在意大利佛罗伦萨住了一年,那真是特别棒的一年,我们的数学老师,让我们用一种叫Logo的编程语言做东西,里面有一只小海龟,可以在屏幕上画出图案,你只要让它左转右转就行,我们最后用它做了非常复杂的程序, 因为你当然可以用它来做成很多事, 就是从那时候起, 我心里更确定, [02:31:46 → 02:32:12]
发言人03: 我就是想和计算机打交道, 想编程。我觉得我们还没好好聊过X264这件事, 我们聊了大卫, 对, 能绕回去一下吗?当然, 稍微往回倒一点, 聊聊X264, 这个几乎支撑着互联网上所有视频的东西。那么, 你能给我讲讲X264的故事吗?杰兰, 你其实也是X264的贡献者之一,对 X264是一个视频编码器 [02:32:12 → 02:32:39]
发言人01: 针对的是H.264视频标准,它不仅统治了互联网视频,也用在蓝光叠片这些领域,蓝光叠很有意思,因为做蓝光的人极其追求最高画质,有不少非常牛的高端电影,就是用X264压制的,此外还有广播电视等等一大堆领域 X264 可以说是一个巨大的跨越,而且它出现的时间点刚好合适,很多研发工作是在高清视频开始新奇那会儿进行的,英特尔的处理器 [02:32:39 → 02:33:13]
大家的硬件算力都在快速变强,已经可以做实时视频了,但最重要的一点是,它把重心放在了视觉衡量指标上,在那之前差不多20年,工业界和学术界一直痴迷于纯数学指标,也就是所谓的峰值信造比PSNR 就是军方误差,军方误差的对数,这种做法带来了一堆问题,因为军方误差会导致画面模糊,你想降低总体的军方误差,就会倾向于给每处都加一点点小错误 [02:33:13 → 02:33:46]
而不是容许少数地方有大错误,结果画面就变得到处都糊,于是爱好者圈子反其道而行之,他们做自己个人的视频,主要是动漫视频,他们做了两件不一样的事,而且跟社区之间,形成了一个巨大的迭代反馈循环,两件大事,第一是心理视觉率失真优化,也就是利用快的纹理能量,在做决策时去补偿人眼的主观感知,所以这心理视觉失真 [02:33:46 → 02:34:20]
这才是关键,真的,这可以说是革命性的,我们既然能重新思考这件事 [02:34:20 → 02:34:25]
发言人03: 不要把压缩搞成某种纯理论的操作,而是让它完全围绕一个目标,让人眼看起来舒服,对就是在压缩时,对于我们人类在意的那些信息 [02:34:25 → 02:34:38]
发言人01: 让它尽可能丢得最少,没错完全是这样,而行业里至今有些部分,仍然痴迷于那些纯数学数字,可他们在实际观看时,根本不好看,然后第二件大事是,自视音量化,它的做法是把更多的比特,从复杂区域里挤出来,重新分配给那些不太复杂的区域,比如草地,草地是有一些高频细节,但整体复杂度比那些更复杂的物体要低,这一切的起源,其实绕不开ParkJoy这个测试序列 [02:34:38 → 02:35:13]
ParkJoy才是那个标杆性的样本,就是在公园里跑来跑去的那个,对就是这个,这是瑞典电视台,在HD刚开始时制作的,全部用胶片拍摄,制作上不计成本,最后还免费公开了出来,这真的,这个样本,直到今天,依然能把行家和小白区分的清清楚楚,它里面的挑战实在太多了,树枝水面草地运动,各种,我觉得到现在,也还没有哪个公开测试序列,能比得上它 [02:35:13 → 02:35:44]
发言人03: 对于只听音频的朋友,我们现在屏幕上看的是这样一幅画面,一群人沿着河边在跑,能看到水面的倒影,到处都充斥着非常丰富的,高信息量纹理书页 [02:35:44 → 02:35:57]
发言人01: 还有光影在数学间的变换,所有这些,你能清清楚楚的看到,那些PSNR分数很高的编码器,把所有东西都糊掉了,画面全糊了,然后你可以实际看到,只要我打开心理视觉优化的相关功能,关掉自适应量化,画面马上就好看了,无数倍,但在那个时候,人们却把那些纯数学指标,奉若神明,碰不得PSNR 就是那个至高无上的东西,那你能讲讲,怎么去衡量这些心理视觉的东西吗 [02:35:57 → 02:36:31]
怎样才能把一段压缩,对人眼而言有多好看,这个感受变成一个数字,这甚至有可能吗,这正是Netflix 后来用VMF想要实现的事情,他们说自己用了一个机器学习模型,那是后来的事了,但在当年X264还在开发那会儿,这完全是,基本上那都是由开发者,在自己的笔记本电脑上完成的,并不是说什么大公司,用专业的监视器之类的东西,而且这其实就是当初的目标之一 [02:36:31 → 02:37:05]
当时的开发者,特别是劳伦梅里,他的意思是,我不想在一台三万美元的屏幕上,测试这个,我希望他能在某个人的家用笔记本上,看起来效果就很好,对太棒了,这里还有一个样本,是那个地球脉动的杀手级样本,我特别喜欢它,你马上就会明白为什么了 [02:37:05 → 02:37:26]
发言人02: 对对我很喜欢这个,就是有一大群鸟对吧,在飞,而且画面越往后,鸟就越多,到最后几乎就像有数百万只鸟一样,这是有史以来最难编码的东西,对吧,当你在YouTube上看的时候,你会发现YouTube的编码效果,其实有多差,而做到极致优化,在恒定比特率下,得到完美的画质,这简直就是现象级的,在动漫方面也有大量的优化,主要是劳伦做的,很长一段时间里,动漫的编码质量都很差,因为有大量的色带,对吧,你看到过那些问题画面,而且问题非常多 [02:37:26 → 02:37:59]
所以XR64就像是,直到今天,它仍然是任何新编码器的参照标准 [02:37:59 → 02:38:05]
发言人01: 无论是AV1 AV2还是VHC 大家都会拿来跟XR64做比较,我最喜欢的电影之一,天堂电影院,另一位开发了蓝光方案的工程师,他给我看了XR64 与其他编码器的对比,那效果完全不一样,而且我想,蓝光界有不少人开始使用X264 我记得重量级的一位,就是华纳兄弟的克里斯安德森,他为危机边缘整套聚集做了编码,但那确实是一件,你会希望,街上随便一个人在看的时候,画面效果都能很好 [02:38:05 → 02:38:38]
所以他们在工作中也冒了一定的风险,因为他们都在大公司里,大公司可以买任何他们想买的东西,但他们说,不不不,我想用这个免费的开源方案,这样我的客户才能看到最好的效果,直到今天,我个人还是尽量不看流媒体平台上,那些最有电影感的影片,而是去买实体光盘,因为他们的画质非常好,你甚至不需要买一台很贵的电视,我觉得这才是关键 [02:38:38 → 02:39:11]
发言人02: 而X264就是开源项目的另一个例子,它由劳伦伊玛尔创立,当时它就在淡域了VLC的那所学校,然后就有了一代人,像劳伦,杰森,蒙斯,还有许许多多,像亨利克,安东,就是这位安东,还有我们现在用的汇编框架,由大卫等人所创,都是在那时诞生的,对吧,所以说XR64 是个很棒的项目,参与其中的人遍布世界各地,而且我想他们中的大多数人 [02:39:11 → 02:39:38]
发言人03: 彼此都从未见过面,但是,按照基兰的说法,他们所有人,或者说其中的绝大部分,都热爱动漫,有很多事情,我一直都入不了门,其中之一就是动漫,我看了非常多的动漫 [02:39:38 → 02:39:51]
发言人02: 尤其是在那个年代,当时有很多动漫内容,商业上并没有相应供应,对,那是在Crunchyroll这类正版平台出现之前,那通常发生的事就是,热爱动漫的人从日本搞到DVD光盘,然后破解出来,因为当时没有商业渠道提供这些内容,还有一些人,我们称之为字幕组,基本上是自己在做翻译,制作字幕,在那个年代,你只能完全通过非法渠道下载,那是唯一的途径,对吧,所以所有这些都是手工制作的,这非常契合开源社区的精神,对吧,因为他们需要工具来编码 [02:39:51 → 02:40:26]
做字幕,最棒的开源字幕项目之一,叫做AEG Sub [02:40:26 → 02:40:30]
发言人01: 这是一款字幕工具,在动漫圈,以及在东南亚,日语相关的领域都非常出名,动漫里,有一些你在真实拍摄内容里,碰不到的奇怪纹理,我认为这是关键的一点,就是要优化这些奇怪的纹理,因为动漫不是以通常的手法制作的,对,动漫的制作方式,大部分都是在电脑屏幕上完成的,对吧,已经有段时间了 [02:40:30 → 02:40:56]
发言人02: 所以你们会看到各种颜色渐变,对吧,因为用数字方式制作这些非常容易,但在真实生活中却很难实现,而且字幕也非常复杂,因为你经常需要保留日语原文字幕,然后你还需要注音假名,对吧,就是我们所说的汉字上面的,平假名和片假名,然后因为当然你有官方字幕,但你也需要英文字幕或者法文字幕,因为你想学习语言,对吧,在字幕处理上的疯狂之处简直太多了,我们见过各种稀奇古怪的字幕样本 [02:40:56 → 02:41:28]
所以这不仅仅是文化的重要组成部分,也是因为当时没有官方渠道提供这些内容,也没有别的办法 [02:41:28 → 02:41:35]
发言人03: 你能跟我们讲讲H264和AVE之间的区别吗,然后还有X264大卫,这算是一个大跨越,你能帮大家理解一下,是不是有一些流媒体网站正朝着AV1这个方向发展 [02:41:35 → 02:41:48]
发言人02: 老实说从MPEG-2视频开始,所有的这些边界码器,其基本概念都是一样的,同样的概念都是关于逆向变换,真内预测,运动补偿,伤,编码等等,所有这些都是相通的,然而每一代新的边界码器,都能在同等画质下,给你带来25%到50%的压缩率提升,所以你们经历了MPEG-2 经历了DVX 然后有了HR64 这是一个变革,对HR64提升了非常多,接着又有了更多,你们有了HIVC 在HHIVC 同期还有谷歌的VP9 [02:41:48 → 02:42:22]
VP9在压缩质量上,和HIVC有点类似,但它是免版税的,因为在多媒体领域,有大量的专利,而HR64之后的专利,许可变得非常离谱,对吧,每年可能要花费数亿美元,所以这完全不划算,于是谷歌搞出了 VP9这样的技术,而开放媒体联盟,则搞出了这个叫做 AVE的芯片解码,所以你可以想象,在同样的视觉质量下,在给定的比特率下 AVE比HR64 节省40%到60%的带宽,这真的很棒,你提升了画质,要么你固定比特率,提高画质 [02:42:22 → 02:42:57]
要么你固定画质,降低比特率,但问题是,现在你们从标清走向高清,从高清走向4K 从4K走向4K HDR 文件大小会以两倍三倍四倍,这样的系数增长,对吧,所以你们需要有更好的压缩技术,来把这些控制在一个可管理的范围内 [02:42:57 → 02:43:16]
发言人01: 是更多的编码工具,更多,更大的红块,每个红块里有更多的子分区,复杂程度乘指数级上升,它更复杂是因为编码器 [02:43:16 → 02:43:29]
发言人02: 需要搜索更多的可能性,对吧,所以比方说,有一件容易理解的事,要预测一个像素块,到另一个像素块之间的色彩关系,你可以有不同的方向,对吧,你可以向左向右自下而上,然后是其他的向线方向,对就是我所称的北东北西北等等,对吧,但这是八个方向,现在你可以有更多的方向,可以是16个69个或者128个,对吧,你可以有,而每一次你的编码器都要花更多时间来判断,这个快跟这个方向最匹配,还有那些你能用上的新工具编码器,都需要去检查 [02:43:29 → 02:44:04]
看哪种工具的组合,能给你带来更好的压缩率,所以我估计 [02:44:04 → 02:44:09]
发言人01: 就CPU运算周期而言 AVE编码的复杂度,比H.264高出两个数量级,对吧,数量级的差距,对吧,并且,正如我们讨论过的 CPU的速度,并没有在变快,你只是在把更多的核心,投入到这个问题上,但这也是一个事实,你只需要编码一次,却会有数亿的用户观看,对吧,是的,所以例如 YouTube就是一个很好的例子 YouTube几乎把所有视频 [02:44:09 → 02:44:37]
发言人02: 都以H.264编码,但热门的视频,会被编码为AVE 因为它的编码成本,当然更高,但你只编码一次,却要发送给数百万人,对吧,所以这是在编码时间,复杂度,以及在服务器端,和客户端的CPU使用率,之间做一个权衡,因为最终,如果你把视频,分发给成千上万的人,而文件大小,只有别家的一半,那效果会更好,对你的电池寿命更好,对你的调制解调器更好,等等等等,所以我们可以列举一下,比方说 [02:44:37 → 02:45:04]
发言人03: 最流行的五种编解码器和容器组合,会是封装在MP4容器里的HR64 封装在MP4或WebM容器里的AVE [02:45:04 → 02:45:13]
封装在MP4或WebM容器里的AVE [02:45:10]
发言人03: 封装在MP4或WebM容器里的AVE 还有用于编辑的,封装在MOV容器里的ProRes [02:45:10 → 02:45:17]
发言人01: 那么对于不了解的人来说,我猜ProRes 苹果公司用于编辑的编解码器,最初是为Final Cut Pro设计的,它的设计目标是解码快搜索快,因为剪辑师需要非常快速的移动,所以它的使用场景和分发用途,是完全不同的,目前还没有,或者说几乎没有任何食欲压缩,现在还没出现,也没有针内压缩,所以你可以剪切 [02:45:17 → 02:45:44]
发言人02: 可以做剪辑,这就是我们说的,纯针内编解码器,对吧,我快速解释一下,什么是I针P针和B针,请讲 I针通常被叫做关键针,但它其实是一个完整针,就像一张图片,像一张JPEG 对吧,你拿到它就能看到全部画面,接着,下一针可以是P针,也就是预测针。你从上一针里取出,比如第五块、第七块和第四十二块,把它们替换掉。然后,你只需要给出额外的信息,但这意味着为了解码这个P针,你需要能拿到前面的I针。 [02:45:44 → 02:46:18]
然后当然还有更复杂的B针,也就是双向预测针,它可以依赖不同类型的针,有些是过去的,有些是未来的。所以,PURIS就是一种纯针内的编解码器。所以I帧是完整帧 [02:46:19 → 02:46:32]
发言人03: P帧基本上只依赖I帧,而B帧可以依赖前后的帧 GOP也就是画面组,我记得FFM PEG里H264的默认值,好像是大概250帧这样子,对我来说这简直像魔法一样,你居然可以预测每隔好几秒才有一个完整帧,好几秒那意味着好几S 然后你还能有这么一连串的预测,而且像我这样的普通人,用FFMPEG压缩东西,居然完全察觉不到,结果还能流畅播放,这真的像魔法,你甚至可以做到 [02:46:32 → 02:47:06]
我们在网络上,大量使用的一种方式,叫无挨针刷新 [02:47:06 → 02:47:10]
发言人01: 基本上就是完全没有挨针,你在开头放一个挨针,然后就再也不发任何挨针了,这怎么可能,工作的到底怎么,做到的,你是随着流的持续,逐步构建出一个挨针,所以,所以你是刷新图像的某些部分,没错,但这样一来,你其实从来没有过挨针,对,这就是我们用的那种刷新模式,这是最厉害的一种,不过对我来说 [02:47:10 → 02:47:37]
发言人02: 我刚开始时最震撼的还是B针 B针,也就是双向预测针,可以依赖未来才出现的针,这就意味着,要解码这个B针,你得先等后面的那个依赖针出来,把它缓冲住,解码出来,才能回头解这个B针,所以针的解码顺序和显示顺序,是不一样的,这意味着编码器得非常聪明决定,好我要去依赖将来才出现的东西,这太不可思议了,震撼吧,对 [02:47:37 → 02:48:03]
发言人01: 每天都能如此流畅运行这件事,从某种意义上说,简直是个奇迹,它确实管用,你可以在全球各地,用不同厂商的解码器,比如美国一个这里一个,但最终产出的都是主比特完全一致的结果,这真的很了不起,而且他们还能完成非常复杂的事情,并且越来越复杂,却依然保证比特级精确,这背后有大量的工作 [02:48:03 → 02:48:29]
发言人03: 在整个压缩过程中,有无数可以调节的旋钮,这些年来,我逐渐接触到越来越多,非常迷人的参数 FMPEG把这些完全开放给你,也许你可以聊聊其中一些,首先很明显,我们可以降低分辨率,降低帧率,使用不同的边界码器,比如我们提到过的,从H264到AV1 还可以在比特率和质量之间,做各种权衡,就像我们聊过的 [02:48:29 → 02:48:54]
比如你可以用固定比特率,固定质量模式,CRF,CQP,你也可以调整画面组的大小,也就是我们说的GOP,更长或更短,还有疯狂的逼真数量,所有这些都可以调整。 [02:48:54 → 02:49:07]
发言人02: 疯狂的是,有无数人的工作就是去优化这些参数。你在YouTube,Netflix,Meta等等地方看到的那些人,他们不是写编解码器的,他们只是在为手头的文件,手头的格式寻找最佳参数。因为电影,你手机拍的用户生成内容,屏幕录制,或者你要做视频编辑的素材,这些都不能用同一套参数,有成千上万的人,工作就是专门优化这些东西,是啊 [02:49:07 → 02:49:34]
发言人03: 他们都是魔法师,向他们致敬 YouTube 其实所有的流明团网站,都要做到大规模分发,而YouTube尤其神奇,因为它不光要做Netflix那种,单向广播式的东西,它还得从全球各地,接受视频上传,所以他们也在做,大规模的编码处理,哪怕那视频只有五个人看,即便如此,它还是得在瞬间提供,不同分辨率的版本,延迟机器低 YouTube基本上就是网页版的VLC 说真的 [02:49:34 → 02:50:02]
发言人02: 这还挺好玩的,因为在YouTube被收购之前 Google自己做的一个,叫Google Video的东西,其实就是用的VLC插件,让你在网页浏览器里跑VLC 用Actifax插件,所以是在IE浏览器里运行的,这很有意思,因为今天情况正好反过来,我们用VLC的WebAssembly版本,把整个VLC和FFMP 编译到JavaScript虚拟机里,通过WebAssembly [02:50:02 → 02:50:27]
发言人03: 在浏览器里解码视频,对,你分享过一个传奇故事,是通过维基解密公布的Vault 7文件发现的 CIA曾经用一个修改版的VLC 来欺骗人们,窃取他们的数据,没错,所以,你能解释一下,到底发生了什么吗,到底是什么情况,所以,所以这是个意外,对吧,因为某个时候,我们提到了一些文件,有几个跟Blurries和VLC相关,但最有趣的是 [02:50:27 → 02:50:54]
发言人02: CIA金库7号文件,如果我没理解错 CIA有一个自定义版本的VLC 里面有一个特定的插件,是的没错,我们不得不为此写一篇新闻稿 VLU蓝写了一篇新闻稿 [02:50:54 → 02:51:07]
发言人03: 说获取VLC媒体播放器的,唯一安全来源,是官方VLU蓝网站,我的意思是,我想这对于任何开源软件来说,都是一个安全漏洞,有人可以骗你,让你从假网站下载 [02:51:07 → 02:51:20]
发言人02: 下载到假网站,对或者通过定向广告,对吧,那是一个定向广告,为了让你看一个特定文件,你需要用这个定制版VLC来看,而且它用的是正常的VLC二进制文件,只是他们加了一个DLL 我记得好像是PSA PIL 它的功能基本上是读取你的文档文件夹,加密,然后发送出去,事实上,这说实话非常聪明,因为当你在看电影的时候,对吧,你会盯着屏幕两个小时,不会去碰电脑 [02:51:20 → 02:51:48]
有时这很正常,因为是高清视频,你的风扇会转起来,CPU使用率会很高,因为你在用VLC,对吧,这很正常。但问题是,你看不到的是,实际上那是一个被CIA使用的VLC定制版本。我们也有过完全相同的问题。中国黑客针对印度用户导致VLC在印度被禁,直到我不得不在印度法院与印度政府抗争以解禁VLC。他们并没有用VLC本身,只是拿走了那个DLL 因为我们正确地签了名,然后他们用那个DLL去做另一个程序,所以你有VLCXC [02:51:48 → 02:52:23]
他调用了力补VLC 但实际上是调用的一个假的,他们用这个来进行攻击 [02:52:23 → 02:52:28]
发言人03: 实际上我们没什么办法来阻止这类攻击,是的,而且我觉得人们应该,对于所有开源软件,所有软件来说,人们应该注意他们下载东西的来源,是的,因为那意味着,他们不是从我们网站下载的,搜索引擎帮到你们了,不,没有,只是澄清一下,因为你懂的,你可以防止人们通过操纵SEO让自己的链接排到前面。 [02:52:28 → 02:52:50]
发言人02: 绝对没有,对吧?我们有一个大问题,十多年来在德国有一个假的VLC版本,已经被举报了12年,但谷歌基本上决定不采取行动。他们知道里面有什么,但二进制文件太大,他们的病毒分析器分析不了,所以如果你在德国你可以去一个网站,那是假的VLC带一个自定义安装器, 而且在德国很流行,因为他们的网站是德语的,而且谷歌提到,它排在VideoLand之前,最奇怪的是,它在你的机器上三周什么都不做,因为那是他们做检测的方式,三周后有一个小程序 [02:52:50 → 02:53:24]
是一个服务同时安装的,三周后唤醒,开始下载间谍软件和广告软件,谷歌知道这件事,他们决定什么都不做,那些人在德国用黑暗SCO来做这个,在某个时候这非常有害,对吧,因为他们下载的东西之一 [02:53:24 → 02:53:39]
发言人03: 实际上是在你的机器里,替换你的广告,对吧,这是实际上出奇的有效,不管是谁在做推特和X的骗局,我会收到关于你的X账户被黑的邮件,不管他们怎么措辞,都让我至少点开了邮件,虽然没去点连接,然后你会想,天啊他们在心理学上试图骗你,他们真是很厉害,这就是VLC的安全理由,对吧,你收到一封邮件说,有一个安全版本VLC的更新,现在赶紧更新,因为它可能黑掉你的电脑 [02:53:39 → 02:54:06]
发言人02: 你去了一个看起来不错的网站,然后你下载了一个新的VLC版本,太好了,你不知道,一个月后你被黑了,你根本不知道,自己成了僵尸网络的一部分,对 [02:54:06 → 02:54:19]
发言人03: 所以确保你下载东西的地方是合法的,免得成为僵尸网络的一部分,说到这个,你提到过VLC的沙盒化石,你在做的事情,而且实际上很有挑战性,为什么它重要,为什么呢 [02:54:19 → 02:54:32]
发言人02: VLC是一个核心,有大约500个插件,对吧,其中之一就是FMPEG 但我们还支持很多其他格式,我们支持新的协议,支持新的滤镜,支持怪异的架构,在这个VLC版本中,你有模块会调用你的驱动,对吧,主要是硬件解码器,会调用你的Intel NVIDIA MD驱动,还有调用FFMP 对吧,它们可能会有安全问题,在着色器里可能有安全问题,在VLC FM PEG里,可能有安全问题,会导致崩溃,问题是你运行VLC 就像运行其他程序,比如Adobe一样,对吧 [02:54:32 → 02:55:07]
你在机器上运行它,它就能访问你所有文档,所以想法是确保你做沙盒化,这样我们可以保护自己,因为在VLC进程里运行的一些代码,甚至不是我们的,要么是开源项目,我们整合进VLC的其他项目,要么是你的GPU驱动,或者是别人提供的东西,所以当我们崩溃时,我们不想让人们做坏事,对吧,因为一种常见的攻击方式,就是让程序崩溃,经常用在网络浏览器上,经常用在PDF文件上,对多媒体较少,但可能发生,当你崩溃时,你在那个人的机器上启动一些东西 [02:55:07 → 02:55:42]
可能是勒索软件,可能是僵尸网络,对吧,所以桌面应用的安全很重要,移动端有点不同,因为大多数移动应用,运行在自己的沙盒里,但对于VLC 我们可以把它放进一个沙盒里,但问题是我们需要访问很多东西,基本上我们会有所有权限,对吧,如果你有一个沙盒,然后又到处开动,那就违背了初衷,对吧,所以我们正在尝试做的,而且我们正在做的是,把VLC拆分成几个进程,一个是解码,一个是解附用,一个是滤镜,所有这些都运行在自己的沙盒里 [02:55:42 → 02:56:16]
这样如果VLC的一部分崩溃,就像Chrome某个标签页崩溃一样,对吧,它崩溃了,但不会摧毁整个程序,这就是我们正在尝试做的,而且这很难,因为这个沙盒需要支撑,每秒千兆比特的内存拷贝,现在它不是一个五兆或十兆的网站,我们说的是每秒几百兆字节,所以这是为什么它很有挑战性,这是我们正在研究的一个课题,为了有一个安全的多媒体播放器 [02:56:16 → 02:56:44]
发言人03: 这就是当数百万人在使用你时,你必须考虑的所有事情,你曾经提到过所有VLC的不同功能,当有那么多人用它时,有人会用每一个功能,而且他们会告诉你 VLC里有个功能叫拼图滤镜 [02:56:44 → 02:56:58]
发言人02: 所以你点击拼图滤镜,它就把你的视频变成一幅拼图,你可以点击并移动拼图块,对吧,对,当你在看法国电影的时候,这非常非常有用,对吧,你觉得无聊,因为电影很长,或者三角链,对吧,我们已经看过太多了,对吧,但是你需要看,因为有人你妻子,或者叫你看的,或者你男朋友叫你看的,对吧,对,所以你就在看,对吧,对,你可以点击移动拼图快,对,这绝对没用,对吧,谁在乎这个,最初这是一个,在法国南部高中,教数学的老师做的,用来教他的学生基础曲线,这是每个人,都应该知道的东西,对吧 [02:56:58 → 02:57:32]
这个功能非常有用,但那个调用是完全干净的,所以它被合并进了VLC 时间是在2010年,五年后我收到一封邮件,对方说你好JB 我对VLC有个问题,那个拼图太简单了,我当时心想什么,确实拼图在界面里默认最大,直到16x16 也就是256块碎片,他说不好意思,我特别喜欢电影里的拼图,这个实在太简单了,所以现在你还能在网上,看到我留下的一条评论,是JB改了设置,把尺寸改成了256x256 厉害 [02:57:32 → 02:58:04]
发言人03: 我想说的是,有太多的功能了,虽然用的人少,但就是有人需要,比如还有一种在命令行下,无界面观看VLC电影的方式,我也看到能用那种方式,用ASCII字符画画 [02:58:04 → 02:58:18]
发言人02: 这有用吗,非常有用,想象一下,你在调试一个多波网络,非常复杂的网络协议站,你可以通过SSH连上所有路由器,然后在上面跑无界面的VLC 你只要看画面是不是全黑,或者是不是全绿就能判断了,对吧,很厉害,人们没意识到VLC里有那么多有用的功能,而且他们都有用户,因为当你有商业用户时,总会有人用到每一个功能,我想稍微深入聊一聊 [02:58:18 → 02:58:44]
发言人03: 下载文件离线观看和流媒体播放之间的区别,流媒体的复杂性,它的挑战有哪些,我们能讲讲流媒体传输到底需要些什么吗,因为我们之前一直在谈边界码器,我感觉那更多是假设不涉及网络通信的边界码,你能不能再详细说说,涉及网络传输时需要做什么,是的,但相比我们刚才聊的那些,其实并没有看起来那么复杂 [02:58:44 → 02:59:09]
发言人02: 尤其是最复杂的部分,不是流媒体服务本身,而是以前通过卫星广播的方式,因为在大多数现代广播服务里,你可以暂停可以跳转,但当你做实时流传输,不管是卫星广播,还是流媒体直播,那就困难多了,因为你必须实时编码,当信号上卫星时,链路的带宽是固定的,你连一秒的突发流量都不能有,因为总带宽里没有那个空间 [02:59:09 → 02:59:35]
发言人01: 然而不同类型的挑战也很有意思,但我觉得他们没有上世纪90年代末,到21世纪初,卫星广播和流传书,面临的那些挑战那么复杂,他们是不同性质的挑战,有些属于控制系统层面的挑战,而另一些则更偏数学,我想这就是区别,在流媒体领域,我们用的是自适应流,真正的难点,其实主要不是视频问题 [02:59:35 → 03:00:00]
发言人02: 而是CDN的问题,可能同时有太多人看同一个内容,导致网络拥塞,你的播放器,没办法足够快地下载数据,来流畅播放,所以本地播放器 [03:00:00 → 03:00:12]
所以本地播放器 [03:00:10]
发言人02: 所以本地播放器 [03:00:10 → 03:00:12]
发言人03: 就会去读一个更低分辨率的版本,有些算法非常聪明,但说实话,大部分做法其实挺基础的,甚至即便在缓冲方面也很基础,是的,你开始下载一个片段,我们叫它分片 [03:00:12 → 03:00:25]
发言人02: 然后你计时,如果下载这个分片的时间,超过了50% 那你就降级,难点更多在于,什么时候该升回更高的带宽和质量,但这个做起来也并不复杂,当你编码时 [03:00:25 → 03:00:38]
发言人03: 你会同时编码七种分辨率,然后设定相应的码率,要让编码器输出一致的码率,是现在的难点,但已经没有以前那么严格了,可能YouTube还得琢磨人的心理因素,比如当画面码率很低的时候,用户会有多烦躁,以及连接变好后,应该等多久再提升码率,因为可能马率来回变化,本身就会影响人的心理感受,对吧,其实更有意思的是音频 [03:00:38 → 03:01:04]
发言人01: 确实,当音频从完整的AAC切换到那种,用了平代复制技术的压缩版AAC时,你能察觉到音质变薄了,那种上下的波动很刺耳,而视频这边就平滑的多,不太容易注意到,真正的问题是音频,你绝对能感觉到,它从一个音频配置,切换到了另一个,而且我对人们容忍跳音之类的,音频毛刺的接受度很惊讶,我很吃惊,连不是视频工程师的普通人,都能容忍看30帧的体育比赛 [03:01:04 → 03:01:37]
其实应该用60帧才对,这个世界对视频的容忍度要高得多,但对音频敏感的人来说,反馈机制是很即时的,那种变化,如果你听到一个毛刺,你能立刻意识到,是的,我完全能理解,我担心的是随着我听音越来越细 [03:01:37 → 03:01:56]
发言人03: 我会注意到每一个微小的细节,变得过度纠结,而普通人呢,往往能模糊地去消费内容,他们能忽视那些不完美,但是,但当你把各种环节组合起来,比如一个体育赛事 [03:01:56 → 03:02:09]
发言人02: 信号可能先上卫星,再送到中心地点编码,然后你需要实时地,对所有分辨率进行编码,根本没时间做质量检查,就得直接推到CDN上,可能还要加DIN版权保护,还要覆盖一大堆不同的设备,这种情况下确实就很复杂了,但是像你在网页浏览器里,或者用各种电视设备,那些有明确基顶核,有线核,你能够端到端控制的,那又是另一回事了,所以这是个挑战,但我认为网络传输这部分,当你能够接受10秒20秒的延迟时 [03:02:09 → 03:02:44]
并不算太难,说到网络和延迟 [03:02:44 → 03:02:47]
发言人03: 你之前提到的新项目叫Cyber 目标是超级延迟,你说过每一毫秒都至关重要,你们把这个用在远程控制机器上,比如机器人,无人机,电脑,能给我讲讲吗 [03:02:47 → 03:03:00]
发言人02: 当然我们先从过去说起,以前我们用FFMPEG来编码文件,后来我们用FMPEG和VLC来做流媒体编码,接着我们需要不断降低延迟,问题是我们能降到多低呢,这个问题很重要,因为有很多场景要求极快响应,尤其是在有反馈有交互的时候,我们不再只是被动观看,而是在主动控制,这和之前所有工作的最大区别就在于,我需要通过视频来获取现实世界中,正在发生的事情的反馈,不管是无人机的飞行,还是远程控制人形机器人 [03:03:00 → 03:03:35]
还是操控火星车,或者玩云游戏,这也是我上一份工作的内容,我做过一家云游戏初创公司的CTO 我是那家云游戏初创公司的CTO 那真是一个非常有意思的课题,因为它把你对网络的利用推到了极限,这使你关心的不是画质,就像我们之前聊的H264那样,而是延迟,因为在控制一辆车的时候,每一毫秒都有意义,你们用过VMW的车吧,当VMW车失灵的时候,哪怕只是1%的情况,就会有人在远端进行遥控接管 [03:03:35 → 03:04:10]
这正是我们现在在做的事情,我们打造的是一个SDK平台 [03:04:10 → 03:04:14]
发言人03: 用来实现机器的端到端控制,这个在机器人领域的很多不同场景下都出现过,显然远程操作,遥操作,正变得越来越重要,也包括用于通过机器学习,训练机器人,是的 [03:04:14 → 03:04:26]
发言人02: 而且我们的做法和别家有所不同,我们只用单一socket 一个连接,用的是基于UDP的Quest协议,这很有意思,因为它专为低延迟,而设没有TCP的线头阻塞问题,也没有HTTP的线头阻塞问题,而且默认就是加密的,但我们在同一根线上传输多个流,比如音频流,视频流,同时也传输控制指令,比如鼠标,键盘游戏手柄等,同时我们还要保持并发和同步,因为人们往往没意识到,所有的时钟其实都会有飘移,当你控制机器人时 [03:04:26 → 03:05:01]
机器人可能有两个,五个,甚至十个摄像头,还有大量传感器 GPS等等,如果你要正确训练你的机器人AI模型,就需要所有这些数据保持时间同步,我们在VLC和广播实时传输中学到的,尤其是对传输流GS的深入理解,就是必须处理时钟飘移,所以当我录制机器人的流时,我能确保回放时的结果是可预测的,这样一来,当你为AI模型做录制和训练时,你需要保证每次基于这些数据,重新训练数据都能保持一致,而时钟确实会飘移 [03:05:01 → 03:05:35]
现有的方案只适用于单个摄像头,一旦面对五个或六个摄像头,情况就复杂多了,所以你是要确保视觉快照,完全吻合时机发生的时间,完全正确,而且如果你要控制机器人,当我在机器人上执行操作时,我必须确保它真的是在那个精确的时间点发生的,所以我们有一个重新打时间戳的机制,专门用来处理时钟飘移,这是Kyber用来控制机器人的一个用力,我还想到远程无人机,不管是国防还是非国防领域,远程汽车,远程潜艇 [03:05:35 → 03:06:09]
远程手术等等,很多地方专家没法亲临现场,因为太危险,或者成本太高,所以我们要让人们能够远程操控身边的机器 Kyber的目标就是让距离消失,因为它是技能的投射,或者说力量的投射,想象一下,你看过MetaRiband和其他公司的演示,对吧,你必须在那里进行流逝传输,因为你不会在本地跑任何东西,你需要云端的GPU算力,在手机上把画面推出来,所有这些用力的核心,不是追求极低的延迟,而是视频的实时延迟 [03:06:09 → 03:06:43]
这意味着我们必须跟编码器较劲,让编码器能在4毫秒内,完成一帧的编码 Kiran和他的公司,也在做这种低延迟方案,因为你需要最大限度的,优化本地延迟,包括解码器编码器等等,这部分时间,最终都会叠加到你的网络延迟上,这还不只是低延迟的问题,还有可靠性,我们做了一些很聪明的处理,比如前向纠错,也就是你会多传一点数据,多传几个百分点,在过度传输的时候,你可以容忍丢掉一些数据包,因为所有这些要在互联网上跑很远,本身就极其困难 [03:06:43 → 03:07:17]
如果你想要求所有数据包都送达,又会新增大量延迟,这和你不要延迟的目标是冲突的,我们的做法是,发送的数据量允许客户端在出现丢包时自行重建,几周前我们在拉斯维加斯的CS上做了一个演示,我们有一辆完全3D打印的探测车,很简单就是一辆带伸缩臂的小车,实际上是从法国远程控制的,视频通过一个网络摄像头,和一个很小的服务器传输,基本就是一块小PCB板在跑 [03:07:17 → 03:07:51]
把画面发给地球另一端的人,所以用力太多了,你还可以想象,由AI来控制许多无人机等等,技术要求上,我们在视频方面必须极其出色,网络方面也必须极其出色,我们要在乎网络编码时间,解码时间中的每一毫秒 [03:07:51 → 03:08:07]
发言人03: 而且需要极其底层的集成,所以你要把所有东西都同步起来,那么你们能做到什么样的延迟,你刚才TSC的时候目标是多少,我的目标是4毫秒全链路延迟,什么叫全链路延迟 [03:08:07 → 03:08:21]
发言人02: 很简单,你有一台运行程序的电脑,比如跑着一个视频游戏,或者以机器人为例,画面要通过网络复制过来,如果你用一台每秒1000帧的相机去拍,你希望拍下的画面在4毫秒内到达 [03:08:21 → 03:08:34]
发言人03: 4毫秒就相当于240赫兹,还没做到吧,目前为止,我们做到了从Windows到Windows或者Windows到Mac 7毫秒的延迟。 [03:08:34 → 03:08:43]
发言人02: 如果看时间分配,大约3.5毫秒在英伟达硬件编码器里,大约2毫秒在英特尔解码器里。也就是说,编码器加解码器就已经6毫秒了。 [03:08:44 → 03:08:53]
发言人03: 要再往下降,我们得要么用别的编解码器类型,要么用更快的编码器,不过4毫秒会是目标,这相当疯狂。太疯狂了,但我喜欢这个,我觉得还没人真正达到过吧。那个速度确实快 [03:08:53 → 03:09:07]
发言人02: 你可以用定制硬件DI专业设备做到,但我希望它能在互联网上工作,能用在任何机器人上,不管是里面装着小Jetson Nano的,还是什么150nm的设备,因为将来会有几百万台机器人,无人机无非就是陆地上的,空中飞的或者水里游的机器人,本质上就是你控制的机器,你要么需要远程操控它们,要么当一切完全自主之后,你要远程观察它们,看看发生了什么,到那时由AI模型来观察,模型会说一切正常,当它发现不正常时,就会提醒出问题了 [03:09:07 → 03:09:40]
然后就由操作员来接管,这从根本上关乎安全,当你的或者我的那个人形机器人,在照看祖母时,我要确保万无一失,我不想看到那种可怕的场景,机器人变得危险,或者我开车的时候,我希望车该停就停,需要的时候有人能及时接管,所以关于实时的场景太多了 [03:09:40 → 03:10:00]
发言人03: Kyber的目标就是让机器的,实时控制,变得没有距离感,这真的太不可思议了,而且我们刚才讨论的,很多技术和想法,跟你正在做的事,也是一脉相承的,跟你正在做的事,对我来说 [03:10:00 → 03:10:14]
发言人02: 这极其有挑战,因为我可以坦白讲,在视频方面,我算做得还行,但在网络方面,我还要学太多东西了,比如,用C控制协议,实时码率,自适应等等,但这也很有意思,所以我创建了这个项目 [03:10:14 → 03:10:27]
发言人03: 我们当然也在美国融资,但它是开源的,这很重要,就像我们之前没强调的那样,开本上的所有东西都是开源的,那你们怎么赚钱,我们采用的是双重许可,商业许可和GPL [03:10:27 → 03:10:39]
发言人02: 你还记得你之前聊过关于许可证的事吗,简单说,如果你想在你的产品里用开本,你的整个产品就必须开源,如果你想用这项很棒的技术,但不愿意开源,那你就得付费拿到商业许可,这样一来,小团队爱好者,很小的开发者,就可以直接拿来用,他们做开源的东西,这很酷,而如果你是一家大公司,你会获得技术支持,全部知识产权,合适的修改权等等,所以这种模式真的很好,而且我自己也在造机器人,我超爱这个,比如我们那辆探测车,就是3D打印的 [03:10:39 → 03:11:13]
我们还在完成一个演示,带真正的机翼,那种完全3D打印的无人机翼,我们还在尝试,做一艘3D打印的帆船,当然我们也会碰一些人形机器人,他们不会是很厉害的机器人,那也不是我们的主业,但我们的存在,就是让每个人都能把机器人做得很酷,你找对人了 [03:11:13 → 03:11:32]
发言人03: 我超爱机器人,楼上就有一堆,而且远程操控会变得极其重要,尤其当全世界机器人数量大规模增长的时候,这是百分之百确定的,我们来聊聊多媒体的未来 FFM Pack VLC 但我们刚才没怎么提到AVR 能不能先简单说说什么是AVR 对它有什么期望,还有H265 H266 [03:11:32 → 03:11:56]
发言人02: AVE是由开放媒体联盟AOM开发的那个编解码器, 联盟里有Google,Netflix,Amazon,Apple,还有我们VideoLam, 大家一起想做一个棉板水而且非常优秀的编解码器, 现在它正在被部署, 但实际上这个编解码器在18年就已经完成了。一个编解码器通常要6年才会被大规模使用, AV2是下一代,比AVE好了差不多30%, [03:11:56 → 03:12:22]
发言人03: 也就是说,如果你想保持同样的画质, 带宽可以比AVE再减少30% 那这跟DAV1D和AVE2的关系是什么,我们会做一个DAV1D2嘛,我把它叫DAV1D [03:12:22 → 03:12:34]
发言人02: 因为在法语里2也是D开头,好了,而且你得知道DAV1D其实是一个,我们所说的D归缩写,对吧,因为它的意思是DDAV1D 是AVE的解码器,对吧,所以不错,不错 [03:12:34 → 03:12:46]
发言人03: 我完全没想到这一点,而且大家应该知道 DAV1D这个拼写里带了个数字1 对,那么所以DAV1D2 它肯定会拼写里带个R 拜托了,打住,它应该会叫Day AV2D吧,不好意思,我不确定该怎么读,而且我们之前在CS上,展示过VLC运行AVR的第一个demo 你能给我解释一下AVR的规格,以及编码和解码吗,当然,规格就是那个解释编解码器 [03:12:46 → 03:13:13]
发言人02: 应该怎么工作的文档,对吧,那指的就是AVR吧,对,就是AVR就像HR64一样,对,然后你会有编码器,目前的编码器叫AVM 未来可能还会有其他编码器,可能有一个叫SVT AVR的,那些就是编码器,就像X264是H264的一个编码器 X265是H265编解码器的编码器,然后A1的解码器是David A2的解码器是David2 H264的解码器在FF MPEG里是FFH264 FAC的解码器在MP里面是HAVC [03:13:13 → 03:13:45]
然后从MPEG那边有一个下一代编解码器,在H264 H265之后 [03:13:45 → 03:13:51]
发言人03: 有一个叫H266 也叫做VVC 所以HRFC就是H265 VVC是H266 为什么H266超级性感,好很多,经常有人问的是,为什么会有两个名字,因为大多数时候,这是ISO那帮人,和国际电信联盟ITU 共同合作的结果,这是两个监管机构,一个是私人实体,另一个是联合国,哪个是私人的 ISO是私人的,理论上H264是MPAC-4PAR-10 [03:13:51 → 03:14:18]
发言人01: H264-AVC 这就是它的全名,不错,所以就是ISO名称,和ITU名称的拼接,没错,虽然它们是合作的关系,但这背后有政治和历史原因,你知道吧,懂了,对于HHABC 它就是ITU H265 也就是HHABC 明白了,然后还有H266 也叫做VVC 关于这种改进 [03:14:18 → 03:14:43]
发言人03: 能说一个高层次的总结吗,每一代大概提升30% 这是最好的总结,这对于AV系列和H264 265 266这些产品都成立吗,所以那些听我们节目的专业人士 [03:14:43 → 03:14:57]
发言人02: 听了会想杀了我们,因为他们会说,不对是35% 5%和50% 但从整体上看,你需要知道 HIVC比H264好30% 而H266又比HIVC好30% 因为有很多不同的情况 [03:14:57 → 03:15:13]
因为有很多不同的情况 [03:15:11]
发言人02: 因为有很多不同的情况,和很多的使用场景,比如有些场景,特别是屏幕录制,增益是巨大的,因为你有了针对那个用途的正确工具等等,对于特定类型的视频,新一代编码能带来70%或80%的增益,对吧,不过以前编码格式要多得多,但现在用于传输的主要编码格式是 [03:15:11 → 03:15:33]
发言人03: H264 H265 H266这些,另一类是AV1和AV2 我猜主要区别在于编码成本,是的,还有专利许可费,这也是为什么你会看到AV系列的编码器 [03:15:33 → 03:15:46]
发言人02: 因为他们试图做到免专利费,也就是尽可能不产生专利成本,因为你需要知道的是,而且我们之前没有谈到这一点,多媒体是所谓的专利雷区,有两个地方专利最多,一切与3G 4G 5G 摄频和多媒体相关的东西,因为它非常数学化,而且能获得巨大的增益等等,所以谷歌Meta和Netflix 想要一种免专利费的东西 [03:15:46 → 03:16:11]
发言人01: 有人说他们在外面有专利,但那些都是边缘专利对吧,所以基本上可以认为它是免专利费的,或者我们应该说,在AV1 AV2的标准化过程中,专利检查是作为一部分来做的,而在MPEG的世界里,专利甚至都不讨论,专利是完全离题的,你能给我讲讲专利这一块吗,通常来说 MPEG制定一种格式对吧,然后大家就过来说 [03:16:11 → 03:16:36]
发言人03: 我对这个格式拥有这些那些专利,他们通常会成立一个叫做 MPEG-LAD许可联盟,你把所有专利放进去,然后要求每个使用这个格式的人付费,等等,你能详细解释一下吗,拥有一个编码器的专利意味着什么,为什么会有那么多专利,想象一下,我做一件事,我不使用正方形的快,而是使用长方形,对吧,所以每个想法没错,都有人去申请专利,是的 [03:16:36 → 03:17:04]
发言人01: 天哪,是的,天哪,那得有多少律师,我是说,这养活了很多人,对吧,最大的问题还不是下面这个,因为HR64的时代,专利可以说还算合理,但是里面有太多钱了 [03:17:04 → 03:17:17]
发言人02: 以至于到了HAVC的时候,有大量东西被塞进了规范里,这些东西在99.9%的情况下都没用,只是为了能让人加上专利,所以对于HAEBC的许可 [03:17:17 → 03:17:30]
发言人01: 有MPAC AA还有另一个专利池,叫做HAEH Advance 而且我记得诺基亚是在池子外面的,池子外面,对有几个是在外面的,还有其他一些 [03:17:30 → 03:17:43]
发言人02: 所以当时几乎不可能拿到许可,对吧,而且我想几个月前,惠普决定在他们的Windows笔记本电脑中,移除对HAVC的支持,因为那些专利成本在增加,而且到了一个程度,专利费没有上限,所以对于YouTube或Netflix来说,我们可能是在谈论,每年数亿美元的专利许可费,他们就想,好吧,每年花一亿美元,我还不如自己搞一个编码器,他们也确实这么做了,这就是为什么有了开放媒体联盟,也就是我们所在的联盟,它的一部分工作就是创建了AV1 创建了AV2 [03:17:43 → 03:18:16]
我们还创建了音频编码器,是的,所以主要区别就在这里,而且因为你需要绕过专利,或者去做那些没有专利的事情,很多地方都不一样对吧,那些在30年前,安排个两里做的基础东西,专利已经过期了,但比如还有像黄金针,四针,或者各种不同形式的这些 [03:18:16 → 03:18:36]
发言人01: 这些是受专利保护的理念,对,就是那种,我不信它不是黄油的感觉,我不信它不是避针,我的意思是,它就是那么一回事,从某些方面来说,它就像,所以它是避针的一种不同变体,是的,这只是为了避开这类问题,所以你需要双重的创造力,对吧,一方面是提高效率的创造力,另一方面是确保,不侵犯现有专利的创造力 [03:18:36 → 03:19:02]
发言人03: 比如说VVC拥有HIVC的所有专利,再加上一些新的,对吧,而AVE则是尽可能免版税 FMPEG和VLC需要多大程度上,去考虑这些问题,不需要 [03:19:02 → 03:19:14]
发言人02: VLC之所以在法国原因之一,就是法国拒绝软件专利,所以这些专利大部分在法国是违法的,因为我曾经算过,如果我要为VLC支付所有许可费,每个用户我得付超过200欧元 [03:19:14 → 03:19:28]
发言人03: 美元也差不多,但这些专利在欧洲大都是无效的,因为它们被称为,基本上就是数学专利或想法专利,在欧洲是无效的,让我从高层次出于好奇问一下,网上X平台,推特上那些段子,还有我自己在欧洲的朋友们,普遍感觉是,欧洲对创业不友好,过度监管,态度惯料主义等等,有没有什么积极方面,可以说欧洲未来,还有创业的希望吗 [03:19:28 → 03:19:54]
发言人01: 从科技角度看,欧洲是不是已经完了,看看我们俩就知道了,对吧,值得注意的是,这个播客上,有两个来自欧洲大陆的人,在谈论视频,可以说这个圈子里 [03:19:54 → 03:20:07]
发言人02: 欧洲人的分量很重,你可能还没看到的是,欧洲正出现新一代的创业者,尤其是在法国,英国已经做了很久了,因为那里的商业思维,更偏向安格鲁萨克逊模式,但是特别是法国发生的事情,当然有时候所谓法国科技,有点炒作过度,但如今进入市场的人,大多数都想创办初创公司 15年前可不是这样,那时人人都想进大公司工作,因为在法国,如果你在20年前或15年前创业失败,把公司搞垮了,这在初创公司里很常见对吧,你是不允许再创办新公司的,那种污名很重 [03:20:07 → 03:20:42]
但现在这些都消失了,现在法国在人工智能等领域,有太多事情在发生等等,所以确实存在过度监管的问题,我知道这情况,我自己就是创业者,但这也带来了一些好处,我的意思是 [03:20:42 → 03:20:57]
发言人03: 有没有一些让人束手束脚的方面,你知道我想到一个人的例子,我跟他关系变得挺近的 Papaduroff他曾经直接被法国政府指责,因为他的那个平台上托管的内容,我可以想象同样的事情,基本上就当成一个例子 VLC因为人们观看的视频类型,而被指责,甚至被起诉,对吧,就像我们也遇到过麻烦,我们,我的意思是,这正是人们担心的压力所在,因为当你正全身关注于,不你根本不会去想那些,而且这没问题对吧 [03:20:57 → 03:21:31]
但如果他们找上门来,如果他们出现了呢 VLC根本没有办公室,我的意思是,这就是Pav的遭遇,他们逮捕了他,对吧,就因为他平台上的某些视频,或特定内容,没错,我没有任何平台,一切都在客户端,是的,但他们还是可以逮捕你,以什么理由,我又没有分享任何东西,我没有内容不经过我的东西,但问题是律师费,这才是麻烦所在,那倒是,就是文书工作,所以实际上,如果你有无限多的钱,你很容易就能赢,因为你站在正确的一方,但问题是 [03:21:31 → 03:22:05]
他们会在一定程度上,用文书工作来拖垮你,这就是官僚主义的坏处,通过文书,通过流程,是的,你知道,就是那种卡夫卡式的困境,你得明白 [03:22:05 → 03:22:16]
发言人02: 比如在法国或者欧洲,大部分地方,回应法院命令,不会让你破产,不像在美国,那里真的可能让你倾家荡产,法律系统的运作方式是,我每周都会收到律师函,但我可以告诉你 [03:22:16 → 03:22:29]
发言人03: VLC这边的律师费,每年不到一万美元,所以真没什么可怕的,我是说,类似的情况,情报机构有没有试过跟你说,能不能在VLC里留个后门,有,两家机构,你是怎么回应的,我说不,而且我的措辞可没那么客气,我懂你,你基本上就是说绝对不行,如果我们不得不损害自己的软件,那我们就会直接把它关掉,这一点是非常明确的,而且,你说的损害是指什么,比如允许政府按个后门 VLC的代码,没有一行是我们不控制的,而我们编译VLC的方式 [03:22:29 → 03:23:04]
你可能会觉得我完全是个偏执狂,我们在离线的机器上编译 [03:23:04 → 03:23:08]
发言人02: 而且是从编译器本身开始的,一切全都在从未连过往的机器上完成,我们的签名是双重签名,尤其是因为我们亲身经历过,并且我们相信有一个非西方世界的政府机构,曾试图把伪造的二进制文件,推送到我们自己的服务器上,这把我们吓得够呛,而Videoland是开源的,你怎么消灭它呢?我可以搬到比如马尔他, 或者开曼群岛, 换个域名重新开始, 对吧?VLC是一个工具, 是一个帮人们做事的工具, 我们不是一个平台。至于专利, 不好意思, [03:23:08 → 03:23:43]
大多数那些专利, 你根本不应该给数学和读量横办法拿专利, 这本身就是错的。VLC会不会根据视频内容来审查, 它能播放什么?不,永远不会, 我们从不这么做, 因为VLC是完全离线的, 不跟任何服务器通信, 我们完全不知道,你拿着软件在做什么,所以没有任何政府能跑来说,比如法国政府过来说,我们不想觉得动漫对社会有害,我们不想有任何动漫,不他们做不到,他们还试过说,我想知道某个人是不是看过那类视频,我们的回答是,不知道 [03:23:43 → 03:24:15]
发言人01: 所以监视也做不到,因为我们唯一的基础设施,就是下载VLC里面,没有任何要测,对吧,因为你们这个国际化特性,这会非常困难,你们几乎不可能把那种代码加进去,因为团队里会有英国的人,德国的人,还有美国的人,他们都是videoland的一份子,他们会看到,所以想偷偷加进去是极其困难的,我们唯一能做,也确实发生过的事情是,美国有些警察找到我们 [03:24:15 → 03:24:42]
发言人02: 说有个谋杀案,文件损坏了,或者那个版本的VLC放不了,问我们能不能帮忙,我们从来都接触不到视频,这就像一个普通的技术支持请求,对了,这就是关于播放文件的问题,是的,还有我记得在阿富汗战争期间,我收到一封来自某个军人的邮件,我不记得军衔了,就是说最新版VLC有个大问题,不能正确播放我们RTSP服务器上的文件,那里面有所有的电影,他说VLC对地面部队的士气非常重要,因为到了晚上估计会很无聊 [03:24:42 → 03:25:15]
所以他们那边存了一堆视频和电影可以看,然后呢,当然是我做了一次更新,结果把RTSP的支持搞坏了一部分,所以我专门给他们单独做了一个版本,因为那真的很重要,而且由于VLC完全开源,我想它应该是被允许装在美军笔记本上的,我猜美军里有人实际看过代码,然后说行这没问题,而且我们记录整个处理流程的方式也是没问题的,所以我们和当局合作的唯一方式,就是帮他们做技术支持,这真的很棒,真是个很棒的故事,是啊,我们看不到人们怎样使用VLC的任何情况 [03:25:15 → 03:25:49]
这一点是很坚定的,你会因此感到压力吗,首先有几百万人在用它,其次军队也在用,有时可能还会有来自政府的压力,是的,但这却是一个很小的团队,对吧 VLC核心贡献者有多少人 6到8个,而所有法律责任都在我身上,一切法律相关的事都压在我这,你问我是不是不紧张,我以前确实为此焦虑过很多,但我们是在为了更多人的更大利益,做我们力所能及的事,我们把一些极其复杂的技术,变得人人都能用,我们做的是工具 [03:25:49 → 03:26:23]
而任何工具都会被用来做伟大的事,也会被用来做坏事对吧,你不能去责怪工具本身,我觉得这对我们非常重要,我以前压力非常大,现在不了,你问我禅心的秘诀是什么,在今天我们聊到的每一个紧张话题里,你都显得特别淡定,那么这种禅意的源头是什么,我有一种方法,总是去想那个最坏的情况会是什么,就像下棋一样,到最后我死了吗,是还是否,我不断地这样问自己,这也是我做创业公司的方式,我来是为了做出很棒的东西,最坏的情况是什么,公司破产那又怎样,公司有生就有死,这没什么 [03:26:23 → 03:26:58]
所以我的道德准则是,到最后我会死吗,如果我在做的事情,不会伤害到别人,那么答案就是不,那就没什么大不了了,比如一些律师会不高兴,他们能怎样,把Videoland的钱全拿走,哇他们能拿到五万美元,太棒了,他们拿那点钱能干嘛,原代码在外面,这是无法被阻止的,也因为我们做的是好事,是为每个人而做的,这真没好Karen 你提到有一个活跃的,归档保存社区,我觉得这非常迷人,你写到,他们预算紧张,但他们看到了FFMPEG 作为罗塞塔十倍的极端重要性 [03:26:58 → 03:27:32]
发言人01: 这样一千年后,多媒体还能被播放,我觉得这个视角很美,把FFMPEG VLC 看作保存视觉知识的工具,没错,开源多媒体领域,最酷的社区之一,主要由一个叫 Dave Rice的人领导,我要特别提一下他,我记得他是来自,纽约城市大学,这个归档社区,做了非常多的事情,他们看重开源,一是因为他们确实预算有限,二是因为他们认识到,给视频做归档,对世界很重要,但能够重新播放这些视频,是个大问题 [03:27:32 → 03:28:06]
英国有个著名的例子,叫新末日书项目,他们把大量资料,存档在BBC微信电脑上,结果10到15年之后,没人有合适的软件,来播放那些内容了,我记得大概是20年之后,才有人不得不去,逆向工程才恢复出来,那可是20年呢,想象一下,如果是1000年以后呢,我觉得FFM Pack 最棒的一点是,它是用C语言写的,而C语言最接近数学,很可能也是最接近,逻辑的一种语言,想想看 [03:28:06 → 03:28:41]
1000年后我们还有 C语言编译器呢,是的,我们有那些,已经存在了很久,且没怎么变化的语言,也有数学符号 C语言会成为像拉丁文那样的存在,是你从过去学来的东西,但在某些语境下,它仍然能归档社区真的很了不起,实际上他们资金非常有限,但他们资助了FFVE编码器的开发,那是一种无损编码器,归档社区特别害怕压缩这个过程,会丢失信息,他们这点很有道理 [03:28:41 → 03:29:14]
如果压缩的太厉害 [03:29:14 → 03:29:16]
可能会改变素材的观感,这里那里会出现细微的差别,所以他们非常关心,不仅是压缩的要好,还得是无损的,而且速度要快,于是他们和FFMPEG合作,开发了一套全新的编码器,专门为基于软件的快速编码设计,他们真的非常关心韧性,比如当他们把数据存在磁带,或其他硬盘上时,如果丢失了一些比特,他们需要能快速恢复,不能因为丢了一个比特,就让一整块数据都丢了,类似这样的考虑 [03:29:19 → 03:29:53]
所以这真是一群非常了不起的人,他们资助了FFMPEG中的GPU编码,让FFV1编码更快,这真的是在以一种可用的方式,保存世界上的多媒体遗产,世界上有很多出色的团队和贵档机构,都选择了FFMPEG和FFV1 作为他们的贵档方案 [03:29:53 → 03:30:17]
作为他们的贵档方案 [03:30:16]
发言人01: 作为他们的贵档方案,而且他们还能给我们提供,特别专业的建议,他们会解释,比如在20世纪50年代,彩色影像是用某种特定磁带,以某种方式做的,因此就会有这种特殊情况,需要你去处理,而这些知识,你在别的地方根本接触不到,你看,他们对视频的了解,真的是我们比不上的,每次我和一个叫David聊Dave Dave Rice 或者那个,英国的人,电影,每次都能学到新东西 [03:30:16 → 03:30:48]
发言人03: 我做视频已经20年了,他们尤其是在色彩,色度学和存储方面,这些其他方面,我是说他们对内容本身,对视频本身,有着非常非常深刻的理解,特别是当你考虑污损的时候,他们特别害怕,丢失掉某些本质的东西,在这个过程中,他们对自己要保存的东西,理解的非常透彻,而你在专注研究编码技术之类的时候 [03:30:48 → 03:31:15]
发言人02: 有时候可能根本没想到这一层,一旦你钻进胶片扫描仪的世界里,对吧,就是那些把胶片转成数字的东西,这个话题太庞大了,可能得再聊上五个小时的播客才行,对,就胶片这一块 [03:31:15 → 03:31:28]
发言人01: 而且有大量的胶片需要存档,胶片本身在变质,可能保存环境也不对,另外他们还会做的一件事是,因为这是开源的,他们会把自己的工作流程,分享给那些负担不起存档机构的国家,那些地方的存档工作,由志愿者完成,由那些去教学的人完成,你知道吗,在印度,他们会教孩子们,怎么用FFM派个命令,他们真的很了不起,他们真的是,我们想要实现的社区典范,和理念精髓,他们是一群特别棒的人 [03:31:28 → 03:32:01]
非常愿意参与到一个,更大的事业里,因为他们意识到,他们现在做的工作,在一千年后,会讲述很多很多事情,一千年后,我们可能会被AI生成的垃圾内容淹没,这些东西必须保留下来,一旦能知道,过去的生活到底是什么样的,是啊 [03:32:01 → 03:32:21]
发言人03: 感觉在21世纪,捕捉20世纪的历史非常关键,因为那像是一个转折点,我们从数据稀缺的时代,一下子进入了垃圾内容的海洋,对,垃圾的汪洋大海,而那个转折点 [03:32:21 → 03:32:35]
发言人01: 正是需要被妥善存档的,很重要,人们没有意识到,我们今天正在丢失堆积如山的影片,有大量30年代 40年代 50年代的东西,当时没人觉得有价值,还有录像带 70年代 80年代的,而且世界上没有足够的磁带投射,被来读取,所有的磁带,读完那些磁带,所以他们必须决定,哪些要存档,哪些要扔掉,这背后存在着巨大的道德风险,我想不出更好的说法了,因为这是人类历史的数字记录,而他们必须做选择,我造了个词 [03:32:35 → 03:33:09]
叫数字托管,可能不是很贴切,总之得确保全世界的人,都能用一种通用的格式,来访问这些信息,而不是只能用一个,已经不复存在的设备才能播放,而且现实的说,这就像是大海捞针,把所有那些影像都存档,然后随着时间的推移,从中发现我们原本不知道的宝藏,对角落里说不定就藏着什么,我们之前没注意到的东西,那些东西本来可能会被压缩掉,或者某个微小的细节突然被发现,而他们确保了无损 [03:33:09 → 03:33:43]
能数学上证明它是无损的,他们可以做各种权衡,比如如果出现比特翻转,哪怕只是一个比特翻转,我也能确保只丢失某一针的一部分,我们还可以做错误恢复,利用前面的针进行纠错,他们能做的花样多着呢,你觉得VLC和FFMPEG 一百年后还会存在吗 FFMPEG会的肯定会的 VLC嘛也许吧 [03:33:43 → 03:34:06]
发言人03: FFMPEG的未来是什么 VLC的未来又是什么,比如在未来五年十年二十年,五年十年的规划都容易,但问题是那之后呢,对问题是我们会不会发展到,全稀图这种东西对吧,对所以VLC和FMPEG 会扩展到,就是会扩展到各种东西,对多媒体,没错所以未来多媒体的概念,可能会变成抱歉我这话,有点非有点像嘻哈的那种发散,但你看如果有类似 Neuralink这种脑机接口出现 [03:34:06 → 03:34:38]
我们很可能就会去消费任何边界码器,任何我们大脑想通过脑机接口去消费的数据,没错,这是一种可能,当然还有虚拟现实,到那时你会有用于Neuralink的VLC [03:34:38 → 03:34:52]
发言人01: 而且你会有FFMPEG的输入格式,人脑,对,会有针对大脑的边界码器,没错,当然百分之百,当然会有的,用来压缩神经信息,今天其实已经有一些新的编解码器了,比如用于我们说的点云,对吧,或者体三维视频,对吧,对,还有很多关于RGBD的研究,就是深度编解码器,这对机器人和3D应用很有用,很棒,我们看到了3D元素压缩编解码器的回归,还有天文学的压缩 [03:34:52 → 03:35:27]
比如在VLC上,我们已经有了VR和XR版本 [03:35:27 → 03:35:30]
发言人02: 而且在网络方面,对吧,我们也在讨论网络空间,赛博空间,我们也会给那些算力不足的眼镜,比如Apple Vision或Quest 去做XR内容的流媒体传输,所以我们已经在做低延迟的3D XR互动流了,还有所谓的体三维视频和点云视频,所以这东西不会停步,而且没错,到某个时候,我们肯定会在VLC和FMPEG里处理这些数据,对吧,这很明显 [03:35:30 → 03:35:55]
发言人03: 所以这就是它发展的方向,社区是开放的,不是社区里的每个人都能看到这点,但就像Kiran和我,我们是创业者,我们知道方向在哪,我们看得见,对吧,所以我觉得FFMPEG内部,可能存在一种张力,就是,各位,我们做音视频真的非常擅长,为什么要扩张呢,我们就做自己,最擅长的事情不好吗,要回答这个问题,我们就得回答,多媒体的定义是什么,对吧,多媒体就是对人类 [03:35:55 → 03:36:22]
发言人02: 多种感官的几种,数据流的数字化呈现,而我们会去实现这个,对吧,想象一下,现在有一种方式,不需要麦克风,而是有一个气味传感器,还有气味的扩散器,它也会进入FFMPEG的范畴 [03:36:22 → 03:36:36]
发言人03: 你的那些管道,对没错,当然你的DMX设备,已经有了一个新的轨道类型,基本上就是气味对吧,而且你已经有了嗅觉触觉,就是所有这些,你有左鼻腔和右鼻腔,你有左声道和右声道,这很简单,当然立体嗅觉立体嗅觉,对比如在VLC里,我们已经有一个用于触觉的插件了,它主要是为我们所谓的 4D电影院服务的,对吧你知道 [03:36:36 → 03:37:02]
发言人02: 就是那些用液压,我不确定你怎么说那个,液压币液压币,所有东西都在动的那种,就像你在主题公园里体验到的,对吧,然后会有一个同步的数据流,基本就是在传输这些信息,那个有标准吗 [03:37:02 → 03:37:16]
发言人03: 那个有很多标准,对吧,你让我太开心了,然后当然我们有个插件,不在VLC的标准版本里,它基本上就是传输那些运动,也就是物理运动,触觉运动,对吧,这是一种人类感官,所以它会加进来,加进来,这个未来太激动人心了,我是说这只是一个很小的开发者社区,你们是怎么做到的,如果你是一名FFM PEG 或VLC的贡献者,压力好像很大,就看推特上,要让这些软件,在所有不同的操作系统上,都运行起来,工作量实在太庞大了 [03:37:16 → 03:37:50]
这真是巨大的努力,不从另一个角度来看,我们不是贡献者,我们是维护者对吧 [03:37:50 → 03:37:56]
发言人02: 我们为所有人维护,也就是说,比如每年大约有150人为VLC贡献,可能300人为FMPEG贡献,对吧,我们这个小团队的目标,是把所有的贡献都整合进来,所以如果使用的越多,贡献就会越多,这些人就会去做对应的模块,新的格式等等,我们关心的是VLC的架构 FFMP的架构,现在我们在VLC里,正在做空间音频,对吧,我们不久前做了演示,架构上需要一些改动,我们就做了第一个空间音频模块,当要加第二个的时候,就会很简单 [03:37:56 → 03:38:31]
第三个也会很简单,对吧,我们的目标,对其他感官或触觉来说,也是一样的,对吧,我们需要在架构上努力,这样就能加入各种模块,去添加未来的能力,所以没错,我们是一个东媒体框架,所以这不仅仅是音频和视频,它是一切有时间轴 [03:38:31 → 03:38:47]
发言人03: 并且代表你能感知到的东西,如果是脑电波,那就会是脑电波,我觉得那是不可避免的,抱歉,我太喜欢这个了,因为从很多方面来看 FMPEG和VLC 正在推动公司,推动世界走向标准化,比如推动脑电波的标准化,推动标准化,这就会推动,就像我希望Neuralink 可能提出一个标准,用于通过脑机接口的多媒体,或者用于机器人的触觉 [03:38:47 → 03:39:13]
发言人02: 根据经验情况总是同样的,对吧,一开始这是个新领域,会有大约五种不同的标准,因为每个人都开始做这个,然后炒作降温,每次炒作一降温,人们就会开始说,你知道吗,我们需要搞个标准出来,因为有两三家公司,通常不是领头的那家,而是两三个跟随者会去制定一个标准,然后我们实现这个标准,接着就到了曲线的终点,它会开始慢慢靠谱起来,然后领头者也就被迫加入了,因为有标准总是更好,比如3D音频对吧,是的,六七年前到处都是在搞3D [03:39:13 → 03:39:47]
你有安卓上的Google Cardboard 你有两种音频格式等等,而现在它带着真正的应用场景又回来了,我们还会从过去标准的错误中学习,所以每个领域都会是这样,不会去尝试避免封闭失货,我好像在哪看到,你对杜比没什么好话,不确实没有,你能给我讲讲,他们哪里走偏了吗,他们做了什么不好的事,让你这么生气,他们曾经是一家了不起的公司,做了很多很棒的东西,有很棒的工程师,他们定义了声音是什么,而现在主要就是,律师律师和授权的事情 [03:39:47 → 03:40:20]
所以他们是在把东西封闭起来,他们想靠授权赚钱,他们不再像以前那样创新了,我明白了,诸如此类,这有点像很抱歉这么说,对吧,就像惠普一样,对吧,真的,既然我们在很多不同的场合,聊过推特,你有没有最喜欢的,和最不喜欢,最尴尬的一条推文,关于VLC或FFM Pack的,推特的,我最喜欢的两条,一个是空谈无用 [03:40:20 → 03:40:46]
发言人01: 发布定来,我觉得这句话体现了很多,我们之前聊到的,事情没人做,就永远做不出来,它不是凭空出现的,另一个我喜欢的,是FFM Pack 没什么是我们做不到的,我记得这句话来自一个,美国军用卫星的补丁提交,当时他们发明了某种监控系统,能看到整个世界,然后这个就被发布了,是不是,是不是还有FFMPEG 在火星车上运行的事情,对 [03:40:46 → 03:41:18]
所以FFMPEG被火星车,火星2020号漫游车,用来压缩图片,他们真的想要,他们写了篇论文,他们特别希望尽可能多地采用商业现成技术 FANPEG就在火星上运行,所以说我们是一个跨航星的开源库,不错,我们经常看到有人在很奇怪的地方用VLC 还发了很酷的推文,很多搞FE的人在围场里用VLC来播放实时信号 [03:41:18 → 03:41:48]
发言人02: 我们还看到欧洲航天局在用SPAC-X 也在用VLC来监视火箭发射,这些都让你心里特别高兴,对吧,我还见过粒子加速器,哦对对,我经历过最棒的一件事,就是去LHC的地下试验区,因为他们当时用VLC 来监视环上的所有传感器,那个环有27公里长,他们有一些模拟摄像头,然后用采集卡,把模拟信号转给VLC 这样VLC就能在他们的,主播网上流出去,让整个Cern都能看到,我2010年跟Lauren机器去了,然后我们大概花了一个小时,就把他们的问题给解决了,对吧 [03:41:48 → 03:42:22]
因为有些参数,那个时候,可能文档写得不太清楚,然后他说,好了,接下来一整天 [03:42:22 → 03:42:28]
发言人03: 你想干什么,然后我们就到处参观,那些东西,反物质啊,对撞机啊什么的,太棒了,对我这个物理背景的人来说,那真是最美妙的一天,对,他无处不在,有没有什么推文,你有什么后悔发的推文吗,后悔的推文,还是说不后悔,有句法国歌怎么唱的,什么都不后悔,对,这对我来说很重要,对吧,不要后悔,任何事情,不,因为后悔是对你大脑的攻击,对吧 [03:42:28 → 03:42:54]
发言人02: 所以要从错误中学习,但不要后悔,因为你已经做了,除非你有一台时光机器,能回到过去,否则就别后悔,它只会加重你大脑的负担,从错误中学习,没错别后悔,这让我想起 [03:42:54 → 03:43:07]
发言人03: 很美妙攻击你的大脑,这让我想起约翰尼·德普的一句话,他说,仇恨你知道的,我不仇恨,仇恨是一种非常昂贵的情绪,你是在拿我跟约翰尼·德普比吗,因为这会是我们的第一个共同点,好吧,这儿们就像我说的,我永远感激你们两人,以及更大的社区一起构建的 FFMPEG和VLC等所有软件,我永远感激那些永不停歇的辛辣推文,我也很感激你今天能和我谈话,还给了我这顶性感的帽子,我感觉自己像个巫师,感觉很特别,能有机会来谈论和庆祝那款 [03:43:07 → 03:43:42]
这么多年来带给我如此多快乐的软件,我感到很荣幸,所以感谢你所做的一切,也感谢你今天来交流,谢谢,你邀请了我,太感谢了,感谢收听,我和张宝泰斯基,以及KeyCoy的对话,如果你想支持本节目,请查看节目描述中的赞助商信息,在那里你也可以找到,联系我提问和反馈的链接,现在让我用传奇人物 Linus Torvalds的话作为结束,大多数优秀的程序员编程,并不是因为他们期望得到,报酬或公众的崇拜,而是因为编程本身很有趣,感谢收听,希望下次再见 [03:43:42 → 03:44:17]