字幕转换: vtt转为srt

背景:

使用文本合成音频生成的字幕为vtt文件, 但是 python moviepy中只能使用 srt 格式的字幕。 因此需要将 vtt 字幕转换成 srt

解决方法:

使用python 代码转换文件 (从网上找的代码,更正了其中的bug)


import re
import os


def vtt2srt(filePath):
    fileSplitName=os.path.splitext(filePath)
    print("fileSplitName....", fileSplitName)
    if(fileSplitName[1]==".vtt"):
        with open(filePath,"r",encoding="utf-8") as fin:
            fileContent=fin.readlines()
            lineNum=2
            fileMaxLineNum=len(fileContent)
            with open(fileSplitName[0]+".srt","w",encoding="utf-8") as fout:
                fout.write("1\n")
                for i in range(2,fileMaxLineNum):
                    if(fileContent[i].strip().isdigit()):
                        continue
                    #tempStr=fileContent[i].replace(".",",")
                    if re.match(r"(\d\d:\d\d:)",fileContent[i])==None :
                        fout.write(re.sub(r"(\d\d:)",lambda m:"00:"+m.group(0),fileContent[i]))
                    else:
                        fout.write(fileContent[i].replace(".", ","))

                    if(fileContent[i].strip()=="" and i+1<fileMaxLineNum and fileContent[i+1].strip()!=""):
                        fout.write(str(lineNum)+"\n")
                        lineNum+=1

调用: vtt2srt("subtitle.vtt") 输出的文件为: subtitle.srt

python 中使用字幕:

from moviepy.editor import VideoFileClip, CompositeVideoClip
from moviepy.video import VideoClip
from moviepy.video.tools.subtitles import SubtitlesClip
import os

base_path= "."
myvideo = VideoFileClip("myvideo.mp4")
generator = lambda txt: VideoClip.TextClip(txt,  font="PingFang-SC-Thin",fontsize=24, color='white')
subtitle_clip = SubtitlesClip(   os.path.join(base_path, str(video_id) + ".srt"), generator ).set_pos(('center','bottom'    ))
final_clip = CompositeVideoClip([ final_clip, subtitle_clip])
final_clip.write_videofile("video.mp4", fps=24)

其中,通过以下命令查看系统的font有哪些

from moviepy.video import VideoClip
print(VideoClip.TextClip.list('font'))

具体参考官方文档: https://zulko.github.io/moviepy/ref/videotools.html?highlight=font

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值