首页 > 其他分享 >视频添加字幕

视频添加字幕

时间:2024-07-01 10:58:07浏览次数:20  
标签:视频 subtitle text image 字幕 添加 video time png

from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip

from configs.settings import PROJECT_PATH


def add_subtitle(video_config, video_path, out_path):
    # 加载视频文件
    video = VideoFileClip(video_path)

    all_time = 0
    for config in video_config:
        subtitle = config.get('subtitle')
        time = config.get('time')
        # 添加文字
        text = TextClip(subtitle, fontsize=30, font=f"{PROJECT_PATH}/src/font/STXINGKA.TTF", bg_color='white', color='black')

        text = text.set_position(((video.w - text.w) / 2, video.h - text.h - 20)).set_start(all_time).set_duration(time)
        all_time += time

        # 将文字和音乐添加到视频中
        video = CompositeVideoClip([video, text])

    # 导出视频
    video.write_videofile(out_path, codec='mpeg4', audio_codec='aac')

1.其中video_config结构如下

[{'subtitle': '盼望着,盼望着,东风来了,春天的脚步近了。', 'image': '1.png', 'time': 3}, {'subtitle': '一切都像刚睡醒的样子,欣欣然张开了眼。', 'image': '1.png', 'time': 3}, {'subtitle': '山朗润起来了,水涨起来了,太阳的脸红起来了。', 'image': '1.png', 'time': 3}, {'subtitle': '不好意思打断下,先来介绍下最新的显卡排名。', 'image': '1.png', 'top_image': '9.png', 'time': 4}, {'subtitle': 'xxxxxxx第一名。', 'image': '1.png', 'top_image': '9.png', 'time': 2}, {'subtitle': 'xxxxxxx第2名。', 'image': '2.png', 'top_image': '9.png', 'time': 3}, {'subtitle': 'xxxxxxx第3名。', 'image': '2.png', 'top_image': '9.png', 'time': 3}, {'subtitle': 'xxxxxxx第4名。', 'image': '2.png', 'top_image': '9.png', 'time': 2}, {'subtitle': 'xxxxxxx第5名。', 'image': '2.png', 'top_image': '9.png', 'time': 3}, {'subtitle': '园子里,田野里,瞧去,一大片一大片满是的。', 'image': '2.png', 'time': 3}, {'subtitle': '坐着,躺着,打两个滚,踢几脚球,', 'image': '2.png', 'time': 3}, {'subtitle': '赛几趟跑,捉几回迷藏。风轻悄悄的,草软绵绵的。', 'image': '2.png', 'time': 4}, {'subtitle': '桃树、杏树、梨树,你不让我,我不让你,都开满了花赶趟儿。', 'image': '3.png', 'time': 5}, {'subtitle': '红的像火,粉的像霞,白的像雪。', 'image': '3.png', 'time': 2}, {'subtitle': '花里带着甜味儿,闭了眼,树上仿佛已经满是桃儿、杏儿、梨儿。', 'image': '3.png', 'time': 5}, {'subtitle': '花下成千成百的蜜蜂嗡嗡地闹着,大小的蝴蝶飞来飞去。', 'image': '3.png', 'time': 4}, {'subtitle': '野花遍地是:杂样儿,有名字的,没名字的,', 'image': '3.png', 'time': 3}, {'subtitle': '散在花丛里,像眼睛,像星星,还眨呀眨的。', 'image': '3.png', 'time': 3}, {'subtitle': '“吹面不寒杨柳风”,不错的,像母亲的手抚摸着你。', 'image': '4.png', 'time': 4}, {'subtitle': '风里带来些新翻的泥土的气息,混着青草味儿,', 'image': '4.png', 'time': 3}, {'subtitle': '还有各种花的香,都在微微润湿的空气里酝酿。', 'image': '4.png', 'time': 3}, {'subtitle': '鸟儿将巢安在繁花嫩叶当中,高兴起来了,', 'image': '4.png', 'time': 3}, {'subtitle': '呼朋引伴地卖弄清脆的喉咙,唱出宛转的曲子,', 'image': '4.png', 'time': 3}, {'subtitle': '跟轻风流水应和着。牛背上牧童的短笛,', 'image': '4.png', 'time': 3}, {'subtitle': '这时候也成天在嘹亮地响着。', 'image': '4.png', 'time': 2}, {'subtitle': '雨是最寻常的,一下就是三两天。可别恼。', 'image': '5.png', 'time': 4}, {'subtitle': '看,像牛毛,像花针,像细丝,密密地斜织着,', 'image': '5.png', 'time': 3}, {'subtitle': '人家屋顶上全笼着一层薄烟。树叶儿却绿得发亮,', 'image': '5.png', 'time': 4}, {'subtitle': '小草也青得逼你的眼。傍晚时候,上灯了,', 'image': '5.png', 'time': 3}, {'subtitle': '一点点黄晕的光,烘托出一片这安静而和平的夜。', 'image': '5.png', 'time': 4}, {'subtitle': '在乡下,小路上,石桥边,有撑起伞慢慢走着的人;', 'image': '6.png', 'time': 4}, {'subtitle': '还有地里工作的农民,披着蓑戴着笠。他们的草屋,', 'image': '6.png', 'time': 3}, {'subtitle': '稀稀疏疏的,在雨里静默着。', 'image': '6.png', 'time': 2}, {'subtitle': '天上风筝渐渐多了,地上孩子也多了。', 'image': '7.png', 'time': 3}, {'subtitle': '城里乡下,家家户户,老老小小,', 'image': '7.png', 'time': 2}, {'subtitle': '也赶趟儿似的,一个个都出来了。', 'image': '7.png', 'time': 3}, {'subtitle': '舒活舒活筋骨,抖擞抖擞精神,', 'image': '7.png', 'time': 2}, {'subtitle': '各做各的一份儿事去,“一年之计在于春”;', 'image': '7.png', 'time': 3}, {'subtitle': '刚起头儿,有的是工夫,有的是希望。', 'image': '7.png', 'time': 2}, {'subtitle': '春天像刚落地的娃娃,从头到脚都是新的,它生长着。', 'image': '8.png', 'time': 4}, {'subtitle': '春天像小姑娘,花枝招展的,笑着,走着。', 'image': '8.png', 'time': 3}, {'subtitle': '春天像健壮的青年,有铁一般的胳膊和腰脚,他领着我们上前去。', 'image': '8.png', 'time': 5}]

