本文最后更新于 2395 天前,其中的信息可能已经有所发展或是发生改变。
总结:知乎的视频播放基于M3U8文件,找一种支持通过该类文件下载目标文件的工具即可,例如FFmpeg
某个慵懒的周末上午刷着知乎,一位知友po了自己用鼓(还是啥?)敲击的旅行青蛙音乐的视频,评论区有小伙伴想要该视频的音频文件下载,想着举手之劳,顺便看看知乎的视频播放用的啥技术。
打开开发者工具,刷新网页并播放,观察网络请求并没有media文件的下载,倒是看到很多.ts文件不断下载中。看来是将视频切割为多个片段了,Google后了解到知乎使用的是M3U8文件,再从该文件下载片段。
什么是M3U8?这是一种utf8格式的M3U(MP3 URL的缩写)文件,最先由Fraunhofer协会(研究出MP3算法的那个)设计并用于Winplay3软件。最初只是应用于MP3等音频文件,现在广泛应用于在线流媒体和视频播放。说白了,它就是一个资源文件的播放列表索引文件,该文件记录了目标资源片段的url链接。具体请看维基百科
打开知乎视频,观察网络请求,你会发现请求了一个m3u8的资源。看看它返回的是什么:
foam@foamdeMacBook-Pro: ~ » curl "https://vdn.vzuu.com/Act-ss-m3u8-hd/c338e5b09ab2431080a58ed4d1bb6e17/5a996be2-17da-11e8-b60a-0242ac112a05None.m3u8?auth_key=1521964082-0-0-4d282a5ef6e479a492e6182f044384f5&expiration=1521964082&disable_local_cache=0" #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:2 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:2.000000, 5a996be2-17da-11e8-b60a-0242ac112a05None-00001.ts?auth_key=1521964082-0-0-c0110f185ac09713b4d717e1f2ec30ca #EXTINF:2.000000, 5a996be2-17da-11e8-b60a-0242ac112a05None-00002.ts?auth_key=1521964082-0-0-26ad0014261d1e1f94b1273d91e9a1ec #EXTINF:2.000000, 5a996be2-17da-11e8-b60a-0242ac112a05None-00003.ts?auth_key=1521964082-0-0-ed71bc54e68662748af8eb5228525b84 #EXTINF:2.000000, 5a996be2-17da-11e8-b60a-0242ac112a05None-00004.ts?auth_key=1521964082-0-0-7ef99c02438c16e8d0eabc4955cf3f84 # 有点长,省略若干行... ... #EXT-X-ENDLIST
可以看到返回了一个列表,每个片段2秒钟,包含了链接。
这里使用FFmpeg下载M3U8的资源。FFmpeg是一种处理音视频的强大的开源工具(向开源大佬们致敬),强大到令我泪流满面。该工具有win/linux/mac版本,请自行到官网或包管理器下载。
贴出命令:
根据M3U8下载资源文件:
ffmpeg -i "https://vdn.vzuu.com/Act-ss-m3u8-hd/c338e5b09ab2431080a58ed4d1bb6e17/5a996be2-17da-11e8-b60a-0242ac112a05None.m3u8?auth_key=1521964082-0-0-4d282a5ef6e479a492e6182f044384f5&expiration=1521964082&disable_local_cache=0" -c copy 1.mp4
将MP4转换为MP3
ffmpeg -i 1.mp4 -f mp3 -vn 1.mp3
感谢科技的美好~
锋哥好厉害,崇拜羡慕