LinkedIn Learning 字幕中文翻译

LinkedIn Learning 字幕中文翻译脚本

< Feedback on LinkedIn Learning 字幕中文翻译

Review: Good - script works

§
Posted: 2019-03-16

有没有可能导出字幕文件供离线使用

脚本当前已经非常好用,感谢开发付出的辛苦! 国内访问lynda的速度不稳定,慢的时候很卡。希望脚本未来能够支持翻译后的字幕下载,这样就能供视频下载后离线使用了。 期待越来越好。

journey_adAuthor
§
Posted: 2019-03-19
Edited: 2019-03-22

字幕下载功能我之后有空了加一下吧🌝

暂时的话视频和字幕可以用这个工具下载 r0oth3x49/lynda-dl 字幕翻译的话需要对 _extract.py 稍作修改,这是一个比较粗糙的实现:

# 添加两个方法并修改 _fix_subtitles 方法
def _fix_subtitles(self, subs):
    srt = ''
    seq_counter = 0
    t = []
    i = 0

    for pos in range(0, len(subs) - 1):
        seq_current = subs[pos]
        text = seq_current['Caption'].strip()
        if text:
            i += 1
            text = re.sub(r'\r?\n|\r', ' ', text).strip()
            t.append(text)
    r = self._translate('\n'.join(t)).strip().split('\n')

    for pos in range(0, len(subs) - 1):
        seq_current = subs[pos]
        m_current = re.match(self._TIMECODE_REGEX, seq_current['Timecode'])
        if m_current is None:
            continue
        seq_next = subs[pos + 1]
        m_next = re.match(self._TIMECODE_REGEX, seq_next['Timecode'])
        if m_next is None:
            continue
        appear_time = m_current.group('timecode')
        disappear_time = m_next.group('timecode')
        text = seq_current['Caption'].strip()
        if text:
            seq_counter += 1
            text = re.sub(r'\r?\n|\r', ' ', text).strip()
            srt += '%s\r\n%s --> %s\r\n%s\r\n%s\r\n\r\n' % (seq_counter, appear_time, disappear_time, r[seq_counter], text)
    if srt:
        return srt

def _translate(self, text):
    textArr = ['']
    resArr = ['']
    if(len(text) > 5000):
        strArr = text.split("\n")
        i = 0
        for str in strArr:
            textArr[i] = textArr[i] or ''
            if(len(textArr[i] + str) > (i + 1) * 5000):
                i=i+1
                textArr.append('')
            textArr[i] += str + "\n"
    else:
        textArr[0] = text
    for en in textArr:
        resArr.append(self._caiyun(en))
    result = '\n'.join(resArr)
    return result

def _caiyun(self, text):
    data = json.dumps({
        "source": text.split("\n"),
        "trans_type": "en2zh",
        "request_id": "web_fanyi",
        "media": "text",
        "os_type": "web",
        "dict": 1,
        "cached": 1,
        "replaced": 1
    })
    headers = {
        "accept": "application/json",
        "content-type": "application/json; charset=UTF-8",
        "X-Authorization": "token:cy4fgbil24jucmh8jfr5"
    }
    r = requests.post("https://api.interpreter.caiyunai.com/v1/translator", headers=headers, data=data)
    result = json.loads(r.text)
    return "\n".join(result['target'])

journey_adAuthor
§
Posted: 2019-03-22

字幕下载功能已在 0.3.0 版本中加入

§
Posted: 2019-03-31
Edited: 2019-04-01

感谢@journey_ad 这么快就实现了下载功能! 使用中发现一个小问题,下载的字幕文件中的时间格式有误,秒后边应该是逗号而不是句号 如应该是00:00:00,006 --> 00:00:01,005,现在是00:00:00.06 --> 00:00:01.05 否则播放器不认 望能修复,谢谢!

journey_adAuthor
§
Posted: 2019-04-01

0.3.2 版本中修复了时间格式

§
Posted: 2019-04-02

逗号的问题修复了,不过怪我疏忽,还有一个格式问题上次没发现,就是秒的小数位应该是3位而不是2位,否则播放器还是不认 :p

journey_adAuthor
§
Posted: 2019-04-02

什么播放器,这么严格的🌝

§
Posted: 2019-04-04
Edited: 2019-04-04

@journey_ad 说道: 0.3.2 版本中修复了时间格式

大佬你好哇,非常感谢你的脚本啊。非常非常非常好用。

§
Posted: 2019-04-06

@journey_ad 说道: 什么播放器,这么严格的🌝

Mac平台的movist,其他播放器还没试过

因为从上一个版本开始,插件在我这里就不能正常运行了,这个问题我另开一帖吧

journey_adAuthor
§
Posted: 2019-04-07

macOS 推荐使用 IINA

§
Posted: 2019-04-08

@journey_ad 说道: macOS 推荐使用 IINA

好的,谢谢!

Post reply

Sign in to post a reply.