吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6265|回复: 23
收起左侧

[Python 转载] 提取剪映字幕为srt

  [复制链接]
felixzhao1111 发表于 2021-12-25 11:55
本帖最后由 felixzhao1111 于 2021-12-25 21:14 编辑

目前仅支持Windows平台2.5.1以及之前版本的剪映
主要功能是可以配合剪映的识别字幕功能
将剪映最后一次打开的项目中的字幕转换为srt字幕并保存

JYZM.png

[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
"""
本程序基于Python3编写,已适配2.5.1版本剪映
"""
from getpass import getuser
from os import path, walk
from json import load
from re import compile
# 自定义srt字幕的保存路径包括文件名
SAVE_FILE_PATH = '剪映提取字幕.srt'


def _formatting_time(time_int):
    # 使用正则表达式处理时间格式化问题
    if time_int == 0:
        return '00:00:00,000'
    p = compile(r'(\d*)(\d{3})\d{3}')
    res = p.findall(str(time_int))[0]
    if res[0] == '':
        hms = '00:00:00'
    else:
        h = 0
        m = 0
        s = int(res[0])
        while s >= 60:
            m += 1
            s -= 60
        while m >= 60:
            h += 1
            m -= 60
        while h >= 24:
            exit('暂不支持超过24小时的字幕文件转换')
        hms = ':'.join((str(h).zfill(2), str(m).zfill(2), str(s).zfill(2)))
    return ','.join((hms, res[1]))


def formatting_time(start, end):
    # 拼接时间格式化后的字符串
    return ' --> '.join((_formatting_time(start), _formatting_time(end)))


def main():
    # 取得电脑的用户名,用来获取剪映缓存文件夹的绝对路径
    username = getuser()
    # 拼接出剪映缓存文件夹的绝对路径
    jy_cache_path = f'C:/Users/{username}/AppData/Local/JianyingPro/User Data/Projects/com.lveditor.draft'
    # 拿到最后一次打开的项目文件信息(内含字幕信息)
    info_file_path = ''
    if path.exists(jy_cache_path):
        tup = walk(jy_cache_path)
        for dirpath, dirnames, filenames in tup:
            if 'root_meta_info.json' in filenames:
                info_file_path = f'{jy_cache_path}/root_meta_info.json'
            elif 'root_draft_meta_info.json' in filenames:
                info_file_path = f'{jy_cache_path}/root_draft_meta_info.json'
    if info_file_path:
        with open(info_file_path, 'r', encoding='utf-8') as f:
            sub_file_path = (load(f)['all_draft_store'][0]['draft_fold_path'])
        # 打开json文件并将其转换为srt文件
        if path.exists(sub_file_path):
            with open(f'{sub_file_path}/draft_content.json', 'r', encoding='utf-8') as f:
                sub_file_json = load(f)
                time_list = []
                content_list = []
                for i in sub_file_json['tracks'][1]['segments']:
                    start_time = int(i['target_timerange']['start'])
                    end_time = int(i['target_timerange']['start'] + i['target_timerange']['duration'])
                    time_list.append(formatting_time(start_time, end_time))
                for i in sub_file_json['materials']['texts']:
                    content_list.append(i['content'])
                index = 0
                # 保存字幕信息到文件中
                with open(SAVE_FILE_PATH, 'w', encoding='utf-8') as srt:
                    while index < len(time_list):
                        srt.write(f'{index + 1}\n{time_list[index]}\n{content_list[index]}\n\n')
                        index += 1


if __name__ == '__main__':
    main()

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
yjn866y + 1 + 1 谢谢@Thanks!
iferencz + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xyz52pojie + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| felixzhao1111 发表于 2021-12-25 21:18
weliong 发表于 2021-12-25 13:29
论坛里 之前好像见过类似的功能 而且已经有成型软件了。。。

本来就几行代码的事情没必要做成一个软件,那些软件不给你看源代码,除了提取字幕你能保证他不做其他的事情吗,这个东西发出来就是为了学习交流的目的
yjn866y 发表于 2022-1-2 11:46
本帖最后由 yjn866y 于 2022-1-2 11:50 编辑
lxf906 发表于 2021-12-25 20:49
FileNotFoundError: [Errno 2] No such file or directory: 'C:/Users/Administrator/AppData/Local/Jianyi ...
可能是程序没提取到文件,,也可能是,你还没有使用剪映提取字幕,因些没有文件,
你可以看一下下面的路径对不对,里面有没有文件,
没有话就去运行剪映,提取一下字幕,有文件了就不会报错了


红字的路径要改成你自己的用户名
C:/Users/Administrator(这里换成你自己的用户名)/AppData/Local/JianyingPro/User Data/Projects/com.lveditor.draft/202112252031\\draft_content.json'
weliong 发表于 2021-12-25 13:29
论坛里 之前好像见过类似的功能 而且已经有成型软件了。。。
xyz52pojie 发表于 2021-12-25 13:37
谢谢楼主
xyz52pojie 发表于 2021-12-25 13:57
IndexError: list index out of range
大佬 报错了
 楼主| felixzhao1111 发表于 2021-12-25 18:36
xyz52pojie 发表于 2021-12-25 13:57
IndexError: list index out of range
大佬 报错了

稍等我看看
 楼主| felixzhao1111 发表于 2021-12-25 19:17
xyz52pojie 发表于 2021-12-25 13:57
IndexError: list index out of range
大佬 报错了

我这边没有报错,你重新扒一下代码吧,我有些小修改
lxf906 发表于 2021-12-25 20:49
FileNotFoundError: [Errno 2] No such file or directory: 'C:/Users/Administrator/AppData/Local/JianyingPro/User Data/Projects/com.lveditor.draft/202112252031\\draft_content.json'

大佬报错!
 楼主| felixzhao1111 发表于 2021-12-25 21:16
lxf906 发表于 2021-12-25 20:49
FileNotFoundError: [Errno 2] No such file or directory: 'C:/Users/Administrator/AppData/Local/Jianyi ...

有可能是路径拼接的函数有问题,我改了一下代码直接拼接字符串,晚点审核过了你再扒一遍试试
xiaozhuge 发表于 2021-12-26 12:11
不错,确实有人做出了软件,但楼主放出代码也非常好啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 05:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表