利用Python实现字幕挂载(把字幕文件与视频合并)思路详解


Posted in Python onOctober 21, 2020

其实超简单超简单!python好现成的库,一下子省略了好多步骤!

本文在Windows环境下!linux只是不需要手动输入imagicmagick的位置!

需要用到的环境

  • python(基本上只要不是很老的就行)
  • pip(这个其实python版本>2.8.9或者>3.4的都自带了),可以通过cmd命令pip -V查询是否安装了,没有的话就输入命令

需要用到的工具:

我用的是pycharm,用来写python代码的。
Flie->setting->Project:Test->project Interpreter:

利用Python实现字幕挂载(把字幕文件与视频合并)思路详解

点击右边的+号:在搜索栏输入需要用到的三方库,然后点击install:

需要用要的三方库

  • moviepy(在上面的pycharm工具中可以直接下载或者用pip指令pip install moviepy)
  • ImageMagick(1.去官网直接下http://www.imagemagick.org/script/download.php,根据你操作系统的版本,一路next,我记得有个add to path的选项!一定要勾选,因为他自动吧安装路径添加到环境变量path中了,不然就要手动去加path了。2.我的版本是64位的,不想去官网的可以用我的百度云下载:链接: https://pan.baidu.com/s/1gWE_SwMVm3bEzrGvtixqaQ 提取码: cykj)

和上一篇下载视频一样用俩个py文件吧

一个是AddSubtitles.py(启动类):

# 使用RealizeAddSubtitles类的方法
from core.RealizeAddSubtitles import RealizeAddSubtitles

if __name__ == '__main__':
 '''调用方法示例'''
 addSubtitles = RealizeAddSubtitles('d:/python/DownLoadVideo/Fong.mp4', 'd:/python/DownLoadVideo/Love.txt')

一个是RealizeAddSubtitles.py(实现类)

from os.path import splitext, isfile

from moviepy.editor import (VideoFileClip,
  TextClip,
  CompositeVideoClip)


class RealizeAddSubtitles():
 '''
 合成字幕与视频
 '''
 def __init__(self, videoFile, txtFile):
 self.src_video = videoFile
 self.sentences = txtFile
 # src_video = input('请输入视频文件路径')
 # sentences = input('请输入字幕文件路径')
 if not (isfile(self.src_video) and self.src_video.endswith(('.avi', '.mp4')) and isfile(
 self.sentences) and self.sentences.endswith(
 '.txt')):
 print('视频仅支持avi以及mp4,字幕仅支持txt格式')
 else:
 video = VideoFileClip(self.src_video)
 # 获取视频的宽度和高度
 w, h = video.w, video.h
 # 所有字幕剪辑
 txts = []
 with open(self.sentences, encoding='utf-8') as fp:
 for line in fp:
  sentences, start, span = line.split(': ')
  start, span = map(float, (start, span))
  txt = (TextClip(sentences, fontsize=40,
   font='SimHei', size=(w - 20, 40),
   align='center', color='white')
  .set_position((10, h - 150))
  .set_duration(span).set_start(start))
  txts.append(txt)
 # 合成视频,写入文件
 video = CompositeVideoClip([video, *txts])
 fn, ext = splitext(self.src_video)
 video.write_videofile(f'{fn}_带字幕{ext}')

下面的图片是字幕文件的格式:字幕: 开始时间: 持续时间

利用Python实现字幕挂载(把字幕文件与视频合并)思路详解

​如果报一个imagemagick uninstall什么的错误,原因是因为windows下的imagemagick需要手动导入。
一般在pycharm中,是在你创建的项目中有个venv->Lib->site-packages->moviepy->config_defaults.py。
将IMAGEMAGICK_BINARY后面的=号中的值手动改成你imagemagick安装的路径下的一个magick.exe。
列如:IMAGEMAGICK_BINARY = r"D:\python\ImageMagick-7.0.10-Q16-HDRI\magick.exe"

总结

到此这篇关于如何利用Python实现字幕挂载把字幕文件与视频合并的文章就介绍到这了,更多相关Python实现字幕挂载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python绘制常用的图表
Aug 27 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
Python验证文件是否可读写代码分享
Dec 11 Python
python的re正则表达式实例代码
Jan 24 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
Python读写文件基础知识点
Jun 10 Python
Python 的字典(Dict)是如何存储的
Jul 05 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
Python configparser模块应用过程解析
Aug 14 Python
基于python爬取链家二手房信息代码示例
Oct 21 #Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 #Python
Python为何不支持switch语句原理详解
Oct 21 #Python
基于Python爬取素材网站音频文件
Oct 21 #Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 #Python
运行Python编写的程序方法实例
Oct 21 #Python
Python读写csv文件流程及异常解决
Oct 20 #Python
You might like
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
js实现计算器功能
2020/08/10 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
Python 逐行分割大txt文件的方法
2017/10/10 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
基于Python测试程序是否有错误
2020/05/16 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
违反课堂纪律检讨书
2014/01/19 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
设备收款委托书范本
2014/10/02 职场文书
工作失误检讨书
2015/01/26 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
优化Mysql查询的示例
2022/04/26 MySQL