多媒体容器格式变迁史

从照相机、留声机诞生,解决了人们记录影像、声音的需求以来,人们就不断地追求着在有限的条件下尽可能地提高这些记录的品质,而从模拟时代过渡到数字时代以后,这方面的追求有一部分变成了在尽可能小的空间中提供尽可能好的内容质量,这就催生出了一系列不断演进着的媒体压缩技术。

不过本文的主题尚未来到媒体编码的历史,在讲音视频图像的压缩算法进化之路前,我们先来了解一下这些媒体内容的载体——容器格式的进化历程。

首先需要区分清楚的,就是容器格式与媒体编码格式。

何为容器(Container)

对于数字媒体数据来说,容器就是一个可以将多媒体数据混在一起存放的东西,就像是一个包装箱,它可以对音视频数据进行打包装箱,将原来的两块数据整合到一起,也可以单单只存放一种类型的媒体数据。它就像电影胶片一样,中央是一帧一帧的图像,而两旁则印有对应的音轨。

举个简单的例子,常见的MP4就是一种媒体容器格式而不是编码格式,它里面的视频编码可以是现在最常见的AVC/H.264,也可以是它的前任H.263或者下一任——HEVC,音频编码可以是常见的AAC也可以是AC-3。

另一个生僻点的例子:最常见的图片格式——JPEG,它其实只是一种压缩方式,而它的存放方式其实叫做JFIF(JPEG File Interchange Format),虽然在JPEG标准中定义了一种名为JIF(JPEG Interchange Format)的容器格式,但是因为其缺乏某些关键要素,造成了使用的不便而被后来第三方开发出来的JFIF容器给取代了,今天我们能够看到的JPEG文件几乎都是装在JFIF容器中的。

虽然今天我们能够直接拿到的MP4文件里面装的几乎都是AVC+AAC的组合,但还是不能混淆了两者的概念,容器就是个容器,它没得灵魂。

AVI: 老而弥坚

AVI可能是和笔者年龄相仿的朋友最早接触的一个格式。确实,它推出的时间相对较早,也是许久以前最为常见的一种容器格式。它全称叫做音频视频交错(Audio Video Interleave),顾名思义,它就是简单地将视频与音频交错在一起,几帧视频之后就是对应的音频段,这样重复,直到结束。

它由三部分组成,头部、主体以及位于文件尾部的索引。头部中含有文件的元数据(metadata),比如视频的分辨率、码率总帧数等信息。主体部分是媒体数据的存放区,它使用了块(chunk)的概念,将原本的视频流和音频流分成块状进行交错放置,就是上面讲的一段视频一段音频交错放置,而尾部则是用来放置索引,它用来记录每个数据块在文件中的偏移位置。

讲到AVI,还可以联动一下WAV和苹果那边的AIFF,这些容器格式其实是同源的,来自于EA(对,就是Electronic Arts)为了让不同公司开发出来的软件之间进行数据交换而在1985年开发出来的IFF(Interchange File Format)格式。苹果在IFF的基础上开发出了AIFF,而微软与IBM将IFF格式使用的大端序改成小端序就成了RIFF(Resource Interchange File Format),也就是AVI、WAV这两个容器的基本原型。

在AVI和WAV文件的头部,你都可以看到RIFF的标记。

AVI虽然老,但是因为它以帧为单位把数据切成块来存放的特性,使得它几乎支持市面上几乎所有的音视频编码。而它的缺点也有很多,首先因为索引在文件尾部的关系,所以它并不适合用来流传输;另外在容器中也没有时间戳,只能通过帧数和帧率信息来进行计算,在索引里面并没有写明时间戳—媒体位置的数据,所以要在播放AVI时进行快速跳转还需要额外的技术手段;而媒体数据分块存放也使得它对很多使用运动预测特性的视频编码的支持并不是太好,因为这些帧,比如P帧和B帧,都是通过I帧进行计算得到的,这就需要访问当前帧以外的数据了。

MPEG-PS:VCD、DVD的功臣

