youtube-dl程序是如何诞生的

如您所知,目前RIAADMCA请求阻止GitHub上的youtube-dl存储库虽然我无法评论维护者的当前计划或当前的讨论,但是在RIAA提出指控之后,我认为这对我作为该程序的创建者和第一个谈论youtube-dl早期维护者的人很有用。



铜收集器



在任何一个好故事中,肯定都有反派,因此我决定选择铜收集器-在该地区收集有色金属的小偷。是他们促使创建了youtube-dl。早在2006年,我的村庄就位于西班牙北部阿维莱斯小镇5-10公里处。阿维莱斯居民享有良好的基础设施和服务,包括有线电视和ADSL互联网访问。在我所在的地区,没有什么比这更好的了:离ADSL电话交换机太远了,铜收集器偷走了多年的铜线,偶尔导致电话服务中断,并迫使电话公司用较弱和较细的电线代替这些电线,因为他们也很可能被盗。这持续了好几年。



在家访问Internet的唯一方法是56k V.90调制解调器实际上,连接质量很差,以至于有必要将速度降低到33.6 Kbps以保持稳定性。实际下载速度很少超过4KB / s。同时,一种有趣的视频服务YouTube出现在互联网上,并迅速普及,并于同年年底被Google收购。



熬夜看一块



通过33.6Kbps的连接观看任何YouTube视频都是一种令人难忘的体验。几乎所有视频都需要永久下载。例如,下载40 MB的短视频需要40分钟,这使得无法进行流传输。更长,更高质量的视频需要花费几个小时并完全占用频道,更不用说可以随时中断连接的事实-下载必须重新开始!想象一下,您真的很喜欢某个视频,并且想第二次或第三次观看。实际上,重复此过程已成为一种受虐行为。



在这种情况下,我开始考虑下载视频文件的可能性:如果视频很有趣,那么拥有一个副本可以让您以后多次查看。而且,如果下载程序确实非常好,那么在连接中断后,它便可以从同一位置继续下载!



当时还有其他下载YouTube视频的解决方案,包括颇受欢迎的Greasemonkey脚本... 碰巧的是,我无法配置任何现有的解决方案来工作,所以我决定编写自己的工具。这就是youtube-dl程序的外观。从控制台启动它对我来说更方便,更快捷,因此没有图形界面。选择Python是因为它具有广泛的标准库,并且具有可在任何平台上运行的令人愉悦的副作用。



空灵的发射



第一个版本仅适用于YouTube。该程序实际上没有正常的体系结构,因为它不是必需的。作为一个简单的脚本编写,它直达重点。该程序的大小为223行,只有143个实际代码,44行注释和36空行。选择该名称是为了纯粹的方便:youtube-dl很明显,易于理解,难以忘记,并且可以在控制台中直观地输入为“ YOU-TAB”。



由于我已经使用Linux几年了,所以我决定以免费许可证(第一版为MIT)发布该程序,以防万一有人觉得有用。那时GitHub还没有出现,我们不得不使用SourceForge。但是在那里,当创建一个新项目时,您必须填写一个乏味的表格。因此,我没有使用SourceForge,而是将代码快速发布到了个人页面,由Internet提供商提供。尽管在当今看来这很不寻常,但ISP过去常常为用户提供电子邮件地址和一些托管服务,以便他们可以通过FTP上传文件。因此,您可以在网络上托管自己的个人网站。该程序的第一版于2006年8月8日发布,尽管那时我已经使用了几个星期。



在开发过程中,在YouTube上观看视频时,有必要了解Firefox浏览器的操作。如果我没记错的话,Firefox尚未内置用于分析网络活动的开发工具。连接大部分是通过HTTP进行的,因此Wireshark(当时称为Ethereal)成为分析网络流量的宝贵工具。我写youtube-dl的特定目的是做与网络浏览器提取视频时相同的操作。该程序甚至发送了从Firefox for Linux逐字复制的相同用户代理字符串,以确保该站点将向该程序发送与浏览器相同的网页。



此外,YouTube当时还使用了Adobe Flash Player。...这些视频已作为Flash Video(FLV)文件提供,因此需要一个专有插件才能在浏览器中查看(许多都会记住令人恐惧的libflashplayer.so库),因此任何浏览器内开发工具都没有用。此专有插件一直是安全漏洞和问题的源头。我有一个名为Flashblock的Firefox扩展程序,该扩展程序默认情况下阻止内容加载,并将其替换为带有可单击图标的占位符,因此,内容只会按需加载,除非用户请求,否则将不会使用插件库。



