zoukankan      html  css  js  c++  java
  • webvtt字幕转srt字幕的python程序(附改名程序)

    最近写了两个比较简单的python程序,原有都是由于看公开课感觉比较费劲,一个是下载的视频无用的名字太长,另一个就是下载的vtt字幕播放器不识别,写了一个vtt转换成str字幕格式的文件

    vtt to str比较简单:

    大概就是打开一个vtt文件,把开头的webvtt删掉,把所有的"."替换成",",把后缀名改成srt。参考下面两个网页

    http://mooc.guokr.com/post/615236/

    http://blog.csdn.net/iracer/article/details/48765347

    要是单纯的吧vtt改成srt。播放时的确会显示字幕,但是字幕会无视时间轴,一个劲的走,根本起不到字幕的作用。

    要是一个个用记事本打开,重复的操作这些工作还是比较恶心。毕竟mooc一份时间比较短,总份数又比较多。

    我的方法就是读出文件后,用split('.'),把所有的内容分割起来,再 str1+ ',' + str2 迭代起来把所有的内容拼接起来,这样完成了替换。

    用str = listvtt[0][8:]的方式删掉了WEBVTT 这8个字符。最后重新建立一个同样名字的srt字幕文件

    下面就是我的具体实现

    #4到9行是把路径中所有的vtt文件找出来
    #os.listdir(path) 返回一个内容是path所有文件名的数组
     1 #coding = utf-8
     2 import os
     3 path = r"E:folders"
     4 vttName = []                                     
     5 
     6 for i in os.listdir(path):
     7     name = i.split('.')
     8     if name[-1] == 'vtt':
     9         vttName.append(i)
    10 
    11 for vttname in vttName:
    12     vtt = open(path + "\" + vttname)
    13     filevtt = vtt.read()
    14     vtt.close()
    15     #print filevtt
    16     listvtt = filevtt.split('.')
    17     #print listvtt
    18     #print listvtt[0][8:]
    19     strvtt = listvtt[0][8:]
    20     for i in range(1 , len(listvtt) ):
    21         strvtt = strvtt + "," + listvtt[i]
    22     
    23     #print strvtt
    24     srtName = vttname.split('.')
    25     srt = open(path + '\' + srtName[0] + '.srt','w')
    26     
    27     srt.write(strvtt)
    28     srt.close()    
    29     
    30     
    #listvtt[0]是vtt文件的在第一个'.'好的所有内容,由于vtt的文件格式前面为WEBVTT
    
     正好可以删去 用了魔术数字 8

    闲话不多说,其实主要的就是用到了python 的 os包中的 changename 以及python的文件读写。

    changename 比较无脑,

    文件读写就是把文件的内容读出来——就是读成一个str,修改这个str,并写入到文件中。

    程序很简单,而且python不愧是思考问题最简单易行的方法。

    changname 非常简陋:

     1 path = 'E:\folders'
     2 for files in os.listdir(path):
     3     print files
     4     p = files.split('_')
     5     print p
     6     print p[-1]
     7     oldname = path + '//' + files
     8     newname = path + '//' + p[-1]
     9     os.rename(oldname, newname)
    10     

    这个就是根据文件名的特点,提取了最后一个也就是我想要的内容并更改名字,而且也是一次性的把文件夹里所有的文件名都改了,有点不太智能。但也够用了 :P

    而且这个程序我是直接在idle 中用的,比较简单与原始

  • 相关阅读:
    js面试题
    Linux设备驱动程序 之 并发及其管理
    Linux设备驱动程序 之 read和write
    Linux设备驱动程序 之 open和release
    Linux设备驱动程序 之 字符设备的注册
    Linux设备驱动程序 之 重要数据结构
    Linux设备驱动程序 之 主次设备号
    Linux设备驱动程序 之 模块参数
    Linux设备驱动程序 之 内核符号表
    Linux设备驱动程序 之 装载和卸载模块
  • 原文地址:https://www.cnblogs.com/young-ma/p/5143254.html
Copyright © 2011-2022 走看看