关于

  • 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的相互转换的更多相关文章

  1. MapReduce实战项目:查找相同字母组成的字谜

    实战项目:查找相同字母组成的字谜 项目需求:一本英文书籍中包含有成千上万个单词或者短语,现在我们要从中找出相同字母组成的所有单词. 数据集和期望结果举例: 思路分析: 1)在Map阶段,对每个word ...

  2. Python3实战Spark大数据分析及调度 (网盘分享)

    Python3实战Spark大数据分析及调度 搜索QQ号直接加群获取其它学习资料:715301384 部分课程截图: 链接:https://pan.baidu.com/s/12VDmdhN4hr7yp ...

  3. selenium3与Python3实战 web自动化测试框架 ☝☝☝

    selenium3与Python3实战 web自动化测试框架 selenium3与Python3实战 web自动化测试框架 学习 教程 一.环境搭建 1.selenium环境搭建 Client: py ...

  4. Python3实战spark大数据分析及调度 ☝☝☝

    Python3实战spark大数据分析及调度  ☝☝☝ 一.实例分析 1.1 数据 student.txt 1.2 代码 二.代码解析 2.1函数解析 2.1.1 collect() RDD的特性 在 ...

  5. selenium3与Python3实战 web自动化测试框架✍✍✍

    selenium3与Python3实战 web自动化测试框架  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

  6. Python3实战spark大数据分析及调度✍✍✍

    Python3实战spark大数据分析及调度  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  7. 字幕文件 WebVTT 与 srt 之间的互相转化

    1. WebVTT 2 srt 1. 用记事本打开 .vtt 文件: 2. 在记事本中点击 编辑  -> 替换 -> 查找内容中输入".",替换为中输入",& ...

  8. Python3实战系列之六(获取印度售后数据项目)

    问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:此篇我们试着把python程序打包成.exe程序.这样就可以在服务器上运行了.实现首篇计划列表功能模块的第三步: 3..exe文件能在服务器上 ...

  9. Python3实战系列之二(获取印度售后数据项目)

    问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:安装python和pycharm.要编写并运行python程序就需要电脑有开发工具和运行环境,所以此篇就是安装编辑和运行python程序的软件 ...

随机推荐

  1. Python 包管理工具 pip 与 conda

    简介 pip是接触 python 后最早认识的包管理工具.通过使用 pip 能够自动下载和解决不同 python 模块的依赖问题,使 python 的配置过程变得简单. 与 pip 类似,conda ...

  2. Yii2 源码分析 入口文件执行流程

    Yii2 源码分析  入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...

  3. PHP面试经常被问cgi、fastcgi、php-fpm、mod_php的区别

    cgi.fastcgi.php-fpm.mod_php cgi cgi是公共网关接口,用户通过浏览器来访问执行再服务器上的动态程序,CGI是Web 服务器与CGI程序间传输数据的标准.准确来说是一种协 ...

  4. 笔记Mysql(1)

    客户端的登录命令 查看版本 查看设置(数据库的基本设置信息) 查看时间 查看链接数 查看超时的关键字 创建数据库 查看已有数据库 进入数据库,查询链接到的数据库 查询数据目录 创建表 查看表

  5. 年底巩固下 CS 知识「GitHub 热点速览 v.21.49」

    作者:HelloGitHub-小鱼干 期末到了!是时候来一波 CS 复习资料了,从本科基础知识开始到实用编程技术.本周 GitHub 热点趋势榜给你提供了最全的复习资料:清华的 CS 四年学习资料.W ...

  6. HDFS【hadoop3.1.3 windows开发环境搭建】

    目录 一.配置hadoop3.1.3 windows环境依赖 配置环境变量 添加到path路径 在cmd中测试 二.idea中的配置 创建工程/模块 添加pom.xml依赖 日志添加--配置log4j ...

  7. 大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF

    1. 练习 数据: (1)需求1:统计有过连续3天以上销售的店铺有哪些,并且计算出连续三天以上的销售额 第一步:将每天的金额求和(同一天可能会有多个订单) SELECT sid,dt,SUM(mone ...

  8. 创建Oracle数据库实例

    创建Oracle数据库实例 转自oracle数据库创建实例 数据库已经安装完成,可以正常登陆查看用户等操作. system用户只能用normal身份登陆em.除非你对它授予了sysdba的系统权限或者 ...

  9. oracle extract

    select extract(year from systimestamp) year         ,extract(month from systimestamp) month          ...

  10. [学习总结]4、Android的ViewGroup中事件的传递机制(一)

    本文主要针对dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个方法,通过简单的例子来简单的介绍下. 根据字面意思的理解,dispatchTo ...