除了提高安全性外,Flashblock还有另外两个好处。首先,它删除了很多嘈杂和不愉快的横幅,这也可能导致安全问题。其次,它有助于分析将视频加载到播放器中的过程。我等待页面完全加载,然后在单击Flashblock图标开始视频下载之前启动了Wireshark。因此,唯一要分析的流量与加载视频播放器应用程序的插件和加载视频的应用程序本身有关。



还值得注意的是,当时的Flash Player插件已经将视频的副本上传到了硬盘(在Linux下,它们存储在/tmp),并且许多用户依靠此功能来制作副本而无需其他工具。因此youtube-dl仅在提取视频名称并将其自动分配给文件后才更加方便。



哦,鲜肉!



最终,对Flash Player进行了更改,使视频更难以提取最初的措施之一是在创建视频文件后断开与视频文件的链接,以使该i节点仍然存在并可供使用它的进程使用(直到关闭),从文件系统的角度使该文件不可见。仍然可以使用文件系统来抓取文件,/proc以检查浏览器进程使用的文件描述符,但是通过上述每个小步骤,youtube-dl变得越来越方便。



像当时的许多开源爱好者一样,我使用Freshmeat订阅了令我感兴趣的项目的新版本。创建youtube-dl时,我还在该网站上创建了一个项目条目,以便可以将新版本和更改日志通知用户,其中列出了新功能,修复和改进。在Freshmeat目录中,可以搜索新的有趣的项目;最新的更新发布在首页上,通常每天几十个。我想通过这种方式linux.com的编辑Joe Barr(安息了)发现了该程序,并决定写一篇有关该程序的文章。早在2006年。Linux.com以及当时的其他经典网站(例如Slashdot或Linux Weekly News)都是当时Linux爱好者最受欢迎的资源之一。至少对于我来说。



从那一刻起,youtube-dl的流行开始增加,并且我不时收到关于创建和支持该程序的感谢信。



流量统计



快进到2008年。 youtube-dl的普及度持续缓慢增长,用户经常要求制作类似的程序以从其他站点下载,因此我多次接受了该请求。正是在这一点上,我决定从头开始重写程序,以实现对多个视频站点的原始支持。为了简化最重要的部分,我对如何将程序的内部分为几个部分有一些简单的想法:一个单独的文件加载器,适用于所有网站,另外一个是-信息提取器:包含特定于特定代码的对象(类)视频网站。当给出URL或伪URL时,请求提取器找出可以处理这种类型的URL的提取器,然后请求提取器提取有关该视频或视频列表的信息。其主要目的是获取视频URL或具有可用格式的URL列表以及一些其他元数据(例如标题)。



我还借此机会更改了版本控制系统,并将项目移至另一个主机。当时,Git赢得了分布式版本控制大战,但是Mercurial也有很多用户。我对两者进行了测试,并决定比起Git,我更喜欢Mercurial。我开始将其用于youtube-dl,并将该项目发布到Bitbucket上这是自然的选择。当时,Bitbucket仅托管Mercurial存储库,而GitHub仅托管Git。两者均于2008年推出,与SourceForge相比,令人耳目一新。分布式版本控制系统为每个用户提供不同的项目名称空间(即,您的项目名称不必是全局唯一的,而仅对于您的项目而言是唯一的)意味着您可以在几分钟内将个人项目发布到两个站点中的一个...无论如何,几年之后,将项目历史记录移至Git并将项目移至GitHub



重写项目时,我无疑应该抓住了这个机会并将其重命名,但是我不想混淆现有的用户,并留下了这个名称,以使该程序更受欢迎。



那一年的技术环境也略有变化。移动数据计划开始受到关注,那年年底,我给自己买了一个3G调制解调器和一个数据计划,这使我第一次能够以不错的速度上网。无论如何,这并没有使我停止使用youtube-dl。我每月支付45欧元,但每月数据限制为5 GB,这意味着我平均每天只能使用约150 MB。而且速度允许您下载更多内容,因此您必须监视流量并有选择地选择内容,并尽可能避免大量下载。因此,youtube-dl有助于防止大型视频文件的多次下载并保持在收费计划之内。