用电脑播放过VCD的朋友一定还记得会在目录里寻找那个最大的.DAT文件来播放,而DVD则是找那个最大的.VOB。其实这两个格式都是MPEG-PS容器规范的一种,此PS非彼Photoshop,而是指Program Stream,是MPEG组织在1993年发布的一个容器标准,并且随后写入ISO/IEC国际标准,除了以上两种后缀名之外,还有.mpg也用的是这个标准。

MPEG-PS标准中引入了包的概念,整个文件由一个个包组成,每个包的大小并不相等,包里面含有这个包的时间码以及对应的音视频数据。

MPEG-PS已经随着时代的进步被废弃了,它只能存放MPEG-1、MPEG-2、MPEG-4这些出自同门的视频编码,限制性较大。但因为VCD和DVD的广泛流行,实际上它还是被用的相当多的。

MPEG-TS:专为流传输而生

MPEG组织不仅仅为音视频文件的存储制定了容器标准,还早早地顺应时代潮流,为它们的传输准备了相应的容器。我们的数字电视和IPTV用的就是MPEG组织在1995年制定的Transport Stream,也就是TS容器,当然它也并不限于这两个场景,在现在的低延时直播系统中,MPEG-TS仍然占据了绝对主流的地位,原因就是它的整个结构就是为了流传输而设计的。

一个TS文件中可以容纳多个TS流,不同的流上面可以带有不同的音视频数据,这样通过接收一个TS文件,用户方面可以自由地在这个TS文件中的多个子TS流之间进行切换,非常适合用于传输电视节目。而它同时针对复杂的传输环境进行了针对性的优化,TS流的基础单位是一个个大小仅为188字节的包,每个包都有自己的独立时基,并且由于采用了固定大小,所以在传输过程中即使遭遇丢包也很快就可以恢复正常播放。

发展到今天,TS仍然在网络流传输时代中发挥着自己重要的作用,在苹果主导的HLS(Http Live Streaming)协议中使用的就是TS流,它比MPEG-DASH更加通用,因为后者对于MP4文件进行了一定的修改,在老平台上面支持不太好,而HLS使用的TS仍然是规范中的,可以被大多数设备兼容。

不过也因为TS分包较多的特性,会产生一些数据冗余,所以在存储场景中一般不会使用TS作为容器。

M2TS:高清时代的TS变种

M2TS多见于Blu-ray光盘和高清录像(AVCHD)中,它由MPEG-TS修改而来,加入了对于高清时代新的音视频编解码支持。

并且由于TS文件的特性,每一个小片上都有自己的独立时间戳,这使得文件中一部分数据即使遭到破坏也不会影响到其他部分的正常播放,而且可以从中随意的进行切片操作。

ASF:先进却早夭

见过ASF格式视频的朋友我想应该不会太多,但是见过WMV和WMA这两个微软以前主推的媒体编码格式的朋友肯定有很多。其实WMV和WMA就是存放在ASF容器之中的,它全称高级系统格式(Advanced Systems Format),微软原本计划是用它来作为AVI容器的后继者的,它具有诸多先进的特性,比如说它可以包含视频除了规格以外的元数据,如导演、电影名这些,它也可以提供数字版权管理(DRM),还有非常好的流传输支持——仅需要加载文件的最小部分即可开始播放。

ASF身上的这些特性在当时还算是比较先进的,但不过这于事无补,微软建立它那套封闭媒体格式体系的做法并没有得到太多厂商和用户的支持,大家仍然更喜欢用其他更为开放一点的标准,比如MP3就是一个很好的例子。ASF容器也随着微软媒体格式的衰亡而渐渐消失了,我们今天已经几乎看不到WMV、WMA这两个曾经还很常见的格式的影子了。

RM:昔日王者,如今不见踪影

与ASF差不多同时代流行的就是RM和RMVB了,在那个AVC尚未开始普及,DivX和XviD应用较少的年代中,RMVB在国内的各大下载站中都占据了绝对主流的地位,很多视频站也大多使用RM来提供“网络视频点播”的服务。

