moviepy音视频开发:使用credits1给视频加片头片尾字幕
☞ ░ 前往老猿Python博文目录 ░
一、概述
在《moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip类详解》介绍了TextClip生成文本剪辑的方法,文本剪辑可以用于制作字幕,作为片头片尾字幕介绍以及视频剪辑间的过渡内容。并在收费专栏文章《moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip及使用案例》中介绍了TextClip的案例。
而为了更方便的进行字幕能力支持,moviepy提供了一个工具函数credits1,用于支持将文本文件内容作为字幕剪辑,除了TextClip支持的能力外,还提供了一定的格式控制功能。
二、credits1介绍
2.1、credits1调用语法
credits1(creditfile, width, stretch=30, color='white', stroke_color='black', stroke_width=2, font='Impact-Normal', fontsize=60, gap=0)
2.2、参数说明:
- creditfile:字幕文字存储的文本文件名
- width:字幕文字的宽度,以像素为单位,老猿建议与准备加字幕的视频剪辑的宽度一样
- stretch:官网没有该字段的说明,经阅读源码,这个参数在代码中暂时没有使用,估计是为了与以前版本兼容留下的参数
- color:字幕文字的颜色,可以参考TextClip中对list和search方法对’color’的说明,具体参考在概述部分引用的博文
- stroke_color:字幕文字轮廓线的颜色
- stroke_width:字幕文字轮廓线的大小,像素为单位
- font:字幕文字的字体,关于可用的字体可以使用TextClip的list(‘font’)查看,也可以直接指定字体文件
- fontsize:字幕文字字体大小
- gap:视频参与者角色和名字之间的水平间距,以像素为单位
2.3、返回值及其他补充说明:
- credits1的返回值为一个ImageClip,没有设置fps和duration,如果与其他剪辑合成或单独输出,需要设置这2个属性
- 字幕字体的中文支持需要关注TextClip中文支持的一个Bug,具体请参考《moviepy音视频剪辑:TextClip不支持中文字符以及OSError: magick.exe: unable to read font 仿宋_GB2312.ttf的解决办法》
- fontsize:经老猿验证,该值只是一个字幕文字的最大值,如在字幕足够宽时最大值为该参数指定值,当某一行文字过多按fontsize大小无法显示时,整个字幕的字体会自动调整大小以适应字幕的宽度
- 使用credits1需要先下载并安装ImageMagick应用(不是Python模块)。安装ImageMagick后,还需要修改moviepy的config_defaults.py模块的配置,将下行代码:
IMAGEMAGICK_BINARY = os.getenv('IMAGEMAGICK_BINARY', 'auto-detect')
替换为:
IMAGEMAGICK_BINARY = r"C:\Program Files\ImageMagick-7.0.8-Q16\magick.exe"
具体的替换值需要确认ImageMagick安装目录进行更改。请参考前面概述部分引用博文的介绍。
- 关于文本文件的格式控制说明:
- 空行控制:文本文件本身的空行会被忽略,credits1可以通过“.blank 行数n”控制显示n个空行,其中点和blank必须在行顶格写
- 参与者角色和名字(the jobs and the names)显示控制:“…”(两个连续的点)表示本行后面的文字为制片相关角色如制片人、导演等 (其实随便使用啦),在这种方式下,角色所在行文字靠左,并上移一行。所有靠左的行最长的行靠左顶格,其他靠左的行与该行右对齐
- 所有非靠左行都以所有靠左行结束位置左对齐,二者中间的间距由gap参数指定。(具体参考后面案例)
三、案例
3.1、案例说明
本案例读入一个文本文件将其转成一个字幕剪辑,与另一个视频剪辑拼接。文本文件中使用了格式控制符“.blank”和“..”。
3.2、案例的字幕文本文件
下面为老猿使用的文本文件内容,注意控制符的使用以及文字行前面的行号,以便于和字幕截屏对照看看格式符的作用:
.blank 4
1 查理·卓别林(Charlie Chaplin,1889年4月16日—1977年12月25日),生于英国伦敦,英国影视演员、导演、编剧。
2 查理·卓别林的第一部电影是《谋生》。从1915年开始卓别林开始自编自导自演,甚至还担任制片和剪辑。
3 稍后他加入了埃斯安尼公司,并于1917年出品了《移民》和《安乐街》
4 1918年他和他的兄弟在洛杉矶开了自己的公司。甚至还担任制片和剪辑
5 并在1919年召集到了道格拉斯·费尔班克斯等人。但直到1923年,卓别林才为这个公司拍了第一部影片《巴黎一妇人》。
6 之后1925年的《淘金记》和1928年的《马戏团》为卓别林赢得了学院奖。
7 1931年因为《城市之光》的首映卓别林来到伦敦,转年才返回,他的下一部影片是1936年的《摩登时代》。
8 四年之后他拍摄了《大独裁者》。1952年,他的有声电影《舞台生涯》上映,同年他移居瑞士。
9 1967年他拍摄了他的最后一部影片《香港女伯爵》,1977年12月25日圣诞节早上于瑞士家中逝世,享年88岁。
.blank 4
..Executive Story Editor
12 MARCEL DURAND
..Associate Producers
14 MARTIN MARCEL
15 DIDIER MARTIN
..Music Supervisor
17 JEAN DIDIER
18 credits1测试
..老猿Python,跟老猿学Python!网址:
20 https://blog.csdn.net/LaoYuanPython
.blank 2
21
22
23
24
25
26
27
28
29
..30
31
32
33
34
35
36
37
38
3.3、案例代码
from moviepy.editor import *
from moviepy.video.tools.credits import credits1 #导入工具credits1
if __name__ == '__main__':
video = VideoFileClip(r"F:\video\zbl1.mp4") #加载视频文件
imgClip = credits1(r"F:\video\test.txt", video.size[0], stretch=30, color='blue', stroke_color='red',
stroke_width=2, font='fs_GB2312.ttf', fontsize=60, gap=10)#生成字幕剪辑
imgClip = imgClip.set_duration(30).set_fps(video.fps) #给字幕剪辑设置播放时长和fps
w, h = video.size
x_speed = x_start = y_start = 0
y_speed = 30
print(imgClip.size, video.size)
imgClip = imgClip.fx(vfx.scroll, h,w, x_speed, y_speed, x_start, y_start) #将字幕剪辑变成滚屏播放,注意h和w的顺序,具体可以参考专栏有关scroll的文章
print(imgClip.size,video.size)
imgClipList = [imgClip, video]
mixVideo = concatenate_videoclips(imgClipList,method='compose')
imgClip.write_videofile(r"f:\video\img.mp4",fps=30)
mixVideo.write_videofile(r"f:\video\mixVideo.mp4")
3.4、案例生成视频剪辑字幕截图
四、小结
本文介绍了使用credits1给视频加字幕的功能,对credits1函数的语法、参数、返回值及使用注意事项进行了详细介绍,并介绍了credits1使用的字幕文本文件的格式控制方式,并提供了完整案例。大家可以通过本文的介绍熟练地使用credits1给视频加片头片尾字幕。上面案例对于文字轮廓线没有按预期处理,原因老猿暂时未进行深入分析,但总体上相关案例能对credits1的功能起到比较好的例证,大家可以结合前面介绍的内容对照代码和截屏理解一下。
更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。
关于收费专栏
老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。
收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,因总体内容不复杂,本文未单独设置收费专栏文章。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
跟老猿学Python、学5G!
☞ ░ 前往老猿Python博文目录 ░
moviepy音视频开发:使用credits1给视频加片头片尾字幕的更多相关文章
- 直播平台搭建之音视频开发:认识主流视频编码技术H.264
H.264简介 什么是H.264?H.264是一种高性能的视频编解码技术.目前国际上制定视频编解码技术的组织有两个,一个是"国际电联",它制定的标准有H.261.H.263.H.2 ...
- PyQt+moviepy音视频剪辑实战文章目录
☞ ░ 前往老猿Python博文目录 ░ 本专栏为moviepy音视频剪辑合成相关内容介绍的免费专栏,对应的收费专栏为<moviepy音视频开发专栏>. 一.moviepy基础能力系统介绍 ...
- Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例
☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...
- Moviepy音视频开发:开发视频转gif动画或jpg图片exe图形化工具的案例
☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...
- moviepy音视频开发:音频剪辑基类AudioClip
☞ ░ 前往老猿Python博文目录 ░ 一.背景知识介绍 1.1.声音三要素: 音调:人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高. 音量:也就是响度 ...
- moviepy音视频开发专栏文章目录
☞ ░ 前往老猿Python博文目录 ░ <moviepy音视频开发专栏>为收费专栏,基于老猿阅读moviepy1.03版本的源代码以及大量测试验证的基础上,详细介绍moviepy主要音视 ...
- moviepy音视频开发:音频合成类CompositeAudioClip介绍
☞ ░ 前往老猿Python博文目录 ░ CompositeAudioClip是AudioClip的直接子类,用于将几个音频剪辑合成为一个音频剪辑.CompositeAudioClip类只有一个构造方 ...
- Python音视频开发:消除抖音短视频Logo的图形化工具实现
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现 ...
- Python音视频开发:消除抖音短视频Logo和去电视台标
☞ ░ 前往老猿Python博文目录 ░ 一.引言 对于带Logo(如抖音Logo.电视台标)的视频,有三种方案进行Logo消除: 直接将对应区域用对应图像替换: 直接将对应区域模糊化: 通过变换将要 ...
随机推荐
- Centos7系统kvm虚机忘记密码进不去, 通过宿主机修改/etc/shadow文件改密码,重启后系统起不来故障排错
问题描述 某天, 因为其他项目组交接问题, kvm里面的堡垒机系统用户root密码登录不上,然后他通过宿主机修改/etc/shadow文件修改密码,但是修改完后重启系统后发现kvm宿主机连接不上虚机了 ...
- 性能测试之JVM的监控Grafana
安装配置Grafana参考 https://testerhome.com/articles/23629 使用配置 下载jmx_exporter https://github.com/prometheu ...
- LOJ #6029. 「雅礼集训 2017 Day1」市场 线段树维护区间除法
题目描述 从前有一个贸易市场,在一位执政官到来之前都是非常繁荣的,自从他来了之后,发布了一系列奇怪的政令,导致贸易市场的衰落. 有 \(n\) 个商贩,从\(0 \sim n - 1\) 编号,每个商 ...
- cmd 命令行
理想的情况下,所有的程序都能自描述, 比如 mysql -h,支持哪些命令,每项命令需要哪些参数 命令行工具有几个有关进程的命令, tasklist taskkill http://hi.baidu. ...
- 1. 线性DP 887. 鸡蛋掉落 (DP+二分)
887. 鸡蛋掉落 (DP+二分) https://leetcode-cn.com/problems/super-egg-drop/ /*首先分析1个蛋,1个蛋的话,最坏情况需要N次,每次只能从0 1 ...
- 使用qmake编译时拷贝文件
使用qmake构建项目时,需要在make时拷贝一些文件到指定位置,非执行make install,下面总结列举一下我了解的方式 COPIES 示例pro 1 COPY_DIR = $$PWD/copy ...
- 常用linux源列表
本篇记录一些常用的源文件,后面需要用到的时候,直接进行复制粘贴即可 centos 相关 base源 [base] name=CentOS-$releasever - Base - mirrors.al ...
- Java中List,Set,Map区别
在Java开发面试中,面试官最常问到的就是Java集合,免不了要让面试者说出之间的区别,下面博主就对其做了总结. 1.集合与数组的区别 长度区别:数组是固定长度,集合长度可变: 内容区别:数组可以是基 ...
- 3、Spring Boot日志
1.日志框架 市面上的日志框架:JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 日志门面 (日志的抽象层) 日志实现 JCL(Jakarta ...
- 01、Spring环境搭建
环境:SpringSource-Tool-3.9.9.Eclipse4.10.0 首先,我们需要解决的是Spring包的问题,我看了百度.CSDN很多都是直接一上来随便丢个包就可以安装了,搞得我弄了一 ...

