目录

ffmpeg给mp4视频加字幕

 执行结果:


ffmpeg给mp4视频加字幕

前期输入准备:

  • mp4视频
  • 外挂字幕:是一个单独的外部字幕文件,格式类型一般有srt、vtt、ass等等。播放视频时,需要把外挂字幕和视频放在同一目录下,并在播放器中选择字幕文件才可以在视频中看到字幕。

     在网上找了一个外部字幕文件,可以参考这个:https://i0.hdslb.com/bfs/subtitle/e837950453ea3e4f6e81a5709449af173d2604dc.json

输出:

  • mp4视频

(1)前期需要准备一个mp4视频,

(2)也可以运行下列代码生成外部字幕文件srt格式的,

补充:比较流行的文本字幕有srt、smi、ssa,因为是文本格式,所以就比较小了,一般大不过百来k。其中srt文本字幕最为流行,因为其制作规范简单,一句时间代码+一句字幕,使得制作修改就相当简单。配合上.style文件还能让srt自带一些字体上的特效等。几种文本字幕可以互相转换。文本字幕一般通过对图形字幕进行OCR或者手工制作生成,OCR英文字幕不难,毕竟英文识别难度小嘛,OCR中文难度就大一些,所用的软件个头也不小(SubOCR,

30多MB)。

SRT文件属于视频字幕文件,用户可以使用记事本打开查看,如果需要编辑字幕,SRT文件打开后,可以看到主要包括:数字、时间、字幕文本以及空行组成,简单了解即可。

def s2hms(x):  # 把秒转为时分秒
    m, s = divmod(x, 60)
    h, m = divmod(m, 60)
    hms = "%02d:%02d:%s" % (h, m, str('%.3f' % s).zfill(6))
    hms = hms.replace('.', ',')  # 把小数点改为逗号
    return hms


sub_content = [{"from": 0, "to": 3.39, "location": 2,
                "content": "在本视频中"}]
with open('1.srt', 'w') as f:
    write_content = []
    for n, i in enumerate(sub_content):  # 序号+开始-->结束+内容
        write_content.append(
            str(n + 1) + '\n' + s2hms(i['from']) + ' --> ' + s2hms(i['to']) + '\n' + i['content'] + '\n\n')
    f.writelines(write_content)

执行结果:

 外部字幕文件1.srt打开之后,是这样的:

 (3) 运行下列代码来对视频添加外部字幕文件里的字幕,

import subprocess

cmdLine = 'ffmpeg -i a.mp4 -vf subtitles=1.srt output.mp4'
subprocess.call(cmdLine, shell=True)

 执行结果:

 打开output.mp4,就可以看到我们添加的字幕了,

 

OK。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