不过RM容器本身并不出彩,索引仍然位于文件尾部,不过由于数据段里面有加入时间戳,所以在流传输时还是可以应付用户的跳转操作的。因为这个容器本身与RM编码息息相关的原因,它本身也只能容纳RM编码的视频流,所以在RM编码没落之后我们就很少再看到这些昔日王者了,一个容器格式想要长存,要么在设计上有其独到之处,要么就是要开放,在众多平台上面提供支持。而RM两个理由都不占,效果又比不过新兴的AVC,所以它的没落也是必然了。

FLV:前高清时代的宠儿

还记得十年前的土豆网吗?彼时它还被称为“国内的Youtube”,当时视频网站普遍都还在用Flash写播放器实现流视频播放,而自然而然地,Adobe制定的Flash Video格式就成了这些视频网站主要使用的容器格式,也就是我们熟知的FLV。

FLV格式是在Flash Player 6中引入的,当时更多的是被存放在SWF文件的内部,不过后来因为体积越来越大而直接独立了出来,它的结构相对而言比较简单,主要分为两块,位于文件头部的元数据信息和后面的音视频数据。不过在数据的存放上面,FLV是将数据分为多个标签进行存储的,每个标签都带有自己的时间戳,所以这就保证了流传输时的音画同步。

由于FLV结构简单但是功能足够用,并且被Flash Player天然支持,所以在当时的视频网站上面普遍都使用它作为容器,直到今天还有很多网站没有放弃它,虽然其中的视频编码早已升级,它也有衍生出来的F4V作为后继者,虽然后者的血统已经不是Flash家族的了。

F4V:换了血的继任者

小编还记得土豆网在2009、2010年左右在国内率先开始使用H.264编码,当时如果将清晰度切换到“高清”就会播放这些用H.264编码的视频。而用飞速土豆加速会缓存到一些.f4v扩展名的文件,乍一看还以为它就是FLV,但其实不然,F4V其实是MP4所在的ISO标准容器家族的,但也是Adobe搞出来的FLV的后继者。关于后者的详情,请往下看。

MOV:苹果向业界作出的贡献

MOV格式的正式名字叫QuickTime File Format。看到这个QuickTime第一反应肯定是“哦,这是苹果的东西”。确实,QuickTime File Format是由苹果在1998年推出的,它引入了原子(atom)的概念,在QTFF格式中,atom是基本的数据单元,它可以用来容纳实际的音视频数据,也可以放置元数据和字幕等文本信息,atom中所容纳的数据类型和大小在每个atom的头部进行描述,经过一层层的嵌套之后,整个数据文件呈现了一种树状的结构,并且保留了强大的可扩展性。

MOV作为苹果QuickTime编码的成员,在目前仍然被苹果设备广泛使用着,并且对于它的支持非常好。1998年推出QTFF的同时,苹果将这个格式交给了ISO组织,后者将它标准化为国际通用容器格式,而基于这个标准衍生出来的容器,又可以叫做ISO/IEC base media file format,同时被MPEG组织采纳,写入MPEG-4 Part 12标准中。

ISO标准容器格式

ISO标准容器格式是一个规范,它代表符合这个规范的容器类型,而不是特指某个格式。它是由苹果的QuickTime File Format发展而来的,在MPEG-4 Part 12中被最终确定并被ISO/IEC组织写入标准。它虽然没有具体实现,但是它定义了基于时间码的多媒体文件的通用结构,并由此成为了MP4、3GP等格式的基础。

MP4:标准,泛用

MP4肯定是现在最通用最流行的媒体容器,甚至可以说没有之一。但其实现在的MP4和早期的并不是同一个标准,目前常见的MP4标准是在2003年完整的的MPEG-4 Part 14规范中制定的,到今天为止也经过了多次的修订。它其实与MOV之间并没有太大的区别,基本上就是把MOV的atom改了个名字,叫成box,然后加了一点别的佐料。

