原文转载自「刘悦的技术博客」https://v3u.cn/a_id_169
为影片加字幕其实是一件十分消耗工夫的事件,尤其是对于打字慢的敌人来说。当然不光为影片加字幕,在其余畛域,相似的逐字稿也是工作中防止不了的内容。比方写论文,如果内容中有访谈,就必须要附上逐字稿,又或者是会议的记录等等。本次应用基于 Python3 的 AutoSub 库对实时语音进行辨认,而后再通过 GoogleTranslation 的在线 API 接口对语音辨认后的内容进行翻译,这样就能够失去一份双语字幕 (逐字稿),这里的双语不只针对国语 + 英语组合,也能够蕴含其余国家,包含小语种地区,十分不便。
首先须要装置 ffmpeg,这个软件在之前有过介绍:Python3 利用 ffmpeg 针对视频进行一些操作,Win10 用户能够依据这篇文章进行装置,如果是 Mac 用户则非常简单,应用 Homebrew 就能够十分不便的进行装置
brew install ffmpeg
其后装置 autosub,这个库其实就是针对 Google 的语音辨认封装而成的,最早基于 Python2,近几年也呈现很多“魔改版”,这里举荐尽量装置原版的基于 Python3 的最新版,而应用 pip 间接 install 往往无奈装置最新版,所以这里举荐用 git 版本库地址的形式进行装置,这样能够防止很多坑:
pip3 install git+https://github.com/agermanidis/autosub.git
装置胜利后,输出命令:
autosub -h
就能够看到应用阐明:
liuyue:myr liuyue$ autosub -h
usage: autosub [-h] [-C CONCURRENCY] [-o OUTPUT] [-F FORMAT] [-S SRC_LANGUAGE]
[-D DST_LANGUAGE] [-K API_KEY] [–list-formats]
[–list-languages]
[source_path]positional arguments:
source_path Path to the video or audio file to subtitleoptional arguments:
-h, –help show this help message and exit
-C CONCURRENCY, –concurrency CONCURRENCY
Number of concurrent API requests to make
-o OUTPUT, –output OUTPUT
Output path for subtitles (by default, subtitles are
saved in the same directory and name as the source
path)
-F FORMAT, –format FORMAT
Destination subtitle format
-S SRC_LANGUAGE, –src-language SRC_LANGUAGE
Language spoken in source file
-D DST_LANGUAGE, –dst-language DST_LANGUAGE
Desired language for the subtitles
-K API_KEY, –api-key API_KEY
The Google Translate API key to be used. (Required for
subtitle translation)
–list-formats List all available subtitle formats
–list-languages List all available source/destination languages
应用办法非常简单,将你的视频或者音频放入我的项目文件夹,输出命令
autosub -S zh-CN -D zh-CN 视频 / 音频门路
这里假如你视频中的语言是国语,当然也能够是其余国别,这里是反对语言代码:
af Afrikaans
ar Arabic
az Azerbaijani
be Belarusian
bg Bulgarian
bn Bengali
bs Bosnian
ca Catalan
ceb Cebuano
cs Czech
cy Welsh
da Danish
de German
el Greek
en English
eo Esperanto
es Spanish
et Estonian
eu Basque
fa Persian
fi Finnish
fr French
ga Irish
gl Galician
gu Gujarati
ha Hausa
hi Hindi
hmn Hmong
hr Croatian
ht Haitian Creole
hu Hungarian
hy Armenian
id Indonesian
ig Igbo
is Icelandic
it Italian
iw Hebrew
ja Japanese
jw Javanese
ka Georgian
kk Kazakh
km Khmer
kn Kannada
ko Korean
la Latin
lo Lao
lt Lithuanian
lv Latvian
mg Malagasy
mi Maori
mk Macedonian
ml Malayalam
mn Mongolian
mr Marathi
ms Malay
mt Maltese
my Myanmar (Burmese)
ne Nepali
nl Dutch
no Norwegian
ny Chichewa
pa Punjabi
pl Polish
pt Portuguese
ro Romanian
ru Russian
si Sinhala
sk Slovak
sl Slovenian
so Somali
sq Albanian
sr Serbian
st Sesotho
su Sudanese
sv Swedish
sw Swahili
ta Tamil
te Telugu
tg Tajik
th Thai
tl Filipino
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
yi Yiddish
yo Yoruba
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
zu Zulu
也就是说,如果你下载了小语种国家的电影,然而不晓得外面在讲些什么,也能够依赖这个库进行语音辨认。
辨认过程可能会有些慢,这取决于你的视频 / 音频的体积大小
如果想快一点,能够为 autosub 库手动加上本人的代理服务,关上 autosub 源码中的__init__.py 文件,大略在 99 行左右应用 requests 库申请接口时加上 proxies。
try:
resp = requests.post(url, data=data, headers=headers, proxies={
'http': 'http://127.0.0.1:4780',
'https': 'https://127.0.0.1:4780'
})
except requests.exceptions.ConnectionError:
continue
辨认完结后,就会将语音转储成为可见的字幕文件:
0
00:00:00,150 –> 00:00:04,380
比方当初线上怎么样是能够拜访的的1
00:00:04,381 –> 00:00:08,520
然而假如我干嘛改了你怎么办2
00:00:08,521 –> 00:00:09,660
你还得从新打吧3
00:00:09,661 –> 00:00:15,930
其实并不需要对有点像咱们手机利用有些利用4
00:00:15,931 –> 00:00:17,160
它是更新版本的时候5
00:00:17,161 –> 00:00:18,660
你说要反复重新安装6
00:00:20,010 –> 00:00:20,610
没印象
当然了,有些句子或者词汇并不精确,可能须要手工批改一下,为了让你的字幕更加精准,这样的批改工作是防止不了的。
咱们失去了识别字幕后,就能够着手进行双语字幕的制作了,首先注册 https://cloud.google.com/
这里新用户注册胜利后,都会赠送 300 美金,其实就是大略能够应用一年,此时点击控制台。
在默认我的项目中,确保你启用了谷歌翻译服务
随后,点击凭据,生成一个新的 API 秘钥,该秘钥在调用接口时须要通过参数进行传递。
当初前置工作搞定了,咱们来写个测试脚本
import requests
import json
content = "Several years ago,i went to study python in beijing"
language_type = "en"
url = "https://translation.googleapis.com/language/translate/v2"
data = {
'key': 'API 秘钥', #你本人的 api 密钥
'source': language_type,
'target': 'zh-cn',
'q': content,
'format': 'text'
}
headers = {'X-HTTP-Method-Override': 'GET'}
response = requests.post(url, data=data, headers=headers)
res = response.json()
text = res["data"]["translations"][0]["translatedText"]
print(text)
这里咱们将英文翻译成国语,能够看到速度还是蛮快的。
那如果针对字幕,则是针对国语翻译为英文,再通过文件追加的形式将英文写入到字幕每一行的下方。
通过翻译的字幕就是上面这样:
0
00:00:00,150 –> 00:00:04,380
For example, what is accessible online now
比方当初线上怎么样是能够拜访的的1
00:00:04,381 –> 00:00:08,520
But suppose I changed what about you
然而假如我干嘛改了你怎么办2
00:00:08,521 –> 00:00:09,660
You’ll have to try again
你还得从新打吧3
00:00:09,661 –> 00:00:15,930
It doesn’t have to be a little bit like we have apps on our phones, some apps
其实并不需要对有点像咱们手机利用有些利用4
00:00:15,931 –> 00:00:17,160
It’s time to update the version
它是更新版本的时候5
00:00:17,161 –> 00:00:18,660
You said you’d have to reinstall it
你说要反复重新安装6
00:00:20,010 –> 00:00:20,610
No impression?
没印象
看起来还不错,然而当初双语字幕和视频还是拆散的状态,咱们须要将它们进行合并,于是又到了 ffmpeg 闪亮退场的时刻了。
ffmpeg -i test.mp4 -i my.srt -c:s mov_text -c:v copy -c:a copy output.mp4
下面的命令就是将指标视频和指标字幕合并为一个新的视频 output.mp4
成果是这样的:
是不是感觉有点高大上,又或者,你想让字幕也炫酷一点
ffmpeg -i test.mp4 -vf "subtitles=my.srt:force_style='Fontsize=24,PrimaryColour=&H0000ff&'" -c:a copy output.mp4
这里应用 force_style 过滤器中的 subtitles 选项。应用字幕文件 subs.srt 并应用红色字体色彩制作字体大小为 24 的示例。
成果是这样的:
对于字幕更多的设置计划请参照官网文档:http://ffmpeg.org/ffmpeg-all….
结语:双语字幕能够轻松的让影片的播放量失去稳固的增长,同时也能够吸引到其余国别的观众,何乐而不为,由此可见,技术扭转生存的同时,也能够扭转咱们工作。
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_169