#### ? ? [老猿Python博文目录](https://blog.csdn.net/LaoYuanPython/article/details/98245036) ?
一、引言
这两天要剪辑一个视频,从几个各自完整场景的短视频拼接成一个视频,每个短视频前都有个文字标题和倒计时的过场,为了做好这个过场,老猿用代码实现了一个。
二、实现思路介绍
1、本次使用了《OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍》介绍的公用函数imgAddText,getTextSize 2、实现时,首先构造一个指定大小和指定单一背景色的图像,然后在其中添加要显示的文本信息,以及倒计时要显示的数字,相关信息都是根据背景图像大小和文本要占用的大小自动调整显示位置; 3、读入倒计时的‘滴’声,将其在图片显示时播放,如果找不到声音文件,可以将相关代码去除。
三、主程序完整代码
from moviepy.editor import *
from opencvPublic import imgAddText,getTextSize
import numpy as np
def constructBlankImg(size,bgColor=(0,0,0)):
l = len(bgColor)
if l==1:
img = np.full((size[1],size[0]),bgColor,dtype=np.uint8)
else:
img = np.full((size[1], size[0],l),bgColor, dtype=np.uint8)
return img
def constructTransmitFrame(size,bgColor=(0,0,0),wordsInf=None):
img = constructBlankImg(size,bgColor)
if wordsInf:
for wInf in wordsInf:
words,font,color,pos = wInf
l= len(color)
img = imgAddText(img, words, font, color, pos)
return img
def constructTransmitClip(size,bgColor=(0,0,0),title=None):
h = size[1]
titleFont = 128
digitFont = 96
if title:
w1, h1 = getTextSize(title,titleFont)
w2,h2 = getTextSize('3',digitFont)
pos1 = int((h-(h1+h2+30))/3)
pos2 = pos1+h1+30
inf1 =[(title,titleFont,(0,0,255),pos1),('3',digitFont,(255,0,0),pos2)]
inf2 = [(title, titleFont, (0, 0, 255), pos1), ('2', digitFont, (255, 0, 0), pos2)]
inf3 = [(title, titleFont, (0, 0, 255), pos1), ('1', digitFont, (255, 0, 0), pos2)]
inf4 = [(title, titleFont, (0, 0, 255), pos1), ('0', digitFont, (255, 0, 0), pos2)]
else:
inf1 = [ ('3', digitFont, (255, 0, 0),'C')]
inf2 = [('2', digitFont, (255, 0, 0), 'C')]
inf3 = [('1', digitFont, (255, 0, 0), 'C')]
inf4 = [('0', digitFont, (255, 0, 0), 'C')]
img1 = constructTransmitFrame(size,bgColor,inf1)
img2 = constructTransmitFrame(size, bgColor, inf2)
img3 = constructTransmitFrame(size, bgColor, inf3)
img4 = constructTransmitFrame(size, bgColor, inf4)
audio = AudioFileClip(r'F:\video\倒计时.mp3')
audio1 = audio.subclip(1.40, 2.28).set_duration(1)
audio2 = audio.subclip(3, 4.20)
clip1 = ImageClip(img1,duration=1).set_audio(audio1)
clip2 = ImageClip(img2, duration=1).set_audio(audio1)
clip3 = ImageClip(img3, duration=1).set_audio(audio1)
clip4 = ImageClip(img4, duration=1).set_audio(audio1)
clip = concatenate_videoclips([clip1, clip2,clip3,clip4], 'compose')
clip = clip.set_fps(10).speedx(2)
clip.write_videofile (r"F:\video\test.mp4")
return clip
constructTransmitClip((960,640),(0,0,0),'老猿Python: https://blog.csdn.net/LaoYuanPython')
四、效果
五、小结
本文通过代码构建了一段实现倒数计时的过场影片段,可以用于拼接多个视频时作为过场使用。
更多相关moviepy知识的介绍请参考《 Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》的导览式介绍。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
如对文章内容存在疑问,可在博客评论区留言,或通过扫描博客左边的二维码关注:老猿Python 微信公号发消息咨询。
关于老猿的付费专栏
-
付费专栏《 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 使用PyQt开发图形界面Python应用专栏目录》; -
付费专栏《 moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《moviepy音视频开发专栏文章目录》; -
付费专栏《 OpenCV-Python初学者疑难问题集》为《 OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《 OpenCV-Python初学者疑难问题集专栏目录 》 -
付费专栏《Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《 OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
老猿Python,跟老猿学Python!
|