苹果建立iTunes Store卖数字音乐的时候选择了AAC-LC作为他们的音频编码格式,而容器格式上面他们并没有选择与AAC-LC处于同一时代(MPEG-2)的ADTS,而是选择了比AAC-LC大一辈的MPEG-4标准容器,也就是MP4,不过因为它只含音频所以我们看到的扩展名就是.m4a,iTunes Store还曾经卖过一种只有视频没有音频的MV,它用的也是MP4,扩展名为.m4v。

目前很多视频网站已经从FLV切换到MP4上面了,而且还有一种新的MPEG-DASH格式就是借助于MP4可分割的特性实现的,它将一整段视频切成许多段小块,方便浏览器进行加载,减少HTTP长连接对服务器的压力。

这里说一句题外话,当年某站刚上HTML5播放器的时候,因为他们原来的视频几乎全部都用的是FLV存储的,而HTML5标准并不支持它,所以要进行一个容器转换,某站当时一位非常年轻的程序员写出了一个在浏览器内实时将FLV文件转成MP4并喂给浏览器的媒体播放器的脚本,名为flv.js,这个脚本可能给某站省下了非常大的格式转换成本。不久之后这位程序员因为受不了某站的低薪而离职。这件事曾经引起了很多社区的热烈讨论,因为今天是程序员日所以特地写了这么一段。

3GP:精简小巧,手机最爱

3GP是MP4的同族兄弟,一样是基于ISO标准容器格式,用过3GP的兄弟肯定还记得这格式最多出现的地方是哪里——以诺基亚为代表的前智能手机时代,手机录像出来的文件大多都是3GP格式的。

3GP这个容器格式标准其实不是由以往的MPEG啊这类专注于多媒体编码的组织搞出来的,而是3GPP,对没错就是制定通信行业标准的那个组织制定的。它在容器支持的格式上进行了精简,只面向于手机可以进行的编码,比如MPEG-4 Visual、H.263这些比较老的视频编码和AMR、AAC这两种前智能手机时代使用较多的音频编码。

因为前智能手机时代的手机性能并不强大,一般也不需要支持很多种格式,不用像MP4那么全面,所以3GP最终成为了一种被广泛支持的格式,不过也因为它支持的格式过于有限,最终在智能手机时代被同门大哥MP4给取代了。

MPEG-DASH

面对时下流行的流媒体,MPEG组织对MP4文件进行了魔改,由于MP4天生可以进行无损切割的特性,DASH方式将原本媒体文件中完整的文件头的元数据信息和片段Box中的信息抽取出来单独写在一个文件(MPD)中,同时还包含了片段的URL等信息,播放器可以自适应选择需要的片段进行播放,在自适应程度上面比HLS更强一些。(其实MPEG-DASH也可以用TS作为容器,但用MP4更多一些)

目前MPEG-DASH已经成为了一项国际标准,人们比较熟悉的应用平台就是Youtube和Netflix,在这些平台上面你会发现浏览器在不断地加载一些小的视频文件,但是视频的播放是连续的。

MKV:强大无需多言,免费让它受爱

说到MKV,喜欢收藏高清电影的朋友肯定不会陌生,这种容器格式大概是和高清时代一起发展起来的,但其实它在2002年底就已经完成制定了,不过推广的很缓慢,到了高清时代和UHD时代人们才开始发现这种容器的强大,并用的越来越多,连微软都在Windows 10的初始版本中加入了对它的支持。

MKV全名Matroska,它身上最大的特点就是开放标准、免费使用,而且它可能是目前地球上最强大的数字媒体容器格式,一个文件中可以放音频、视频、字幕、字体还有章节信息等等等等,前面东西都是不限数量任你放多少都可以吃得下的,而且它是目前唯一一个支持封装ASS字幕的格式。

