关于

  • 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. Shell中 ##%% 操作变量名

    在linxu平台下少不了对变量名的处理,今天记录下shell中 ##%% 对变量名的操作. #操作左侧,%操作右侧. #号处理方式: 对于单个#,处理对象为变量中指定的第一个符号左侧字符串, 对于两个 ...

  2. Excel-实现选择性粘贴(粘贴公式为文本)自动化,不想手动

    10.选择性粘贴(粘贴公式为文本)自动化,不想手动: (1)参考:https://jingyan.baidu.com/article/20b68a88a8bf55796cec62a3.html (2) ...

  3. 关于蓝牙Mesh您必须知道的七件事

    蓝牙技术联盟于7月19日正式宣布,蓝牙(Bluetooth)技术开始全面支持Mesh网状网络.全新的Mesh功能提供设备间多对多传输,并特别提高构建大范围网络覆盖的通信能力,适用于楼宇自动化.无线传感 ...

  4. 再聊我们自研的那些Devops工具

    两年前我写了篇文章『我们自研的那些Devops工具』介绍了我们自研的一些DevOps工具系统,两年过去了这些工具究竟还有没有在发光发热,又有哪些新的变化呢,我将通过这篇文章来回顾一下这两年的发展与变化 ...

  5. 阿里云NAS性能测试

    测试方法:根据阿里云NAS官方文档进行测试 测试对象:性能型NAS,总容量1PB,已使用27.49GB(计算吞吐量时按30GB计算) 随机读IOPS测试 测试命令 fio -numjobs=1 -io ...

  6. 数据库之JDBC

    1.简单认识一下JDBC 1).JDBC是什么? java database connection       java数据库连接 作用:就是为了java连接mysql数据库嘛 要详细的,就面向百度编 ...

  7. 学习java的第二十八天

    一.今日收获 1.java完全学习手册第三章算法的3.2排序,比较了跟c语言排序上的不同 2.观看哔哩哔哩上的教学视频 二.今日问题 1.快速排序法的运行调试多次 2.哔哩哔哩教学视频的一些术语不太理 ...

  8. day05文件编辑命令

    day05文件编辑命令 mv命令:移动文件 mv命令:mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中. 格式:mv [原来的文件路径] [现在的文件路径] mv命令后面既可以跟 ...

  9. 设置linux下oracle开机自启动

    1.修改配置文件,vi /etc/oratab orcl:/u01/app/oracle/product/11.2.0/db_1:Y 2.创建启动文件,/etc/init.d/ #!/bin/sh # ...

  10. 【编程思想】【设计模式】【创建模式creational 】工厂模式factory_method

    Python版 https://github.com/faif/python-patterns/blob/master/creational/factory_method.py #!/usr/bin/ ...