亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图

过去,给英文视频配上字幕实在是一项既繁琐又耗时的苦差事。翻译人员得花费数小时聆听英文原文,还得借助工具调整时间轴,这不仅成本高昂,而且很难做到迅速发布。不过,现在有一种服务,它有望彻底改变这一现状。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图1

传统字幕添加的痛点

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图2

给一个小时的英文视频添加字幕,工作量相当庞大。翻译人员需要长时间专注地聆听英文内容,这个过程有时甚至能持续数小时。此外,还需借助专业工具来制作时间轴,这不仅对翻译人员的专业技能提出了高要求,而且成本也不菲。因此,想要迅速发布带有字幕的视频变得格外困难。许多小型制作团队,受限于资金和人力,常常因此推迟视频的发布。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图3

无服务器架构的优势

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图4

这种架构无需购置服务器,显著降低了成本。这对于许多预算有限的内容制作者或小型工作室而言,无疑是个好消息。此外,它还能在多种场合下轻松使用,无需烦恼于服务器管理的繁琐事务。这样一来,技术门槛得以降低,使得更多人能够参与到视频字幕转换应用的建设中来。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图5

ASR服务的特点

这项功能让开发人员能够轻松地为应用加入语音转文本的能力。它兼容多种语言,包括英语和普通话。在北京及宁夏两地,这项服务已经投入使用。这表明在这些地方,人们能更有效地利用这一服务优势。例如,在制作涉及国际交流的北京视频或宁夏地区的教育视频时,都能方便地运用这一工具。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图6

这个服务能快速而精确地将语音转换成文字,为视频字幕的制作打下基础。尽管许多翻译软件能够处理文本翻译,但在语音转化的准确性和便捷性上,却远不及这个服务。

操作流程中的关键环节

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图7

新建文件夹来存放待处理视频是件很重要的事。直接将视频放入桶中可能会引发函数循环调用的麻烦。此外,创建IAM角色并赋予函数相应的权限同样是不能忽略的步骤,这直接影响到函数能否与相关服务顺畅沟通。在选取执行角色时,必须严格按照流程操作,否则可能会导致函数创建不成功。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图8

操作时稍有不慎,便可能导致字幕生成流程受阻,因此每个步骤都应格外小心。许多技术初学者在此过程中常犯错误,这主要是因为他们对各环节的原理理解不够深入。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图9

函数设置与触发条件

选择2.7作为开发环境,并为它分配相应的角色,这需要根据具体情况进行恰当的配置。监控特定类型的文件触发条件,其方式颇具特色。每当有符合标准的视频被添加,便会自动触发相关函数,从而实现了监控和操作的自动化。函数的默认内容大小无需调整,这样的设计使得用户操作更为便捷,也减少了调整的繁琐步骤。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图10

若缺乏相应的函数配置与触发条件,自动字幕提取及转换将变得十分困难。这种设计大大减少了人工操作所需的时间,相较于传统的人工手动操作,优势显著。

亚马逊云科技 re:Invent 2020:疫情下的线上会议与技术创新插图11

字幕转换与输出

now=int(time.time())
    job_name = "conv-"+str(now)

将特定文件转换成srt字幕格式是函数操作中的一个重要环节。上传srt文件到S3时,输出路径的设定必须遵循一定的规范。操作过程中,每一步都得严格按照规则执行,以确保在指定位置找到准确的字幕文件。这一系列步骤紧密相连,只有这样才能确保从视频到带字幕视频的转换工作得以顺利完成。

同学们,你们尝试过自己加字幕吗?对这种无服务器架构的解决方案有何感受?期待你们点赞并分享这篇文章,同时欢迎在评论区留下你们的观点。

  transcribe = boto3.client('transcribe')
    transcribe.start_transcription_job(
        TranscriptionJobName=job_name,
        Media={'MediaFileUri': job_uri},
        MediaFormat='mp4',
        LanguageCode='en-US'
    )

  while True:
        status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
        if status['TranscriptionJob']['TranscriptionJobStatus'in ['COMPLETED''FAILED']:
            break
        print("Transcribe is processing...")
        time.sleep(5)

THE END