1 WebVTT & SRT 格式

WebVTT字幕格式与SRT字幕格式主要区别在于时间格式的区分。

下面是一个WebVTT格式的字幕文件

WEBVTT1
00:00:20.000 --> 00:00:24.400
En réponse à l'augmentation dramatique
de la criminalité dans certains quartiers,2
00:00:24.600 --> 00:00:27.800
Le gouvernement se félicite pour les prochaines élections…

对应的SRT字幕格式则为

1
00:00:20,000 --> 00:00:24,400
En réponse à l'augmentation dramatique
de la criminalité dans certains quartiers,2
00:00:24,600 --> 00:00:27,800
Le gouvernement se félicite pour les prochaines élections…

可以看到两种格式的文件主要有两个的区别:

  1. WebVTT格式的文件头有WEBVTT标识,而SRT格式的文件则没有;

  2. WebVTT格式的时间为00:00:20.000 --> 00:00:24.400,而SRT格式的时间为00:00:20,000 --> 00:00:24,400;即一个为.一个为,

有个上述的基本认识之后,要将WebVTT格式的字幕文件转为SRT格式的字幕文件就迎刃而解了。

2 解决方案

为了实现WebVTT转换为SRT文件格式,本解决方案采用Python实现,使用PyQt4提供界面。在界面设计中,使用到了Qt Designer进行界面设计。

程序界面如下图所示:

2.1 QT Designer 界面设计

利用QT Designer设计完界面后,将文件保存为.ui后缀的文件名。然后利用pyuic.py'.ui文件转为.py文件。命令如下:

C:\>python "D:\Program Files (x86)\Python27\Lib\site-packages\PyQt4\uic\pyuic.py" -o vtt2srt_ui.py vtt2srt.ui

这里界面文件文vtt2srt.ui,生成后的python文件为vtt2srt_ui.py

备注:pyuic.py在安装完PyQt时就默认安装上了,路径应该为XXX\Lib\site-packages\PyQt4\uic,其中XXX为Python路径。 如果你找不到,可以使用Everything进行搜索。

2.2 引用界面文件

在创建好UI文件并将其转换为Python源文件之后,就需要在我们的Python源文件中使用该UI界面,PyQt Designer上已经有了详细的说明,此外,由于个人英文水平有限,即便在这个胡诌两句,各位看官也不一定能明白,毕竟存在信息损耗嘛!所以介意各位看官移步到PyQt Designer手册自行琢磨。

以下代码展示了如何引用PyQt的UI文件。

#!/usr/bin/python
# -*- coding: utf-8 -*-import sys
from PyQt4 import QtGui
from vtt2srt_ui import Ui_vtt2srtclass VTT2SRT(QtGui.QMainWindow, Ui_vtt2srt):def __init__(self, parent=None):super(VTT2SRT, self).__init__(parent)self.setupUi(self)self.show()def main():app = QtGui.QApplication(sys.argv)vtt2srt = VTT2SRT()sys.exit(app.exec_())if __name__ == '__main__':main()

在上面的代码中我们只是引用了UI文件,并将通过QT Designer设计的界面显示出来,除此之外,没有任何实质性的东西。接下来的工作就是响应各种消息。

2.3 WebVTT 转为 SRT

该程序创建两个文本输入框、两个标签以及三个按钮,界面稍显丑陋。接下来就是对按钮的响应以执行相应的操作。代码如下:

class VTT2SRT(QtGui.QMainWindow, Ui_vtt2srt):def __init__(self, parent=None):super(VTT2SRT, self).__init__(parent)self.setupUi(self)self.show()self.output_button.clicked.connect(lambda: self.open_file(1))self.input_button.clicked.connect(lambda: self.open_file(0))self.convert.clicked.connect(self.vtt2srt)def open_file(self, flag):fname = QtGui.QFileDialog.getOpenFileName(self, u'打开文件')if flag == 1:self.output_file.setText(fname)else:self.input_file.setText(fname)def vtt2srt(self):infile = self.input_file.text()outfile = self.output_file.text()# using thread is more reasonableinf = open(infile, 'r')outf = open(outfile, 'w')line = inf.readline()rep = re.compile('\.')for line in inf:if re.search('^WEBVTT', line):continueif re.search('^[0-9][0-9]:[0-9][0-9].+ -->', line):line = rep.sub(',', line)outf.write(line)inf.close()outf.close()

在上述代码中,其中两个按钮分别对应两个文本输入框用于指定输入文件和输出文件,它们执行的动作类似,因此将其关联到一个函数上。而核心的转换工作则由第三个按钮关联的vtt2srt函数执行。

备注:在此处为了简便,直接在界面线程中执行转换;但当转换工作非常耗时时,这样做回将界面线程卡死。一般的做法是新建一个工作线程用于执行转换工作。

