利用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让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
Python pickle模块用法实例
Apr 14 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
win7上python2.7连接mysql数据库的方法
Jan 14 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
Python带动态参数功能的sqlite工具类
May 26 Python
python3 实现验证码图片切割的方法
Dec 07 Python
java判断三位数的实例讲解
Jun 10 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
pandas 实现将NaN转换为None
May 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
JS实现php的伪分页
2008/05/25 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python如何将多个PDF进行合并
2019/08/13 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
什么是.net
2015/08/03 面试题
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
电工技术比武方案
2014/05/11 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
学习十八大标语
2014/10/09 职场文书
维稳工作承诺书
2015/01/20 职场文书
如何通过cmd 连接阿里云服务器
2022/04/18 Servers