集数:新家



一段时间后,即2009年底,我搬家,终于开始与女友(现在是我的妻子和两个孩子的母亲)在阿维莱斯生活。我第一次有了高速互联网,多年来,高速互联网一直是我许多朋友和家人的标准。我记得这是100/10 Mbps电缆连接(下载/上传),没有流量限制。这无疑标志着我使用youtube-dl的频率以及对项目的关注程度的转折点。



后来,我终于将代码移植到了Git和GitHub。那时,YouTube开始尝试HTML5视频,该视频将在2015年左右成为默认视频。 2011年,我从事软件工程师的专职工作了几年,总的来说,从工作中回来后,我并不想编程和自定义youtube-dl,也不想根据用户的要求实现我本人不会亲自使用的功能。



2011年下半年,在另一个重要项目中,我决定离开youtube-dl维护者一职,因为几个月来我一直无法完成任务。菲利普·哈格迈斯特被证明是一位优秀的程序员,他向GitHub提交了一些请求,其中包含许多人感兴趣的修复程序。我让他可以访问我的youtube-dl存储库中的提交内容,从本质上讲,这只是故事的结尾。上游日志向我显示了持续的提交流,直到2011年3月为止,然后由Philip合并到2011年8月。此后,我在2013年进行了一次提交,目的是将GitHub将自定义页面从USERNAME.github.com移至USERNAME.github.io,将rg3.github.com源代码更改rg3.github.io以避免出现安全问题。如果我没有记错的话,则在其自己的域上使用恶意代码。



尽管我没有参与youtube-dl的开发,但多年来,我仍然在https://github.com/rg3/youtube-dl上负责官方项目页面https://rg3.github.io/youtube-dl/。当Philip或其他维护者要求向其他开发人员(例如Filippo ValsordaSergey M.,目前的维护者之一)提供提交权限时,我需要出现。不幸的是,在2019年,跟踪器中的巨魔出现了一个小问题,并且仅项目所有者被允许阻止用户。这最终使我们将该项目移至GitHub组织,邀请了所有有权访问提交的人(尽管并非所有人都加入了)。 GitHub的组织允许维护人员更自由地采取行动,而丝毫不招惹我。



我要再次对这些年来大大改进了代码,能够在周围创建一个真正的社区并且使该项目比我十年前离开时更受欢迎的各个项目维护者表示由衷的感谢。



离线免费



我想再次指出,youtube-dl作为一种工具的目的在它存在的14年中几乎没有改变。在收到RIAA的DMCA信函前后,许多人谈到了如何将youtube-dl用于不同的 目的



对我而言,它始终是脱机访问Internet上已经可以使用的视频。在移动网络和始终在线连接的世界中,您可能会问这是否真的必要。我认为是的,如果Netflix,Amazon,迪士尼和HBO在其非常流行的流媒体应用程序中实现了类似的功能。对于长途旅行或出国旅行,尤其是带小孩的儿童,地下,飞机或在连接不良或连接受限的地方,脱机访问播客,演讲,评论,新闻或艺术品非常方便。



youtube-dl的其他副作用是,当在线界面无法完成任务时,便可以访问内容。旧的专有Flash插件并不能在所有平台和体系结构上运行。当前,浏览器可以播放视频,但有时无法利用有效的GPU解码功能,浪费大量电池电量。 Youtube-dl可以与自己的播放器一起使用,以使某些视频可播放和/或高效。例如,mpv播放器包括对youtube-dl的内置支持。您只需要传递URL即可,它使用youtube-dl来访问视频流并播放它,而无需将任何内容保存到硬盘中。



默认的在线界面可能没有某些人需要导航的辅助功能,或者没有为色盲者提供的彩色滤光片,它们也可以从本机视频播放器应用中获得。



最后但并非最不重要的一点是,诸如youtube-dl之类的工具允许您仅使用免费软件访问在线视频。我了解到,世界上没有太多的严格免费和开源软件的支持者。我什至不认为自己是这样。专有软件一直存在于我们的现代生活中,并且每天作为大量Javascript行在浏览器中提供给我们,目的是多种多样的,而并非总是出于用户的最大利益。证明是GDPR的出现,以及所有的缺陷和问题。使用youtube-dl访问在线视频可确保在uBlock Origin或Privacy Badger勉强可以安抚的情况下完全隐身地安心。



All Articles