Python实现给视频添加字幕
主要思路:
1.用moviepy库处理视频文件;用 pysrt库处理字幕。
2.由于moviepy依赖名为ImageMagick免费开源图片编辑软件,所以要先安装ImageMagick
开始:
1.安装ImageMagick
到官网 https://www.imagemagick.org/script/download.php#windows 下载
我这里选择 ImageMagick-7.1.1-27-Q16-HDRI-x64-dll.exe
下载还是较快,但运行时被Microsoft Defender SmartScreen 阻止了,不管了,选择仍要运行,直到安装完毕。
重新打开cmd命令行窗口,用where Magick 命令,证明安装成功并可找到了
2.安装moviepy和pysrt库
pip install moviepy pysrt
3.修改moviepy的设置
在python的 Lib\site-packages\moviepy 目录中,修改config_defaults.py,在最后一行添加:
IMAGEMAGICK_BINARY = r"这里是你的安装目录,如 C:\Program Files\ImageMagick-7.1.1-Q16-HDRI\magick.exe"
4.以下为示例代码
from moviepy.editor import * # 加载视频文件 video = VideoFileClip("input.mp4") # 定义剪辑的起始和结束时间(以秒为单位) start_time = 10 end_time = 15 # 对视频进行剪辑 clipped_video = video.subclip(start_time, end_time) # 添加文字 text = TextClip("Hello, World!", fontsize=30, color='white') text = text.set_position('center').set_duration(5) # 添加音乐 #audio = AudioFileClip("music.mp3").subclip(0, 5) # 将文字和音乐添加到视频中 final_video = CompositeVideoClip([clipped_video, text]) #final_video = final_video.set_audio(audio) # 导出视频 final_video.write_videofile("output.mp4")
大概是我电脑不行,截取5秒钟的视频添加字幕就耗时超过2分钟。
5.添加中文
首先从C:\Windows\Fonts找一个中文字体,复制到项目中,确保复制到项目中的字体名称是英文的。
然后用如下代码:
from moviepy.editor import * # 加载视频文件 video = VideoFileClip("input.mp4") # 定义剪辑的起始和结束时间(以秒为单位) start_time = 10 end_time = 15 # 对视频进行剪辑 clipped_video = video.subclip(start_time, end_time) # 添加文字 text = TextClip("hello 你好!", fontsize=30,font="simhei.ttf",color='white') text = text.set_position('center').set_duration(3) # 添加音乐 #audio = AudioFileClip("music.mp3").subclip(0, 5) # 将文字和音乐添加到视频中 final_video = CompositeVideoClip([clipped_video, text]) #final_video = final_video.set_audio(audio) # 导出视频 final_video.write_videofile("output.mp4")
6.生成空视频并添加中文
from moviepy.editor import * def color_clip(size, duration, fps=25, color=(0,0,255), output='color.mp4'): #生成空白视频 color_video = ColorClip(size, color, duration=duration) # 添加文字 text = TextClip("hello 你好!", fontsize=30,font="simhei.ttf",color='white') text = text.set_position('center').set_duration(3) # 将文字和音乐添加到视频中 final_video = CompositeVideoClip([color_video, text]) final_video.write_videofile(output, fps=fps) if __name__ == '__main__': size = (200, 100) duration = 5 color_clip(size, duration)
7.视频去除声音,并重新添加声音
主要代码:
video = VideoFileClip(local+“demo.mp4”) #加载原视频 video_without_audio = video.without_audio() #原视频去声 video_without_audio.write_videofile(local+“output_video.mp4”) #保存无声视频 audio = AudioFileClip(local+“demo.mp3”) #新的声音 if audio.duration>video.duration: #对齐音视频 audio = audio.subclip(0,video.duration) video = video.set_audio(audio) #视频中加声音 video.write_videofile(local+“new_video.mp4”)#保存新视频
8.做一个可用于学习唐诗的视频吧
from moviepy.editor import * #生成空白视频 size = (300, 300) color=(0,20,00) duration = 6 fps=25 output='color.mp4' video = ColorClip(size, color, duration=duration) # 添加文字 text1 = TextClip("静夜思\n唐\n李白", fontsize=30,font="simhei.ttf",color='white') text1 = text1.set_position('center').set_start(0).set_duration(2) text2 = TextClip("床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。", fontsize=30,font="simhei.ttf",color='white') text2 = text2.set_position('center').set_start(2).set_duration(4) # 将文字和音乐添加到视频中 final_video = CompositeVideoClip([video, text1,text2]) final_video.write_videofile(output, fps=fps)
参考:https://blog.51cto.com/u_16213450/7057470
https://www.cnblogs.com/lfri/p/11601211.html
https://blog.csdn.net/meridian002/article/details/131365025
https://jingyan.baidu.com/article/5553fa82025ae624a3393461.html
https://blog.csdn.net/wenxingchen/article/details/122965983
https://blog.csdn.net/hihell/article/details/128833357
https://www.cnpython.com/qa/354026
https://blog.csdn.net/JBY2020/article/details/128819587
https://blog.csdn.net/weixin_38093452/article/details/129927125
https://www.zhihu.com/question/572101159/answer/2799739961?utm_id=0
https://blog.csdn.net/JBY2020/article/details/128817118
https://www.5axxw.com/questions/simple/1v758i