【python】 油管外挂字幕下载位srt歌词字幕文本文件

news2024/10/6 14:28:35

【python】 油管外挂字幕下载位srt文本文件

案例截图

下载油管外挂字幕使用方法

案例代码

# python程序,可以下youtube视频的字幕文件。输入一个视频的url,就会下载它的字幕文件到一个文件夹里。
# Author WeChat:****请私信,
# Date:2023-8-2,
# Email:ack1024#hotmail.com
# 本软件遵循 Apache License 2.0协议

# 导入需要的模块
import json
import math
import time

import requests
import re
import os
import xml.etree.ElementTree as ElementTree
from html import unescape

# 梯子
proxies = {
    "http": "http://127.0.0.1:10809",
    "https": "http://127.0.0.1:10809",
}
# 请求头
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}


# 定义一个函数,根据视频的url获取字幕的url
def get_subtitle_url(video_url):

    # 发送请求,获取视频页面的源码
    response = requests.get(video_url, proxies=proxies, headers=headers)

    html = response.text

    # 用正则表达式匹配字幕的url
    match = re.search(pattern, html)
    if match:
        # 如果找到了字幕的url,返回它
        subtitle_url = match.group(1)
        return subtitle_url
    else:
        # 如果没有找到字幕的url,返回None
        return None

# 定义一个函数,根据字幕的url下载字幕文件
def download_subtitle(subtitle_url, video_id):

    # 发送请求,获取字幕的内容
    response = requests.get(subtitle_url, proxies=proxies, headers=headers)
    content = response.text

    # 用正则表达式去掉不需要的标签

    content = xml_caption_to_srt(content)

    # 创建一个文件夹,用于存放字幕文件
    folder = 'subtitles'
    if not os.path.exists(folder):
        os.mkdir(folder)

    filename = video_id + '.srt'

    filepath = os.path.join(folder, filename)

    with open(filepath, 'w', encoding='utf-8') as f:
        f.write(content)

    print('已下载字幕文件:' + filepath)

# 根据视频的url下载视频的字幕文件
def download_video_subtitle(video_url):

    video_id = video_url.split('=')[-1]
    print('当前视频id:',video_id)

    # 调用函数,获取字幕的url
    subtitle_url = get_subtitle_url(video_url)

    if not subtitle_url:
        # 如果没有字幕的url,打印提示信息
        print('该视频没有字幕')
        exit(0)

    subtitle_url = '[' + subtitle_url + ']'

    subtitle_urlDics = json.loads(subtitle_url)
    strp = ['序号:' + str(i) + ' ' + subtitle_urlDics[i]['name']['simpleText'] for i in range(len(subtitle_urlDics))]
    for i in strp:
        print(i)

    choiceIndex = int(input('请输入要下载的语言(最前面数字序号):'))

    subtitle_url = subtitle_urlDics[choiceIndex]['baseUrl']

    if subtitle_url:
        # 如果有字幕的url,调用函数,下载字幕文件
        download_subtitle(subtitle_url, video_id)
    else:
        # 如果没有字幕的url,打印提示信息
        print('该视频没有字幕')

def xml_caption_to_srt(xml_captions: str) -> str:
    segments = []
    root = ElementTree.fromstring(xml_captions)
    for i, child in enumerate(list(root)):
        caption = unescape(text.replace("\n", " ").replace("  ", " "), )
        try:
            duration = float(child.attrib["dur"])
        except KeyError:
            duration = 0.0
        start = float(child.attrib["start"])
        end = start + duration
        sequence_number = i + 1  # convert from 0-indexed to 1.
        line = "{seq}\n{start} --> {end}\n{text}\n".format(
            seq=sequence_number,
            start=float_to_srt_time_format(start),
            end=float_to_srt_time_format(end),
            text=caption,
        )
        segments.append(line)
    return "\n".join(segments).strip()

def float_to_srt_time_format(d: float) -> str:
    time_fmt = time.strftime("%H:%M:%S,", time.gmtime(whole))
    ms = f"{fraction:.3f}".replace("0.", "")
    return time_fmt + ms

# 输入一个视频的url,下载它的字幕文件
if __name__ == '__main__':

    while True:
        video_url = input('请输入一个youtube视频的网址(例子:https://www.youtube.com/watch?v=wjTn)先复制再回来右击即可:')
        # video_url = "https://www.youtube.com/watch?v=wjTn_Ek"
        download_video_subtitle(video_url)

        if input('请输入0退出:') == 0:
            exit(0)



以上为部分代码哈! 隐藏的都是正则部分,会Python的都能自己补全哈!超简单的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/848843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全国首创!法大大助力深圳率先在企业开办领域引入音视频双录签名模式

为了进一步规范市场主体登记行为,提高企业办事便利度,近日深圳引入录音录像双录签名新模式,实现用户无介质全流程快捷申报,进一步降低了开办企业成本,为企业开办注入加速度。 无需法人、监事等企业负责人再到业务办理大…

Python - series和dataframe的关系

目录 1 series和dataframe的关系 2 创建一个df 3 用index过滤不同行 4 用row 过滤 5 用series构建dataframe 1 series和dataframe的关系 类似集合与元素的关系DataFrame中的一行or一列的取值,返回的结果都是series通过几个series,可以创建一个da…

