1c7 / Youtube-Auto-Subtitle-Download

(no longer maintained)(停止维护)功能:下载 Youtube 字幕,Download Youtube Subtitles(备注:因为不能带来收入,而且我自己也没有下载字幕的需求了,所以不再维护,除非情况有所改变)
https://greasyfork.org/zh-CN/scripts/5368-youtube-subtitle-downloader-v20
820 stars 141 forks source link

可以提供下载原版自动字幕json或vtt文件的功能吗 #12

Closed BingLingGroup closed 3 years ago

BingLingGroup commented 3 years ago

我有工具可以人工处理字词级时间戳,这样方便在分割文本的同时就把时间轴也分割了。如果按照程序自带的定长度分句相当于忽略了字词级时间戳,同时也给后续处理带来了困难,毕竟无论是中文字幕,还是双语字幕都希望时间轴和英文原文有一定的对应关系。

youtube-dl也可以下载vtt自动字幕,但不能下载json自动字幕。感觉vtt和json不完全一样,个别视频如果加了人工字幕,似乎会下不到带有字词级时间戳的vtt自动字幕,但在控制台里找到的json自动字幕仍然有字词级时间戳,所以还是希望能有一个一键的工具方便使用。

另外,理论上,如果有自然语言处理的程序,可以直接给文本分句的话,利用字词级时间戳,就可以直接自动分割时间轴了,更方便制作双语字幕。当然这与本issue涉及的主题不太相关,我只是略微提一下,因为youtube自动字幕最让人头疼的就在于只有字词级时间戳,没有句子级时间戳。

1c7 commented 3 years ago

给个目标样品看看 就是 json 和 vtt 文件里头应该长啥样 另外就是理论上 vtt 和 srt 是很类似的(格式)现有的 srt 下载应该已经够用了 专门要 vtt 的意义是啥?

1c7 commented 3 years ago

总之要的是一个个词的 json ?

1c7 commented 3 years ago

给几个视频链接拿来测试用

BingLingGroup commented 3 years ago

我说的是原版的json,就是youtube原本的自动字幕json格式问就,应该就是你处理的原版json,就是在控制台里搜索timedtext得到的。

比如 https://www.youtube.com/api/timedtext?v=zvvzvXb2Awc&asr_langs=de%2Cen%2Ces%2Cfr%2Cit%2Cja%2Cko%2Cnl%2Cpt%2Cru&caps=asr&exp=xftt&xorp=true&xoaf=5&hl=zh-CN&ip=0.0.0.0&ipbits=0&expire=1613905227&sparams=ip%2Cipbits%2Cexpire%2Cv%2Casr_langs%2Ccaps%2Cexp%2Cxorp%2Cxoaf&signature=E5D6BA0C82E162BCF3C6B050ABD17A5992B5ADBA.4FBEDAD65C7ED37ED4320D5221DC7C397152113A&key=yt8&kind=asr&lang=en&fmt=json3&xorb=2&xobt=3&xovt=3

在浏览器控制台-network中搜索timedtext即能找到。

BingLingGroup commented 3 years ago

意义是这样的,一般制作双语字幕,英文字幕要考虑句子意思的完整性,以方便翻译后的中文字幕与之对应,同时还要考虑句子不能太长,不能折行影响画面。所以就需要一定的断句。

但是定长度字幕时间轴和文本都是混乱的,如果去调整就要花费很多时间。现在如果借助字词级时间戳,使用类似 https://github.com/Sofronio/YouTubeTimeLineGenerator 的工具(当然我自己也有写专门的工具,可以直接读 https://github.com/1c7/Youtube-Auto-Subtitle-Download/issues/12#issuecomment-782792621 所说的json格式来处理),只要花1.2-1.5倍视频时间就可以调整好分句,从而得到相对准确的时间轴和准确的文本分句。

我知道很多搬运工或者翻译对英文字幕的质量要求不高,但如果想做高质量的双语字幕,准确的时间轴和恰当的文本分句是必须要做的。

1c7 commented 3 years ago

大致明白了。 现在有2个选择,

  1. 给你提供原版的格式,没有任何改动:

image

  1. 经过处理的,格式更加简单(开始时间(毫秒),结束时间(毫秒),词):
    {
    "data": [{
            "startTime": 0,
            "endTime": 1000,
            "text": "how"
        },
        {
            "startTime": 1000,
            "endTime": 1400,
            "text": "land"
        },
        {
            "startTime": 1400,
            "endTime": 1500,
            "text": "on"
        },
        {
            "startTime": 1500,
            "endTime": 1700,
            "text": "mars"
        }
    ]
    }
1c7 commented 3 years ago

顺带一说"完整字幕" https://www.youtube.com/watch?v=OrhQmxK7s5A image

https://www.youtube.com/api/timedtext?v=OrhQmxK7s5A&asr_langs=de%2Cen%2Ces%2Cfr%2Cit%2Cja%2Cko%2Cnl%2Cpt%2Cru&caps=asr&exp=xftt&xorp=true&xoaf=5&hl=zh-CN&ip=0.0.0.0&ipbits=0&expire=1613906929&sparams=ip%2Cipbits%2Cexpire%2Cv%2Casr_langs%2Ccaps%2Cexp%2Cxorp%2Cxoaf&signature=22EE90564E00CF0DB2694C77DA49E424A33D2490.128641EA28CD4E318558C9BBE5437CA97B4E8DB7&key=yt8&lang=en&fmt=json3&xorb=2&xobt=3&xovt=3

只有一整句的,没有一个个词的。 所以"字词级"只适用于自动字幕。

1c7 commented 3 years ago

在做了,等我大概20分钟-1个小时

BingLingGroup commented 3 years ago

原版就可以,不需要简化。json只要自动字幕的,本来也是要字词级时间戳的,整句的搞json没意义。

1c7 commented 3 years ago

可以了,你试一下 https://greasyfork.org/zh-CN/scripts/422083-youtube-%E4%B8%8B%E8%BD%BD%E8%87%AA%E5%8A%A8%E5%AD%97%E5%B9%95%E7%9A%84%E5%AD%97%E8%AF%8D%E7%BA%A7-json

image

image

BingLingGroup commented 3 years ago

我试了,很好,非常感谢。

1c7 commented 3 years ago

image 好奇问一下你是推荐给了其他人用吗? 今天看了下总安装量有148个。他们都是 https://github.com/Sofronio/YouTubeTimeLineGenerator 的用户?

工作流程是: 从这个油猴脚本得到 .json 之后交给 YouTubeTimeLineGenerator 做合并得到 .srt?

就是好奇问问而已,因为我以为安装量不会超过10个。

BingLingGroup commented 3 years ago

我是在 https://github.com/Sofronio/YouTubeTimeLineGenerator/issues/7#issuecomment-791903519 这里提了一下,其他地方我就不清楚了 我自己写的工具和这个流程是差不多的,做合并的过程实际上是手动的,只是借助这样一个工具把文本抽出来,然后在我手动分割完了以后,再把文本读入,就得到了同时在时间戳和文本上都分割了的结果,并导出成srt或者ass

1c7 commented 3 years ago

嗯,好的,明白了~