利用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 相关文章推荐
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
python实现折半查找和归并排序算法
Apr 14 Python
Python编程之string相关操作实例详解
Jul 22 Python
python 把列表转化为字符串的方法
Oct 23 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
python集合删除多种方法详解
Feb 10 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python连接mysql方法及常用参数
Sep 01 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 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使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
python strip()函数 介绍
2013/05/24 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
Python安装Bs4的多种方法
2020/11/28 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
简短大学毕业感言
2014/01/18 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
合作意向书范本
2014/03/31 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
公司授权委托书
2014/10/17 职场文书
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers