利用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获取Windows或Linux主机名称通用函数分享
Nov 22 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
python读写ini配置文件方法实例分析
Jun 30 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
基于Python fminunc 的替代方法
Feb 29 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 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
10条PHP编程习惯助你找工作
2008/09/29 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
跟老齐学Python之模块的加载
2014/10/24 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
python使用super()出现错误解决办法
2017/08/14 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
法律六进活动方案
2014/03/13 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
单位租房协议范本
2014/12/03 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
python 下载文件的几种方式分享
2021/04/07 Python