大家好,欢迎来到IT知识分享网。
背景:
使用文本合成音频生成的字幕为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
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136663.html