必剪软件字幕提取工具

[复制链接]
114 |11
发表于 昨天 22:48 | 显示全部楼层 |阅读模式
ak360 建议,加了一种格式



必剪字幕提取工具.zip(247.8 KB, 下载次数: 393)2025-4-11 11:30 上传
点击文件名下载附件












------------------------------------------------------------------------老板看中个演讲视频,想把里面的内容提取成文本,百度了一下,发现哔哩上有个软件,但是要收费,
所以有了这个软件,无非是json的解析,技术难度不大,希望能给同样需求的伙伴提供些帮助



转换精度有限,取决必剪,不过大部分还可以,稍加改动即可.

1.使用必剪软件识别字幕

2.看下草稿的保存路径

3.到相应文件夹下,找到字幕文件

4.随便选择个比较大的文件,拖入软件进行转换

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 昨天 22:49 | 显示全部楼层
为啥没反应
回复

使用道具 举报

发表于 昨天 22:50 | 显示全部楼层
问了DS,他给了这段代码,测试一下很好用,给需要的朋友。
[Python]  
  1. import os
  2. import json
  3. from datetime import datetime
  4. def find_target_json():
  5.     base_dir = r"C:\Users\174501259\Documents\Bcut Drafts"
  6.     target_files = []
  7.    
  8.     for root, dirs, files in os.walk(base_dir):
  9.         for file in files:
  10.             if file.lower().endswith(".json") and file.lower() != "draftinfo.json":
  11.                 full_path = os.path.join(root, file)
  12.                 mtime = os.path.getmtime(full_path)
  13.                 size = os.path.getsize(full_path)
  14.                 target_files.append((full_path, mtime, size))
  15.    
  16.     if not target_files:
  17.         return None
  18.     # 按修改时间降序和文件大小降序排序
  19.     target_files.sort(key=lambda x: (-x[1], -x[2]))
  20.     return target_files[0][0]
  21. def parse_subtitles(json_path):
  22.     with open(json_path, 'r', encoding='utf-8') as f:
  23.         data = json.load(f)
  24.    
  25.     subtitles = []
  26.     for track in data.get('tracks', []):
  27.         if track.get('BTrackType') == 0:  # 只处理字幕轨道
  28.             for clip in track.get('clips', []):
  29.                 asset = clip.get('AssetInfo', {})
  30.                 content = asset.get('content', '')
  31.                 in_point = clip.get('inPoint', 0)
  32.                 duration = clip.get('duration', 0)
  33.                
  34.                 # 假设时间单位为毫秒
  35.                 start = in_point
  36.                 end = in_point + duration
  37.                
  38.                 subtitles.append({
  39.                     'start': start,
  40.                     'end': end,
  41.                     'content': content
  42.                 })
  43.    
  44.     # 按开始时间排序
  45.     subtitles.sort(key=lambda x: x['start'])
  46.     return subtitles
  47. def ms_to_srt_time(ms):
  48.     hours = ms // 3600000
  49.     ms %= 3600000
  50.     minutes = ms // 60000
  51.     ms %= 60000
  52.     seconds = ms // 1000
  53.     milliseconds = ms % 1000
  54.     return f"{hours:02d}:{minutes:02d}:{seconds:02d},{milliseconds:03d}"
  55. def create_srt(subtitles):
  56.     srt_content = []
  57.     for i, sub in enumerate(subtitles, 1):
  58.         start = ms_to_srt_time(sub['start'])
  59.         end = ms_to_srt_time(sub['end'])
  60.         srt_content.append(f"{i}\n{start} --> {end}\n{sub['content']}\n")
  61.    
  62.     return "\n".join(srt_content)
  63. def main():
  64.     if os.path.exists("subtitles.srt"):
  65.         return
  66.    
  67.     json_path = find_target_json()
  68.     if not json_path:
  69.         return
  70.    
  71.     subtitles = parse_subtitles(json_path)
  72.     if not subtitles:
  73.         return
  74.    
  75.     srt_content = create_srt(subtitles)
  76.     with open("subtitles.srt", 'w', encoding='utf-8-sig') as f:
  77.         f.write(srt_content)
  78. if __name__ == "__main__":
  79.     main()
复制代码
回复

使用道具 举报

发表于 昨天 22:50 | 显示全部楼层
下载学习下,感谢分享
回复

使用道具 举报

发表于 昨天 22:50 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 昨天 22:50 | 显示全部楼层
我记得剪映也有,也是免费提取和导出,现在也是收费了?
回复

使用道具 举报

发表于 昨天 22:51 | 显示全部楼层
很不错的提取字幕软件,感谢分享
回复

使用道具 举报

发表于 昨天 22:51 | 显示全部楼层
能加上时间吗
回复

使用道具 举报

发表于 昨天 22:52 | 显示全部楼层
剪映没用过不太清楚
回复

使用道具 举报

发表于 昨天 22:52 | 显示全部楼层
有加时间的选项啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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