python如何下载MP4视频和获取时长

Python批量读取视频文件的时间长度 这个代码循环遍历指定文件夹中的所有文件,对于每个视频文件,使用OpenCV的VideoCapture对象打开文件,并使用get方法获取视频的帧数和帧率。然后,通过将帧数除以帧率来计算视频的持续时间。最后,代码打印出每个视频文件的名称和持续时间。要批量读取视频文件的时间长度,可以使用Python中的OpenCV库。 阅读详情

我们做爬虫工作时,经常会遇到要把爬取的视频下载到本地做存储,那么我们如何使用python去下载视频呢,下载视频不是本文章的重点,在此废话不多说,直接上完整的代码:

def download_file(url, base_path, filename='', call_func=''):
    file_path = base_path + filename
    directory = os.path.dirname(file_path)
    mkdir(directory)

    # 进度条
    def progress_callfunc(blocknum, blocksize, totalsize):
        '''回调函数
        @blocknum : 已经下载的数据块
        @blocksize : 数据块的大小
        @totalsize: 远程文件的大小
        '''
        percent = 100.0 * blocknum * blocksize / totalsize
        if percent > 100:
            percent = 100
        # print ('进度条 %.2f%%' % percent, end = '\r')
        sys.stdout.write('进度条 %.2f%%' % percent + "\r")
        sys.stdout.flush()

    if url:
        try:
            log.debug('''
                         正在下载 %s
                         存储路径 %s
                      '''
                      % (url, file_path))

            request.urlretrieve(url, file_path, progress_callfunc)

            log.debug('''
                         下载完毕 %s
                         文件路径 %s
                      '''
                      % (url, file_path)
                      )

            call_func and call_func()
            return 1
        except Exception as e:
            log.error(e)
            return 0
    else:
        return 0

我们开始下载我们的视频:

 

下载好这个视频,当然业务需求,还有可能需要获取这个视频的时长,接下来

进入到今天我们的重点分析:

上网搜索发现了这篇博客:

https://www.cnblogs.com/ranson7zop/p/7889272.html

读完这边博客我们了解到:

时长 = duration/time scale

只需要知道这两个字段在文件中的位置即可,而且这两个是连续的字段。

 

 

如图所知,我们找到mvhd,向后偏移12位,第13位到17位就得到了time scale,17位往后4位就是,duration。

我们打开视频源文件,看一看,我们就能更好的理解了:

 

时长 = 0x00001c93/0x000003E8=7

 

 

我们使用ALC打开视频,对比一下时间:

 

时间刚刚好,ok分析结束

 

为了方便,咱可以写个程序来获取。

 

def get_video_duration(video_file):
    with open(video_file, 'rb') as fp:
        data = fp.read()
    index = data.find(b'mvhd') + 4
    time_scale = struct.unpack('>I', data[index + 13:index + 13 + 4])
    durations = struct.unpack('>I', data[index + 13 + 4:index + 13 + 4 + 4])
    duration = durations[0] / time_scale[0]
    return duration

 

打开咱么刚才那个视频,测试一下:

以上我们就全部分析结束了。

 

 

文章首发于微信公众号菜鸟童靴,不定期更新,如有需要后台加微信