3 总结

在我准备做这个转换器的时候,原以为十分简单。虽然它确实不复杂,只是将.替换为,,但在实现过程中却还是会遇到很多问题,真是纸上得来终觉浅,绝知此事要躬行。这个小程序还有以下几可以改进:

  1. 输入文件是否为WebVTT格式,这个为了省事而没有做的;
  2. 转换工作转移到工作线程中,避免界面线程假死;
  3. 异常处理。

附件: 源码及文档

参考文献

[1] https://fr.wikipedia.org/wiki/WebVTT
[2] http://www.delphiki.com/webvtt/
[3] https://en.wikipedia.org/wiki/.srt
[4] http://nikolak.com/pyqt-qt-designer-getting-started/

利用Python将WEBVTT格式的视频字幕文件转为SRT格式相关推荐

  1. python实现pdf转word详解_手把手|20行Python代码教你批量将PDF文件转为Word格式(包教包会)...

    在日常工作或学习中,经常会遇到这样的无奈: "小任,你把这个PDF中的文件码出来发我" 倒霉,2M的PDF12点也完不了啊! 很多时候在学习时发现许多文档都是PDF格式,PDF格式 ...

  2. python把pdf转word_手把手|20行Python代码教你批量将PDF文件转为Word格式(包教包会)...

    作者:菜鸟分析 Python爱好者社区--专栏作者 个人介绍:一个痴迷于Python语言的业余程序猿,未来的理想是能够与一群痴迷于Python语言的程序猿改变世界 知乎专栏: https://zhua ...

  3. python doc转docx_利用python中的win32com模块将doc文件转为docx文件

    简介 win32com模块的功能也是非常的强大的,能够处理各种的文件 word操作 如何使用python的win32com模块实现将doc类型文件转成docx类型的文件 import os from ...

  4. python youtube字幕_用Python将单个Webvtt格式字幕转成Srt格式字幕

    从Youtube中下载的字幕是Webvtt格式,我用的射手影音播放器无法正确加载该字幕,所以用Python写了一个脚本将vtt格式的字幕转化为srt格式的字幕.我所使用Python程序编写平台是PSF ...

  5. python怎么加字幕_使用Python和百度语音识别生成视频字幕的实现

    从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...

  6. python 视频语音转文字_使用Python和百度语音识别生成视频字幕的实现

    从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...

  7. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作

    问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...

  8. python对excel数据更改_利用python对excel中一列的时间数据更改格式代码示例

    本篇文章小编给大家分享一下利用python对excel中一列的时间数据更改格式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题场景:需要将 ...

  9. Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件

    Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...

最新文章

  1. SAP VLPOD 报错 - Update control of movement type is incorrect (entry 107 X X E B _ E) - 之对策
  2. 走你!Github 开源整合
  3. Openstack_SQLAlchemy_一对多关系表的多表插入实现
  4. javascript 自动填写表单
  5. 【星球知识卡片】移动端高效率的分组网络都发展到什么程度了?
  6. myelicesp stepover不能点_市区6处垃圾临时转运点被撤销
  7. 脉冲宽度调制pdm_0-500V可调0-30A高频脉冲电源广元厂家
  8. 攻击 xxs_“吃鸡”又出现1招炸队友不受惩罚,xxs乐坏了,请别手误打载具
  9. idea 鼠标变量_IntelliJ IDEA鼠标悬停方法显示Java Doc
  10. 在Laravel中使用数据库事务以及捕获事务失败后的异常
  11. 面向对象(final/抽象类/接口/内部类)
  12. 小型空仓库图片_大中型的食品企业为何都青睐自动化立体仓库?
  13. Linux socket can例程C++版本
  14. 老干部活动中心计算机台数,老干部活动中心设计方案
  15. 【筆記】八部金剛功-張道長口述記載
  16. 分享scratch转exe可执行文件scratch2exe-ch-se
  17. 行星轨迹制作_用3ds max制作三维行星运动动画
  18. 计算机群星闪耀时-记计算机界的大牛们
  19. 干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(下)
  20. 重复启动Tomcat时,大概率出现Deploying web application direct

热门文章

  1. H5 移动端 测试关注点
  2. matlab中sr锁存器,VHDL中的简单SR锁存器仿真(带Xilinx)不会振荡
  3. mysql数据库:最全MySQL数据库设计建库、建表规范及经验(踩过坑才能积累经验!)
  4. Axure京东高保真原型图
  5. 2023.2.16 htmlcss
  6. excel折线图和堆积折线图
  7. Angular4 - Rxjs基础
  8. Discuz插件 微信购买会员用户组V2.180418商业版
  9. 【ubuntu】tacacs+服务器搭建
  10. docker:更换镜像源