本站使用了 Pjax 等基于 JavaScript 的开发技术,但您的浏览器已禁用 JavaScript,请开启 JavaScript 以保证网站正常显示!

字幕朗读器——由字幕文件生成音频

这是什么

起因是我做视频懒得说话,最多在视频做好后加上字幕,但光有字幕没语音感觉还是差了点意思。市面上有很多文本朗读器,可是我并没有找到一款能朗读字幕的应用,我这里的朗读字幕指语音能自动和字幕时间轴匹配。虽然有几款播放器(potplayer、kmplayer、VLC)自带字幕朗读功能,通过一边朗读一遍录音的话就可以得到我想要的音频,但这种做法过于笨拙。本着学习的目的,我试着用py写了一个小程序实现了字幕朗读的功能。

实现原理

充分利用已有的轮子

  • 通过百度AI平台和阿里云语音服务实现语音合成
  • 利用srt库处理srt字幕文件
  • 利用pydub库对声音进行合成和拼接

代码

写完了发现比想象中要简单,几行代码就搞定了。目前只支持SRT格式的字幕文件,反正字幕文件间可以互相转,对于复杂的字幕可能引发的bug现在一概忽略(比如字幕重叠、一句话语音过长,多轨字幕等)。
另外目前都是单线程,速度可能有点慢,程序可能出现假死无响应状态,只要后台文件一直在增加,大可不用管。(因为语音平台都是限制并发数的,感觉多线程有必要?)
现已添加多线程。
[scode type="green"]代码地址:https://github.com/kizx/subtitle2audio[/scode]

下载

[button color="success" icon="fa fa-download" url="https://pan.2bboy.com/Public/Software/%E5%AD%97%E5%B9%95%E6%9C%97%E8%AF%BB/" type=""]onedrive下载地址[/button][button color="success" icon="fa fa-download" url="https://wws.lanzous.com/b01hhub9g" type=""]蓝奏云下载 密码:gyb3[/button]

使用


[tab name="v1.0 控制台版"]
  • 安装依赖 pip install -r requirements.txt
  • 安装 ffmpeg
  1. 下载解压ffmpeg
  2. 将解压的 ffmpeg/bin 路径添加到系统环境变量
  • 填写百度 KEY在百度 AI 平台获取相关 KEY ,打开 main.py 填写相应 KEY
  • 启动 python main.py [.srt文件]
    [/tab]
[tab name="v1.1 web-gui版"]
  • 安装 ffmpeg
  1. 下载解压ffmpeg
  2. 将解压的 ffmpeg/bin 路径添加到系统环境变量
  • 安装依赖

    python -m venv venv
    venv\Scripts\activate
    pip install -r requirements.txt
  • 启动 flask run浏览器打开 http://127.0.0.1:5000/ 获取并填写相关 key 后点击生成,所有生成的文件在 output 文件夹内。
[/tab]
[tab name="v2.x pyqt-gui版" active="true"]
  • 安装 ffmpeg
  1. 下载解压ffmpeg
  2. 将解压的 ffmpeg/bin 路径添加到系统环境变量(可能需要重启电脑)

由于申请不了谷歌api,目前做不了谷歌接口
报毒请添加白名单或者信任,我自己电脑都报毒→_→,不放心自己下载源码运行


[/tab]

视频案例演示

后记

后来发现一个有同样功能的软件:http://www.cross-plus-a.com/cn/balabolka.htm 打开工具->字幕转换器功能就是,这功能藏的太隐秘当初都没找到。


后后来发现一个叫字幕说的网站也有类似的服务,不过介绍来看,这个是输入文本,然后生成同步的语音和字幕。虽然节省了做字幕的功夫,但这种只适合那种一刻不停的说的视频,适用性还有待提高(有空我也可以整合实现这种功能)。


 继续浏览关于 Python 的文章

 本文最后更新于 2020/08/09 18:11:33,可能因经年累月而与现状有所差异

 引用转载请注明:醉后的星星 > 代码 > 字幕朗读器——由字幕文件生成音频