值得一提的是,这玩意儿是俄罗斯组织матрёшка搞出来的,其实本身是用于盗版的,俄罗斯的网络情况跟我们挺像的,网络上盗版横行,而MKV也帮助了文件的传播,目前来看,MKV可能是众多容器格式里面最好用的,无论是编辑元数据还是抽取轨道重新封装都有GUI工具支持,不过可惜的是众多视频编辑剪辑软件还是没有提供对它的支持。

总结

其实读到最后你会发现,这些容器格式内部对于音视频数据的处理都是大同小异的,区别点其实并不大。更多的差距在于它们对于不同编码格式的支持程度、元数据的详细程度以及对于是否能够支持音视频以外的数据。

而发展到至今,MP4仍然够用,在互联网时代扮演着非常重要的角色;MKV在下载党那里被奉为圭臬;而TS格式仍然在数字电视系统中被广泛使用。但在他们之前的格式也不是说非常弱或者不好,只不过可能是他们支持的那些格式没落了顺带着把它们也带没了,真正像AVI那样确实在技术规格上落伍的容器并不多。

一个加钱就完事儿了的故事:9600KF超5.1GHz小记

最近最火的CPU应该莫过于i5-9600KF,这周一的时候,这枚处理器突然在Intel的京东自营旗舰店理开始降价促销,1399的价格做到了比618还要低的史低,让一直想更换成9700K的我不禁心动,都这个价位了还要啥自行车?于是想到正好在上周六的时候收了朋友的一块Z170,魔改一下应该能上9600KF,低成本换平台,买了!于是当天看到优惠信息后不到半小时就下单了。

这批货应该是新到的,所以都还没有进京东各地的仓库,我的这枚处理器是上海发过来的,沙包的Z170先到了,用笔记本上面的i3-8100试了试,恩,兼容性不错,除了USB会报资源不够和内存兼容性有点小问题不能超手上的双面16GB内存之外其他一切正常,这让我对它能作为9600KF的座驾充满了信心。结果……(其实因为内存兼容性问题还下单了两条威刚金色威龙3600)

周三的时候,9600KF终于到了,上手贴好护舒宝,其实放在华擎华硕等一票除技嘉外的板子上都可以只屏蔽2点+短接2点(微星和蓝天这两家甚至只用屏蔽2点)。上板子,正当我兴冲冲地等着它进系统的时候,又开始卡Windows启动加载的第二个圈了。

无奈,先换回8100检查主板BIOS,用afuwin把当前BIOS备份出来,然后用MMTool查看里面含有的微码信息,发现缺少了针对R0步进的新微码,遂根据网上教程,找来同厂商的Z390板子BIOS,将微码移植过去,然后再用afuwin给刷上,一切看似很顺利应该是没有毛病了,结果仍然开机卡加载。

9代处理器步进情况,注意从9600KF和9600K基本都是8核屏蔽而来的,而且还分R0和P0两种步进,其中R0步进可以硬件免疫Spectre。

一头雾水之下只能认为是BIOS有问题,但在网上基本找不到解决办法,因为R0步进太新了,很少有人把新的R0步进处理器放在老主板上面用,无奈第二天还要跑上海,遂睡觉。

睡了可能只有三个钟就爬起来赶飞机了,地铁上面刷了下什么值得买发现京东上微星的Z390系列板子稍微有点优惠,考虑了一下觉得自己是没有能力解决那块Z170的BIOS问题了,于是直接下单MPG Z390 GAMING EDGE AC。

在广州和上海间当天来回还是有点累的,但是挡不住我用上新主板的兴奋之情。没几分钟把CPU显卡内存两块SSD和风扇全部搞定,然后插上电源开机,顺利点亮。然后直接进BIOS,先测试内存能不能上3200,打开XMP重启,很顺利就跳上3200了,然后再把处理器倍频拉到50,电压先开了自动。很顺利地直接进了系统,打开CPU-Z,看到了从来没见过的5GHz。

然后打开AIDA64单拷FPU,观察到电压为1.34V,体感稍微有点高,想降一点,因为稍微降一点可以让CPU温度更低,散热器更好压,于是安装了Intel XTU,在Windows下面开始降电压,到1.3V的时候我感觉差不多了就没往下降,此时倍频其实可以再往上拉一档,5.1GHz单拷FPU过关,4热管的利民刺灵AS120可以把满载功耗120W的9600KF压在75度,很满意了。