Redis的安装方法与基本操作

目录 前言 一、REDIS概述 二、REDIS安装 1、编译安装 2.yum安装 三、Redis的目录结构 四、基础命令解析 五、在一台服务器上启动多个redis 六、数据库的基本操作 (一)登录数据库 (二)基础命令 七、Redis持久化 (一&…

【EI复现】梯级水光互补系统最大化可消纳电量期望短期优化调度模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Tomcat线程池原理

1. 一个 SpringBoot 项目能同时处理多少请求?tomcat容器, 200 次。 2. 怎么来的? 而点击这些线程,查看其堆栈消息,可以看到 Tomcat、threads、ThreadPoolExecutor 等关键字 基于“短时间内有 200 个请求被立马处理…

【Docker】Docker中network的概要、常用命令、网络模式以及底层ip和容器映射变化的详细讲解

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&…

Java课题笔记~ 关于错误与异常

非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求程序员必须处理这些异常。在运行阶段,倘若发生Error则虚拟机几乎崩溃,倘若发生RuntimeEx…

会这个Python的测试员,工作都不会太差!

Python语言得天独厚的优势使之在业界的火热程度有增无减,尤其是在经历了互联网,物联网,云计算,大数据,人工智能等浪潮的推动下,其关注度,普适度一路走高。 对于测试人员来说,很多人…

2023上半年京东吸尘器行业品牌销售排行榜(京东数据挖掘)

如今,伴随生活节奏加快、懒人经济兴起,致力于解放双手的清洁类电器产品愈加受到用户青睐。作为清洁类电器行业的细分品类之一,在懒人经济的市场红利下,吸尘器也受到不少用户的喜爱。不过在扫地机器人、洗地机等新兴品类的冲击下&a…

华三H3C S5120V3交换机的配置之组建IRF

IRF(Intelligent Resilient Framework,智能弹性架构),是华三交换机实现虚拟堆叠的一种技术,其核心思想是将多台交换机连接在一起,虚拟成一台交换机,进而实现统一管理。和传统的堆叠概念不同&…

基于连续Ziegler_Nichols的频域响应pid整定

连续Ziegler_Nichols的频域响应pid整定 Ziegler_Nichols频域响应pid整定的方法是基于稳定性分析的频域响应pid整定方法。该方法整定的思想是:对于给定的被控对象传递函数,可以得到其根轨迹,对应穿越Jw轴的点,增益即为Km&#xff…

【Java可执行命令】(二十)堆转储快照文件及堆信息查看工具 jmap:生成多格式堆转储文件、打印类加载器信息及查看共享对象映射信息 ~

Java可执行命令之jmap 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 生成堆转储文件3.3 执行jmap命令查看内存使用情况3.4 执行jmap命令打印对象统计信息 4️⃣ 应用场景🌾 总结 1️⃣ 概念 jmap 是 Java Development Kit(JDK)自带…

【Kubernetes】Kubernetes之YAML文件详解

YAML 一、YAML 的概述1. Kubernetes 支持资源管理格式2. YAML 语法格式 二、YAML 文件1. 如何获取 api 资源相关信息2. 编写资源配置文件2.1 手动编写 yaml 文件详解K8S中的port 2.2 使用镜像生成 yaml 文件2.3 根据现有资源导出 yaml 文件 总结1. 如何获取资源清单文件&#x…

[LeetCode - Python]349. 两个数组的交集(Easy);350. 两个数组的交集 II(Easy)

题目: 349. 两个数组的交集(Easy) 代码 1.哈希表 set清重 两次遍历: class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:dict {}ret []for i in set(nums1) :if i not in dict:dict[i] 0 for j in …

selenium+python —— 实现基本自动化测试

安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回…

centos7 ESXi 磁盘扩充容量

1、背景 有一天,突然程序报空间不足了。。。。。。 2023-06-23 02:26:51.631 UTC [26190] LOG: could not open temporary statistics file "pg_stat_tmp/global.tmp": No space left on device 2023-06-23 02:26:51.631 UTC [26190] LOG: could not …

恒运资本:2倍牛股突然闪崩,业绩创新高股出炉,最高日赚近2亿

上半年哪些公司净利润有望创前史新高? 2倍牛股单季成绩环比下滑,早盘股价大跳水 A股半年报进入发表高峰期,仅8月7日晚间,就有超30家公司发表半年报和成绩预告状况,超七成净利润同比增加。净利润增速最高的是翔港科技&…

基于Spring Boot的影视点播网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的影视点播网站设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java springboot…

Flowable-多实例

目录 概述概念多实例配置图形标记XML内容界面操作视频教程 BPMN2.0 中引入了多实例的概念,它是在业务流程中定义“重复”环节的一个方法,Flowable 对其予以了支持。配置为多实例的活动在流程运行时会创建多个活动实例,既可以顺序依次执行也 可…

海外市场裂变营销:打造爆炸式增长的成功之道

随着全球化的加速发展,越来越多的品牌开始将目光投向海外市场。然而,在激烈的国际竞争中脱颖而出,并在海外市场取得成功并不容易。在这样的背景下,裂变营销成为了一个备受关注的策略,它能够帮助品牌在海外市场快速拓展…