V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Kvip
V2EX  ›  Python

请问个在不下载视频的情况下,怎么从视频链接(MP4)获取视频时长

  •  
  •   Kvip · 2020-09-23 16:57:07 +08:00 · 3012 次点击
    这是一个创建于 1553 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做爬虫,需要从一个在线链接( MP4 )里面获取视频的时长,不需要下载该视频,请问下有没有什么好方法可以直接从这链接里面知道视频的时长。我目前用到是 requests 库请求了该视频链接,发现 request 后就直接帮我下载该视频了,可我不需要下载视频啊。

    我用浏览器打开了该链接,浏览器直接给我播放了该视频,播放器也能显示视频的时长,我又翻了下控制台的网络请求数据,里面并没有看到视频的时长数据。

    所以我想知道,有没有方法可以可以视频链接直接获取视频的时长数据(不下载视频)。坐的大佬指教!

    (视频链接)[https://prv-cdn.2haohr.com/d7391d15e49e41379cffcf152122e719?e=1600933985&token=kHQPThzbVJmJKaDo5HupfecLjZQcm5BOxUjlENLs:6nKHZx0bsaQP3XL9ISpGW5vWQds=]

    14 条回复    2020-09-27 10:33:21 +08:00
    wgbx
        1
    wgbx  
       2020-09-23 17:49:56 +08:00
    let a = document.getElementsByTagName('video')
    a[0].duration

    dom 操作忘差不多了,将就看吧
    monkeyWie
        2
    monkeyWie  
       2020-09-23 17:55:00 +08:00
    找个 MP4 的解码库,或者自己解码,一般这种信息都会存在 header 里,也就是说只需要下载 header 数据就可以获得了
    hello2060
        3
    hello2060  
       2020-09-23 18:10:45 +08:00 via iPhone
    mp4 的长度在 moov atom 里面,可能在文件头,也有可能在文件尾。最坏情况你就是需要下载完整个文件才能知道时长
    hello2060
        4
    hello2060  
       2020-09-23 18:11:55 +08:00 via iPhone
    播放器不需要整个文件就能播放的话 moov 就在头部
    hello2060
        5
    hello2060  
       2020-09-23 18:14:31 +08:00 via iPhone
    其实你要用 python 分析的话也挺简单的,mp4 的结构挺简单的,就把时长和 timebase 读出来两个处理下就行
    KuroNekoFan
        6
    KuroNekoFan  
       2020-09-23 18:20:21 +08:00
    preload="metadata"?
    KuroNekoFan
        7
    KuroNekoFan  
       2020-09-23 18:20:36 +08:00
    哦爬虫...
    westoy
        8
    westoy  
       2020-09-23 18:22:16 +08:00
    现在一般都是 m3u8 吧, 把 EXTINF 统加一下
    westoy
        9
    westoy  
       2020-09-23 18:23:23 +08:00
    哦, 没注意那个链接
    newmlp
        10
    newmlp  
       2020-09-23 18:35:48 +08:00
    MP4 时长一般保存在文件头或文件尾,不需要下载完整文件
    laravel
        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 的答案
    laravel
        12
    laravel  
       2020-09-23 19:04:47 +08:00
    output: 30.526667
    yuzo555
        13
    yuzo555  
       2020-09-23 19:06:36 +08:00
    ffprobe
    或者自己研究下 mp4 的文件头结构,下载前几 KB 就行了
    Kvip
        14
    Kvip  
    OP
       2020-09-27 10:33:21 +08:00
    @laravel @yuzo555 感谢两位大佬提供的思路。ffprobe 我试了一下,确实可以完成我需要的功能, 但是 ffprobe 还需要电脑安装 ffprobe 环境才行,不知道有没有哪个 python 库能独立完成这种功能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5346 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:34 · PVG 15:34 · LAX 23:34 · JFK 02:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.