进《刺客信条:奥德赛》简单benchmark了一下,同样显示配置的情况下,平均帧数上升了有10多帧,而高频CPU最大的优势——电子竞技游戏不掉最低帧我还没测过,但是想来这块5GHz的9600KF比我原本超频至3.8GHz的E3-1231V3肯定是要强得多了。

然后就是把BIOS各种选项都开起来,我是不喜欢CPU没负载的时候还加着一个1.32V这么高的电压的,所以在设置里面把电压控制改成了自适应+Offset,手动给了+0.08V的Offset,这样主板的电压在满载的时候最高可以达到1.32V,而在没有负载的时候也会自动降压。

而内存,因为从朋友那儿借了闲置的两根单条16GB的DDR4-3200内存,自己又下单买了一组8GBx2的套装,所以想着能不能插一块搞个48GB内存系统,事实证明是可以的,只要两个通道的内存容量相等、频率和时序设定一致即可开启,手动在BIOS里面把时序改成差的那一套内存上自带XMP信息中的就可以把频率调至3200,并且十分稳定。

这次时间几乎长达一周的折腾让我明白了,有些问题,加钱真的就完事儿了……

另外值得一提的是,想摸CJR颗粒的朋友可以买威刚的金色威龙,我推荐别人、自己、还有朋友那儿一共四套金色威龙,频率从3000到3600全部都摸到了CJR颗粒。

老平台:

一场因为BIOS版本太老而引发的无法进入系统悬案

前几天朋友的老平台主板坏了,他也正好打算要换一套平台,于是找我写了个配置单,随后在京东上面下单了,京东发货速度很快,没两天东西全都到了,配置单就不晒了,我随手写的,免得被评论吐槽哪里哪里有问题,就用了9700K+Z390+2060SUPER。也正好因为是在新一轮促销开始前夕,所以整套平台的价格买贵了有个小一千,不过早买早享受嘛。

这周日,我过去朋友家里装机。装机我虽然不是很熟练,但是大部分细节我都是注意到了。装箱走线又多花了半小时,搞定之后一次就点亮了,随后在 BIOS 设定里面把内存的 XMP 开起来,频率上到 DDR4-3200 也没出现内存不兼容的现象,看上去一切都挺顺利的,然后我掏出做好的 Windows 10 原厂安装 U 盘准备安装系统。

插U盘,开机,按 F12 选择 U 盘启动!正当我等着 Windows 10 安装那个偏紫色的界面出现的时候,突然,Windows 启动界面那个用来提示正在加载系统的滚动圆卡住了。

我有点懵,心想,不应该啊,这镜像我验过 SHA-1 没有完整性问题啊。出于对微软品质的不放心,我马上重新下了一个稍老版本的 Windows 10 1903 安装镜像准备重新做安装盘,心想,嘿,这个版本我用过的,肯定没问题。

下好镜像打开 Rufus(极力推荐用这个开源免费软件来写镜像)打开镜像写入,很顺利。

插 U 盘,开机,按 F12 选择 U 盘启动,又卡住了!重新尝试了几次,每次都卡在这个地方。我把安装 U 盘插到自己的笔记本上面,很顺利地进入了 Windows 10 安装界面,看来不是镜像的问题。思索了一番,可能是内存超频的问题,于是进 BIOS 还原到默认设置,再重启,还是卡。

难道是我装机的时候哪里出问题了?于是把机箱两侧版再次打开,检查了一番发现没有问题啊,我装的100%没有问题。于是只能进入 BIOS 寻找问题可能所在之处,同时搜索这块板子,看看网上有没有遇到相似问题的人。

还真有,在搜索结果的第一位就是该主板的官方论坛中一个报告自己遇到无法启动错误的用户,简单看了下, 是 BIOS 版本的问题。

