最近在做爬虫,需要从一个在线链接( MP4 )里面获取视频的时长,不需要下载该视频,请问下有没有什么好方法可以直接从这链接里面知道视频的时长。我目前用到是 requests 库请求了该视频链接,发现 request 后就直接帮我下载该视频了,可我不需要下载视频啊。
我用浏览器打开了该链接,浏览器直接给我播放了该视频,播放器也能显示视频的时长,我又翻了下控制台的网络请求数据,里面并没有看到视频的时长数据。
所以我想知道,有没有方法可以可以视频链接直接获取视频的时长数据(不下载视频)。坐的大佬指教!
1
wgbx 2020-09-23 17:49:56 +08:00
let a = document.getElementsByTagName('video')
a[0].duration dom 操作忘差不多了,将就看吧 |
2
monkeyWie 2020-09-23 17:55:00 +08:00
找个 MP4 的解码库,或者自己解码,一般这种信息都会存在 header 里,也就是说只需要下载 header 数据就可以获得了
|
3
hello2060 2020-09-23 18:10:45 +08:00 via iPhone
mp4 的长度在 moov atom 里面,可能在文件头,也有可能在文件尾。最坏情况你就是需要下载完整个文件才能知道时长
|
4
hello2060 2020-09-23 18:11:55 +08:00 via iPhone
播放器不需要整个文件就能播放的话 moov 就在头部
|
5
hello2060 2020-09-23 18:14:31 +08:00 via iPhone
其实你要用 python 分析的话也挺简单的,mp4 的结构挺简单的,就把时长和 timebase 读出来两个处理下就行
|
6
KuroNekoFan 2020-09-23 18:20:21 +08:00
preload="metadata"?
|
7
KuroNekoFan 2020-09-23 18:20:36 +08:00
哦爬虫...
|
8
westoy 2020-09-23 18:22:16 +08:00
现在一般都是 m3u8 吧, 把 EXTINF 统加一下
|
9
westoy 2020-09-23 18:23:23 +08:00
哦, 没注意那个链接
|
10
newmlp 2020-09-23 18:35:48 +08:00
MP4 时长一般保存在文件头或文件尾,不需要下载完整文件
|
11
laravel 2020-09-23 19:04:31 +08:00 1
ffprobe -i https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_1920_18MG.mp4 -show_entries format=duration -v quiet -of csv="p=0"
stackoverflow 的答案 |
12
laravel 2020-09-23 19:04:47 +08:00
output: 30.526667
|
13
yuzo555 2020-09-23 19:06:36 +08:00
ffprobe
或者自己研究下 mp4 的文件头结构,下载前几 KB 就行了 |