关于blob加密视频的基于m3u8和ts文件下载转MP4视频的python爬虫实现 关于blob加密视频的基于m3u8和ts文件下载转MP4视频的python爬虫实现 首先谈一下这篇文章主要的爬虫对象,基本上都是一些视频网站(一些大厂会有自己独特的编码风格需要自行破解加密格式,所以很难实现,所以这篇文章主要针对于一些小网站)。 下面先说一下blob加密的实现,可以参考这篇博客(https://blog.youkuaiyun.com/xingyun89114/article/details/80699527) 总结来说呢,其实就是HTTP请求后的数据做blob加密,上篇博客我们也可以在开发者模式中的ne 阅读详情

相关推荐

python 实现视频流下载保存MP4

# -*- coding:utf-8 -*- import sys import os from glob import glob import requests reload(sys) sys.setdefaultencoding("utf-8") file_path=os.getcwd() #获取需要转换的路径 def get_user_path(argv_dir): if os.path

huaqiangu1123的博客 4779

python下载大文件mp4,python下载速度太慢

这篇文章主要介绍了python下载大文件mp4,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。这个网站首页就有一堆图片,而且往下拉时还会自动刷新,很明显是个ajax加载,但不怕,动态加载这东西我们之前讲过了,所以打开开发者工具看下是怎样的请求吧。往下拉的时候很容易看到这个请求,这个是一个get请求,状态码为200,网址为有三个参数,很容易知道page参数就是页,这个参数是变化的,其他的参数都是不变的。

Fixf4556的博客 635

利用python下载钉钉群直播视频

今年因为疫情的原因不能开学,所以很多学校都使用钉钉进行在线授课,但是在钉钉里面点击下载群直播回放的时候却发现管理员关闭了下载功能,那么,我们在这种情况下应该怎样利用python程序来达到我们下载视频的需求呢?这篇文章会给你答案。...

GitChat 4441

python下载文件进度图表_Python获取下载速度并显示进度条

#!/usr/bin/python3# -*- coding:utf-8 -*-import sysimport timefrom urllib import request'''urllib.urlretrieve 的回调函数:def callbackfunc(blocknum, blocksize, totalsize):@blocknum: 已经下载的数据块@blocksize: 数据块的...

weixin_39645268的博客 304

python爬虫+ffmpeg批量下载ts文件,解密合并成mp4

标题 python爬虫+ffmpeg批量下载ts文件,解密合并成mp4 文章目录标题前言一、分析目标二、寻找url规律三、写代码总结 前言 (第一次写博客,写的不好请见谅哈~~) 目标是大鹏教育里边的直播回放,他的回放是m3u8格式的,还有ts加密,这是分析过后才知道的,大家可以忽略哈,下边会有详细的过程! 一、分析目标 先进站点看看——大鹏教育拿一个免费的课程试试, 进视频F12看代码 可以看到video的链接是blob加密的,这个我查了一下,看不懂,就没在这方面下手,如果有大佬会可以指点一下小

sakura_ting的博客 4332

Coze平台智能体开发实战:打造测试工程师的AI助手

智能体是具备特定身份和能力的AI实体,由大语言模型(LLM)驱动,并通过插件、知识库和工作流扩展其能力。明确的角色定位:可以设定特定身份和专业领域扩展能力:通过插件连接外部工具和服务记忆能力:通过知识库存储和检索专属信息流程化处理:通过工作流执行复杂多步任务通过Coze平台创建测试工程师智能体,可以显著提升测试效率和质量。明确的角色定位:聚焦测试工程师的实际需求丰富的知识库:提供准确的领域知识支持合适的工具集成:通过插件连接现有工具链持续迭代优化:根据反馈不断改进智能体行为自动化测试生成。

hogwarts_beibei的博客 1005

python获得在线视频时长

# coding:utf-8 import struct import requests class Mp4info: def __init__(self, file): self.file = file self.seek = 0 self.duration = 0 self.s = requests.session()...

chen的专栏 3269

ENVI5.3.1使用Landsat 8影像进行辐射定标和大气校正实例操作

ENVI5.3.1使用Landsat 8影像进行辐射定标和大气校正实例操作

PeanutbutterBoh的博客 12万+

Python小技巧|如何获取MP4格式的视频时长

如题,如何获取一个MP4文件格式的视频时长?嗯,对MP4格式的文件进行解析,如果有表示时长的字段,直接读取即可。而我对该格式又不熟悉该怎么办?当然是使用搜索引擎了。果不其然,看到了这个字...

Python3 爬虫实战 1:应对特殊字体,爬取猫眼电影实时排行榜 6182

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6356

springboot+shardingsphere+druid 实现基于时间的水平分表

使用shardingsphere基于时间字段的动态水平分片。

weixin_42207940的博客 2627

Python实现m3u8下载mp4视频原理及源码

Python实现m3u8下载mp4视频原理及源码python下载 m3u8 视频m3u8 视频文件原理python下载 m3u8 视频原理python 实现源码 python下载 m3u8 视频 使用python实现对m3u8视频文件的下载(MP4),下面是我根据个人理解所整理的m3u8文件的原理,以及下载原理和下载的源码,若有错误望大家评论指出 m3u8 视频文件原理 现在一个视频的大小在几百M到几个G,在网上播放视频我们不可能等待一个视频下载完成后再去观看。而是采用一边“缓冲”一边观看的方式,而实现这一

weixin_43832353的博客 8387

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具

还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡

XiaoqiangClub的博客 913

使用 Python 把多个 MP4 合成一个视频

这两天群里有个小伙伴有一个需求, 就是把很多个视频文件 合并成一个. 期间也找了各种软件, 如格式工厂, 但是只能一次合成50个文件, 小伙伴有几千个文件需要合成, 太繁琐; 又比如会声会影, 这个剪辑是很强大, 但是软件也很大, 对电脑配置要求也高. 我只需要拼接功能, 割鸡焉用牛刀? 人生苦短 我用 Python 这两天刚好在学习用 Python 写自动化测试.

weixin_33826268的博客 1万+

【考试大纲】中级多媒体应用设计师考试大纲

中级多媒体应用设计师考试大纲

邓邓子的博客 382

复现论文《Analysis of circulating current mechanism of Grid-forming offshore wind farm based on DRU-HVDC》

该论文研究了基于二极管整流单元(DRU)和低频交流(LFAC)输电的构网型(GFM)海上风电场并网系统中环流的产生机理。由于 DRU 不可控,系统电压与频率依赖于风力发电机(WT)的网侧变流器,当多台 WT 并联运行时,因输出电压幅值、相位、输出阻抗或频率不匹配,会产生基频环流,导致系统损耗增加与稳定性下降。论文通过理论建模与 MATLAB/Simulink 仿真,分析了四种不平衡工况下的环流机理,并指出幅值不平衡和阻抗不平衡引起无功环流,相位不平衡引起有功环流,频率不平衡则引起环流振荡,为后续环流抑制研究

huanghm88的专栏 104

Python3.6:根据m3u8下载mp4视频

m3u8文件格式: #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:19 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-KEY:METHOD=AES-128,URI=“dream_it_possible.key” #EXTINF:12.800000, dream_it_possible0...

硌手的虫子 7784

IgH EtherCAT 从入门到精通:第 3 章 第一次运行 Hello EtherCAT

摘要:启动EtherCAT主站实践指南 本章详细介绍了如何配置和启动EtherCAT主站系统,主要内容包括: 配置文件详解:讲解/etc/ethercat.conf中的关键配置项,包括主网卡指定、冗余备份设置和网卡驱动选择。 启动流程:说明通过systemd服务和手动命令两种方式加载内核模块,重点介绍了ec_master和ec_generic模块的加载顺序及验证方法。 命令行工具:列举ethercat工具的常用命令,如查看主站状态、扫描从站设备、读取PDO/SDO数据等。 示例程序:简要介绍内核态示例min

从事嵌入式linux android驱动开发,拥有全栈能力 311

小白写的用python下载.m3u8链接的视频并转码为MP4格式

引言:网页上大部分视频的格式都为m3u8格式,这种格式的视频就把完整的视频分割成特别多的小片段,然后存在服务器中。本小白因为刚学了python,所以就是试着搞了搞这东西 需要用到的模块如下: #加载需要的模块 import os import sys import requests from imp import reload reload(sys) 获取.m3u8链接 本小白在这里暂不提供...

weixin_42473339的博客 3671

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python爬虫技巧-西瓜视频MP4地址获取

记录一下西瓜视频MP4地址的获取步骤 目标: 指定西瓜视频地址,如https://www.ixigua.com/a6562763969642103303/#mid=6602323830,获取其视频MP4文件的下载地址 以下使用chrome浏览器 开始分析: 首先在浏览器中打开视频页面,打开审查元素(右键-> 审查元素 或 F12)并刷新页面,查看network选项中抓到的包 ...

python学习者的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python在线读取_python 获取在线视频时长,不下载视频

最近有个需求,需要不下载视频,获取到视频的时长,就比如网页上加载视频,视频还没下载完成,就已经能拖动进度条了网站找了一堆,都写得不明就里后来找到1个帖子,讲了下MP4的文件格式,然后通过搜索关键词来获取时长信息时长=duration/time scale只需要知道这两个字段在文件中的位置即可,而且这两个是连续的字段。如图所知,我们找到mvhd,向后偏移12位,第13位到17位就得到了time ...

weixin_39675963的博客 967

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

基于python爬虫下载网站在线视频

流程分析 首先,对爬取流程进行分析,这里我们以某卫视的学习视频为例 代码编写

北风 7292

Python:获取视频时长 - 实践场景

简介:在视频相关测试场景下,例如:有时需要知道全部视频的汇总时长,显然一个个打开并且手工计算耗时耗力,我们可以通过编写脚本进行快速汇总。 获取视频时长的方式: 1、通过subprocess进行获取。 2、通过moviepy库中VideoFileClip获取。 3、通过cv2库获取。 安装: 1、subprocess:无需安装,Python内置。 2、moviepy:pip install moviepy。 3、cv2:pip install opencv-python 准备工序: 1、当前项目新增video

we chat:玩转测试开发 9092

Python OpenCV 保存mp4视频

编码器fourcc设为MP4V,读取输入时的原帧数、宽、高,写入帧

XerCis的博客 2万+

浏览器javascript 下载m3u8视频合成mp4

m3u8download.js download m3u8 URL to mp4 下载m3u8视频合成一个完整的mp4 源码:https://github.com/ccjy88/m3u8download.js 功能 m3u8downloader是在chrome浏览器中运行的html和js,用于下载m3u8视频。 当视频链接比如是https://test-streams.mux.dev/x36xh...

qq_23117711的博客 1万+
上一篇: linux下删除指定crontab定时任务
下一篇: FastAPI 学习之两种应用场景
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值