2.字母通过TextClip类创建
可以设置字体和大小,还可以设置字母开始显示时间set_start

可以设置字体停留时间set_duration

可以设置字体的显示位置set_position

3.最后通过CompositeVideoClip类,将字幕和视频合并

注意:
有个坑,添加字幕,需要本地先安装magick
并且设置环境变量:
os.environ[“IMAGEMAGICK_BINARY”] = r’/opt/homebrew/Cellar/imagemagick/7.1.1-34/bin/magick’

标签:视频,subtitle,text,image,字幕,添加,video,time,png
From: https://blog.csdn.net/qq_30594137/article/details/140094118

相关文章

  • C#winform如何在窗体实现视频播放
    1.在Form窗体设计中的左侧工具箱列表中右击鼠标,单击选择项。2.在弹出的对话框中点击COM组件,选择WindowsMediaPlayer,点击确定3.接着在工具箱选择WindowsMediaPlayer控件,将控件添加到窗体中,并且添加一个OpenFileDialog控件4.接着在工具箱的对话框中将OpenFileDialog添加......
  • Nacos未授权添加用户漏洞
    影响范围:Nacos<=2.0.0-ALPHA.1漏洞复现:检测漏洞是否存在POC:/nacos/v1/auth/users?pageNo=1&pageSize=4接下来可以尝试创建用户,useragent写成Nacos-ServerPOC:POST/nacos/v1/auth/usersHTTP/1.1Host:ipCache-Control:max-age=0Upgrade-Insecure-Requests:1Use......
  • 基于深度学习网络的USB摄像头实时视频采集与人脸检测matlab仿真
    1.算法运行效果图预览将摄像头对这播放视频的显示器,然后进行识别,识别结果如下:  本课题中,使用的USB摄像头为:   2.算法运行软件版本matlab2022a 3.部分核心程序程序中包括MATLAB读取摄像头的配置方法,摄像头配置工具箱安装文件。 whiletoc<runtime......
  • cesium 添加 Echarts 图层(空气质量点图)
    cesium添加Echarts图层(下面附有源码)1、实现思路1、在scene上面新增一个canvas画布2、通坐标转换,将经纬度坐标转为屏幕坐标来实现3、将ecarts中每个series数组中元素都加coordinateSystem:‘cesiumEcharts’2、示例代码<!DOCTYPEhtml><htmllang="en"><hea......
  • 验证二叉搜索树 前序 中序 后序的三种解法 - 灵神视频总结
    这节课用三种方法来验证一颗二叉树是否是搜索树。递归的基础知识:看到递归就晕?带你理解递归的本质!--灵神视频总结-CSDN博客如何灵活运用递归?-灵神视频总结-CSDN博客98.验证二叉搜索树二叉搜索树的定义:给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树......
  • Hive 实操案例六:统计上传视频最多的用户 Top10 以及他们上传的视频观看次数在前 20 的
    一、数据表结构视频表t_video字段注释描述videoId视频唯一id(String)11位字符串uploader视频上传者(String)上传视频的用户名Stringage视频年龄(int)视频在平台上的整数天category视频类别(Array<String>)上传视频指定的视频分类length视频长度(Int)整形数字标识的视频长度vie......
  • Hive 实操案例五:统计每个类别中 Top10 的视频热度
    一、数据表结构视频表t_video字段注释描述videoId视频唯一id(String)11位字符串uploader视频上传者(String)上传视频的用户名Stringage视频年龄(int)视频在平台上的整数天category视频类别(Array<String>)上传视频指定的视频分类length视频长度(Int)整形数字标识的视频长度vie......
  • 如何从华为恢复永久删除的视频?
    在从华为恢复永久删除的视频时,这个过程可能很艰难。您可能想知道,如何从华为恢复永久删除的视频?本指南全面概述了有效的恢复方法。无论删除是意外还是由于其他问题,一些策略和工具都可以帮助您恢复宝贵的视频内容。我们将探索这些选项,提供清晰实用的建议,以帮助您恢复失去的记忆。......
  • 搜狐视频全自动工具
    项目介绍:首先我们要用自己的一个号,作为主号,主号上发作品,利用不实名的小号通过脚本自动去浏览视频小号看视频的同时会出现搜狐官方强行插入的广告,从而获得收益收益介绍:小号看一个视频会出现3-5次官网强行插入的广告,也就是说1分钟一个小号也就是一个模拟器百度网盘请输......
  • 搜狐视频全自动工具
    项目简介:我们即将启动一个创新的数字内容推广项目,该项目将利用社交媒体的力量来增加作品的曝光度。在这个项目中,我们将创建一个主账号,用于发布和展示我们的作品。推广策略:我们将采用多账号策略,通过一系列非实名的辅助账号来增加主账号作品的观看次数。这些辅助账号将通过......