难不成到手的主板上面默认的 BIOS 还能让你进不去系统,进不去系统安装盘的?我留意了一下 BIOS 的版本,然后上官网找了主板的驱动下载页面,发现 BIOS 确实比较老,落后最新的已经有三个版本了。于是下载最新的 BIOS,刷入,再插启动盘,很流畅地进入了熟悉的 Windows 10 安装界面。

这里就不点名是哪块板子了,这次装机的经历让我明白了出厂 BIOS 并不是像网上很多人说的“最稳定”“可靠性最高”,而是很可能就问题百出,还是推荐大家上手就直接更新到最新稳定版的 BIOS,甚至一些 beta 版的 BIOS 版本都是可以尝试的,很多疑难杂症和平台小毛病通过 BIOS 的更新都是可以解决的。

怎样在境外网站上进行推流

其实很简单,只需要将obs的网络连接引向代理,但是Shadowsocks中直接挂全局模式不太好,因为会将本来能够直连的网站也会通过代理连接,而且应该是不能代理到obs的(我从来不用全局)。

那么要怎么做到这点呢?我常用的是Proxifier,使用教程网上很多,这边不再赘述,只要在规则里面把obs的执行文件加入需代理列表即可,各种使用RTMP协议的直播网站应该都是直接可以这样搞定。

当然,一个高带宽的代理是必须条件。

题外话,无论是Youtube还是Twitch,其直播后台都比Bilibili强太多了。

用youtube-dl在直播进行中同时下载

基于今天花谱Live的下载失败,一怒之下又翻了翻youtube-dl的文档,发现可以在直播的同时直接截流保存成文件,用这种方法可以大大加快海盗效率。

准备工作

  • 良好的网络环境
  • 空闲的CPU资源
  • youtube-dl
  • FFmpeg
  • 一点点命令行基础

这里建议将youtube-dl和FFmpeg所在的目录加入环境变量中,用户或者系统的均可。另外你还要搞清楚自己的本地代理端口号,一般为1080。

配置文件与命令

youtube-dl支持配置文件,可以免去每次手动输一长串命令的麻烦,在Windows下其默认读取的配置文件位于用户目录下的youtube-dl.conf,即%userprofile%\youtube-dl.conf

这边准备好了两份配置文件,一份是直播同时下载,另一份是平常下载视频。两份配置文件都需要手动更改里面的代理端口号,和自己环境所匹配,其他不需要进行更改。

普通下载:

1
--proxy socks5://127.0.0.1:1081
2
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
3
-o '%(uploader)s/%(title)s.%(ext)s'
4
--add-metadata
5
--write-thumbnail
6
--ignore-errors
7
--extract-audio
8
--audio-format best
9
--audio-quality 0
10
--keep-video
11
--embed-thumbnail

直播的同时进行下载:

1
--proxy http://127.0.0.1:1081
2
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'

分别将这两块命令行保存成两个文件,修改Proxy行的端口为自己使用的,建议一个命名为youtube-dl.conf放置在%userprofile%目录下,另一个换个名字也存%userprofile%目录下方便调用。

以上工作完成之后打开命令提示符,注意是cmd不是PowerShell,因为后者在管道操作上面有一些不同,这边是用最简单的cmd来完成。命令:

youtube-dl -o - U2B-LINK|ffmpeg -i - -vcodec copy -acodec copy "OUTPUT.mp4"

如果你默认的配置文件不是用于直播时同时下载的,那么请指定配置文件:

youtube-dl -o - --config-location PATH\TO\CONFIG U2B-LINK|ffmpeg -i - -vcodec copy -acodec copy "OUTPUT.mp4"

注意,-o之后的--i之后的-均不能遗漏,这是管道操作最重要的两点之一,还有一点是管道操作符|,跟反斜杠\同一个键。命令中的U2B-LINK就是油管链接、PATH\TO\CONFIG就是youtube-dl的配置文件具体位置,OUTPUT.mp4是输出的文件名。

>>endl;