python3实战之字幕vtt与字母srt的相互转换
关于
- 0.本文将介绍一个字幕格式vtt与srt相互转换的py脚本。
- 1.代码大部分出自: https://www.cnblogs.com/BigJ/p/vtt_srt.html
- 2.但是自己针对上面的代码做了修改和增加。原始代码不支持批量转换,改为增加支持批量转换:
- 2.1 支持批量转换
- 2.2 还可以继续完善功能,比如用格式:
python3 XXX.py [源文件格式] [源目标文件路径] [目标文件输出路径]
目前还不支持这个格式,后面再做优化。以后再做吧
我的测试环境
- os: ubuntu
Linux xxxx-virtual-machine 5.4.0-47-generic #51-Ubuntu SMP Fri Sep 4 19:50:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
- python3
Python 3.8.2
用法
1. vtt -> srt
找一个适合你的文件夹,下面的这些操作都是基于这个文件夹:
- 1.1 创建目录vtt和srt
- 1.2 将vtt文件放入vtt目录,
- 1.3 创建main.py文件,文件内容最后一个章节的源码 。
- 1.4 将vtt2srt_exec()添加到代码if name == 'main':的下一行
- 1.5 执行代命令
python3 main.py
- 1.6 打开srt目录,查看输出。
2. srt -> vtt
- 用法与 章节1类似。
- 不同的是:
- 1.4步骤替换为:srt2vtt_exec()添加到代码if name == 'main':的下一行 、
- 1.6步骤替换为: 打开vtt目录查看输出。
完整源码
import os
import sys
import re
def get_file_name(dir, file_extension):
f_list = os.listdir(dir)
result_list = []
for file_name in f_list:
if os.path.splitext(file_name)[1] == file_extension:
result_list.append(os.path.join(dir, file_name))
return result_list
def vtt2srt(file_name, output_dir):
content = open(file_name, "r", encoding="utf-8").read()
# 删除WEBVTT行
content = content.replace("WEBVTT", "", 1)
content = content.replace("Kind: captions", "", 1)
content = content.replace("Language: en-GB", "", 1)
# 替换“.”为“,”
content = re.sub("(\d{2}:\d{2}:\d{2}).(\d{3})", lambda m: m.group(1) + ',' + m.group(2), content)
# content = content.replace(",", ".")
output_file = output_dir + file_name[file_name.rfind("/"):]
output_file = os.path.splitext(output_file)[0] + '.srt'
open(output_file, "w", encoding="utf-8").write(content)
def srt2vtt(file_name):
content = open(file_name, "r", encoding="utf-8").read()
# 添加WEBVTT行
content = "WEBVTT\n\n" + content
# 替换“,”为“.”
content = re.sub("(\d{2}:\d{2}:\d{2}),(\d{3})", lambda m: m.group(1) + '.' + m.group(2), content)
# output_file = os.path.splitext(file_name)[0] + '.vtt'
output_file = output_dir + file_name[file_name.rfind("/"):]
output_file = os.path.splitext(output_file)[0] + '.vtt'
open(output_file, "w", encoding="utf-8").write(content)
# to get all .vtt files from cur_path
def file_name(file_dir, file_ext):
L=[]
for root, dirs, files in os.walk(file_dir):
for file in files:
if os.path.splitext(file)[1] == file_ext:
L.append(os.path.join(root, file))
return L
def vtt2srt_exec():
# 1.to get current directory
cur_path = os.getcwd() + "/vtt"
# 2. output folder
output_dir = os.getcwd() + "/srt"
if (False == os.path.exists(output_dir, ".vtt")):
os.mkdir(output_dir)
# 3. to convert
name_list = file_name(cur_path)
for file_vtt in name_list:
vtt2srt(file_vtt, output_dir)
def srt2vtt_exec():
# 1.to get current directory
cur_path = os.getcwd() + "/srt"
# 2. output folder
output_dir = os.getcwd() + "/vtt"
if (False == os.path.exists(output_dir)):
os.mkdir(output_dir)
# 3. to convert
name_list = file_name(cur_path, ".srt")
for file_srt in name_list:
srt2vtt(file_srt, output_dir)
if __name__ == '__main__':
# args = sys.argv
vtt2srt_exec()
python3实战之字幕vtt与字母srt的相互转换的更多相关文章
- MapReduce实战项目:查找相同字母组成的字谜
实战项目:查找相同字母组成的字谜 项目需求:一本英文书籍中包含有成千上万个单词或者短语,现在我们要从中找出相同字母组成的所有单词. 数据集和期望结果举例: 思路分析: 1)在Map阶段,对每个word ...
- Python3实战Spark大数据分析及调度 (网盘分享)
Python3实战Spark大数据分析及调度 搜索QQ号直接加群获取其它学习资料:715301384 部分课程截图: 链接:https://pan.baidu.com/s/12VDmdhN4hr7yp ...
- selenium3与Python3实战 web自动化测试框架 ☝☝☝
selenium3与Python3实战 web自动化测试框架 selenium3与Python3实战 web自动化测试框架 学习 教程 一.环境搭建 1.selenium环境搭建 Client: py ...
- Python3实战spark大数据分析及调度 ☝☝☝
Python3实战spark大数据分析及调度 ☝☝☝ 一.实例分析 1.1 数据 student.txt 1.2 代码 二.代码解析 2.1函数解析 2.1.1 collect() RDD的特性 在 ...
- selenium3与Python3实战 web自动化测试框架✍✍✍
selenium3与Python3实战 web自动化测试框架 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...
- Python3实战spark大数据分析及调度✍✍✍
Python3实战spark大数据分析及调度 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- 字幕文件 WebVTT 与 srt 之间的互相转化
1. WebVTT 2 srt 1. 用记事本打开 .vtt 文件: 2. 在记事本中点击 编辑 -> 替换 -> 查找内容中输入".",替换为中输入",& ...
- Python3实战系列之六(获取印度售后数据项目)
问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:此篇我们试着把python程序打包成.exe程序.这样就可以在服务器上运行了.实现首篇计划列表功能模块的第三步: 3..exe文件能在服务器上 ...
- Python3实战系列之二(获取印度售后数据项目)
问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:安装python和pycharm.要编写并运行python程序就需要电脑有开发工具和运行环境,所以此篇就是安装编辑和运行python程序的软件 ...
随机推荐
- 【豆科基因组】利马豆/洋扁豆Lima bean(Phaseolus lunatus L.)基因组2021NC
目录 一.来源 二.结果 扁豆的染色体水平高质量组装 扁豆相关农艺性状的QTL定位 直系/旁系同源的演化和物种形成事件 与农艺性状相关基因的直系同源物 群体结构分析揭示扁豆遗传簇 豆荚发育过程中的基因 ...
- Oracle——listener数据库监听 lsnrctl
lsnrctl(Listener Control)是一个SQL*Net工具,用于控制数据库listener,这个工具提供了命令用于控制listener的启动.停止,查看listener的状态,改变li ...
- 46.Valid Parentheses
Valid Parentheses My Submissions QuestionEditorial Solution Total Accepted: 106346 Total Submissions ...
- 🏆【Alibaba中间件技术系列】「Sentinel技术专题」分布式系统的流量防卫兵的基本介绍(入门源码介绍)
推荐资料 官方文档 官方demo Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护 ...
- day17 阶段测验
题目 1.找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写 有以下几种方法: [root@localhost ~]# grep -iE "^s" /pro ...
- css系列,选择器权重计算方式
CSS选择器分基本选择器(元素选择器,类选择器,通配符选择器,ID选择器,关系选择器), 属性选择器,伪类选择器,伪元素选择器,以及一些特殊选择器,如has,not等. 在CSS中,权重决定了哪些CS ...
- Stream.toMap
Collectors类的tomap方法将流收集到映射实例中. list 转 map collection.stream().collect(Collectors.toMap(User::getId, ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(1. 基础概念与架构图)
1.简介 1.1. 背景:公司正在进行敏捷开发环境的搭建,以取代传统的架构,好处大大的,我就不赘述了.公司原来负责这个项目的同事要转组,我只好交给另外同事继续,但是为了防止同样的事情,我也需要深入了 ...
- 【Java基础】ArrayList初始化操作
要用60个零初始化列表,请执行以下操作: List<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, ...
- Spring Batch Event Listeners
Learn to create and configure Spring batch's JobExecutionListener (before and after job), StepExecut ...