发表评论

精选评论

  1. week7
    week7 回复

    Windows 10Chrome 78.0.3904.108

    下载下来的都是0字节

    1. 醉后的星星

      评论区有蓝奏云下载地址,有空我加上|´・ω・)ノ

  2. spring
    spring 回复

    Windows 7Chrome 83.0.4103.97

    appkey怎么获取

    1. 醉后的星星

      去百度或者阿里云后台开启相关服务后获取

  3. strong
    strong 回复

    Windows 10Chrome 81.0.4044.138

    ok,找到问题了,是ffmpeg,我的路径设置有问题,已经解决,谢谢。。。。。

  4. strong
    strong 回复

    Windows 10Chrome 81.0.4044.129

    百度云下载第一句语音后就卡住了,app id应该没设置错误,audio目录下生成了第一句字幕语音

    1. 醉后的星星

      用我示例字幕测试了吗,绝大多数问题都是因为字幕不规范导致的问题

      1. strong
        strong 回复

        Windows 10Chrome 81.0.4044.129

        另外用Balabolka的语音库,会突然提示没了第几句wav文件,然后卡住 。 看audio文件夹,wav文件都已经下载,就是没合成 为一个文件。我比较丧心病狂,合成的是400句,5000字 左右的srt。能不能把n个wav合成一个按字幕播音mp3,这个功能单独分出来?

        1. 醉后的星星

          这个不难,过几天看看∠( ᐛ 」∠)_

      2. strong
        strong 回复

        Windows 10Chrome 81.0.4044.129

        用的就是软件自带的srt问句,出了个错误框“Expecting value:line1 conlumn 1 (char 0)”.
        百度用的是免费的app id,默认开通了语音合成。阿里云的app id好像要收费?

        1. 醉后的星星

          没见过的报错,我也不知道你问题出在哪╮(╯▽╰)╭ 阿里那个免费试用三个月吧好像

          1. strong
            strong 回复

            Windows 10Chrome 81.0.4044.138

            嗯,我把bin下面三个文件直接移到软件的根目录下,解决了。

          2. 醉后的星星

            那你可能是ffmpeg没有配置好

          3. strong
            strong 回复

            Windows 10Internet Explorer 11

            我用阿里云对范例的srt进行合成,也出现同样的错误提示,看audio文件夹,4个语句的mp3已经下载好,所以api是没问题的。balabolka的发音人选择太少,真是郁闷。。。。

          4. 醉后的星星

            我视频演示都在那了,演示文件不会出错的

          5. strong
            strong 回复

            Windows 10Chrome 81.0.4044.138

            我用win7,win10的纯洁系统都出现这个问题,“Expecting value:line1 conlumn 1 (char 0)”,好像是Python的错误反馈,请检查一下代码是不是有bug?

  5. charles
    charles 回复

    Windows 10Chrome 80.0.3987.163

    下载程序包提示有木马病毒

    1. 醉后的星星

      我自己运行defender都报毒→_→设置白名单吧

      1. 小胖
        小胖 回复

        Windows 7搜狗浏览器 2.X

        你好,楼主,能给个百度盘的地址吗?下载到一半经常就断了。

        1. 醉后的星星
          1. 小胖
            小胖 回复

            Windows 7搜狗浏览器 2.X

            谢谢发送地址。请问ffmpeg怎么安装?解压后干什么?我的机器是win7,感觉和你交的安装方式不一样。我将bin中的3个文件拷入文件根目录也不行,一直出错。

          2. 小胖
            小胖 回复

            Windows 7搜狗浏览器 2.X

            谢谢,软件已下载,但是在合成的时候老是报错。显示"decoding failed,ffmpeg returned error code:1后面还有很多。已按照@strong的方法,将三个文件拷贝到软件根目录,还是不行。