我有一个视频,想为其添加字幕。有没有可以进行基本的语音转文字的程序,以便
- 设置每个字幕的正确开始/停止
- 创建基本的文本字幕(使用某种语音转文本技术)
我知道gnome 字幕。但是,手动创建这些字幕需要付出大量努力。您需要自己选择每个句子的开始和结束时间。
YouTube 具有上述功能(使用语音转文本,在正确的时间创建基本的文本字幕)。但是,我宁愿不将视频上传到 YouTube 只是为了获得字幕。在 Ubuntu 上可以高效地制作字幕吗?
更新:我计划只使用 .srt 字幕,不需要在视频上硬编码。我最大的要求是让程序自动找到每个句子的开始/结束,这样我就可以在其中写入文本。
更新 #2:Linux 上有语音转文本软件,带有 CMU Sphinx 软件包。可以根据以下说明将 CMU Sphinx 与字幕程序一起使用这个帖子。此外,一个字幕工具可以识别这个 CMU Sphinx 功能(基于网络的工具),但是最新的源代码中没有提到他们添加了 CMU Sphinx。任务仍在继续,寻找一个使用 CMU Sphinx 进行基本的语音转文本的程序(它也会设置正确的时间),就像 YouTube 已经做的那样。
答案1
您有多种选择:
YouTube
对于那些接受必须将视频临时上传到 YouTube(必须选择视频语言)以获取其字幕(隐藏字幕,歌词)的人:可以使用youtube-dl或者yt-dlp:
yt-dlp --write-auto-sub \ # Write automatically generated subtitle file (YouTube only)
--write-sub \ # Write subtitle file
--sub-lang en,de,es \ # Languages of the subtitles to download (optional) separated by commas, use --list- subs for available language tags
--convert-subs srt \ # Convert the subtitles to other format (currently supported: srt|ass|vtt|lrc)
-o "~/%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" \ # OUTPUT TEMPLATE
--skip-download \ # Do not download the video
--ignore-errors vidURLorID # Continue on download errors, for example to skip unavailable videos in a playlist
一行简化:
yt-dlp --write-auto-sub --write-sub --sub-lang en --convert-subs srt --skip-download vidURLorID
如果转换无效,请使用FFmpeg:
ffmpeg -i myTitle.en.vtt output.srt
从 转换srt 转 txt:
sed -r -e 's/^\xef\xbb\xbf//' -e 's/\r//' -e 's/^[0-9]*$//' -e '/^[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} --> [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}$/d' -e 's/^\s*$//' -e '/^$/d;s/<[^>]*>//g' output.srt | uniq > output.txt
相关答案。
Whisper(OpenAI)
耳语是一种通用语音识别模型。它在大量多样化音频数据集上进行训练,同时也是一种多任务模型,可以执行多语言语音识别以及语音翻译和语言识别。
您可以从以下位置获取一些基于 Whisper 的工具这个很棒的列表。
实时字幕
实时字幕是一个为 Linux 桌面提供实时字幕的应用程序。
目前仅支持英语。其他语言可能会产生乱码或错误的语音翻译。
在Flathub。
Kdenlive
Kdenlive 有一个自动字幕/语音转文本功能(可选择使用 Whisper)。
答案2
更新:
autosub
不再维护。另一个带有 GUI 的分支名为pyTranscriber可以使用。
您可以使用此命令行实用程序
自动订阅是一款用于自动语音识别和字幕生成的实用程序。它以视频或音频文件作为输入,执行语音活动检测以查找语音区域,向 Google Web Speech API 发出并行请求以生成这些区域的转录,(可选)将其翻译成其他语言,最后将生成的字幕保存到磁盘。
https://github.com/agermanidis/autosub/
Python3 用户请执行以下操作:
pip install git+https://github.com/BingLingGroup/autosub.git@alpha
确保您已安装 ffmpeg。
答案3
我没有找到一种方法来让字幕程序通过分析视频中的声音自动添加基本的字幕。
因此,我使用的替代方案是
- 将视频上传到 Youtube(例如,私下上传)并使用内置功能自动创建基本字幕。
然后,
- 将视频添加到http://www.universalsubtitles.org/如果 Youtube 中的自动化方法不起作用或者缺少句子,则手动为每个句子创建时间框架。
- 使用GNOME 字幕(位于软件中心)以清理字幕并修复任何时间。
答案4
我用了埃吉苏布几年前在 Windows 上开发过,并且对它非常满意。显然它适用于 Linux。它非常容易理解。
Aegisub 仅创建字幕文件,例如 .srt 文件。要将视频和字幕结合起来创建硬编码字幕,您仍然需要使用第二个程序。
在 Windows 上我使用了 VirtualDub,但它不适用于 Linux。您可以使用 VLC 在 Linux 上执行此操作:
在 Aegisub 中创建您的子内容,并像往常一样将其保存为 .ass 文件。
使用 VLC 将该字幕轨道添加到您的视频。字幕 -> 添加字幕文件...
配置字幕显示样式和设置,使其按您的喜好显示。工具 -> 首选项 -> 字幕/OSD
现在您可以观看视频,以确保字幕按预期显示。例如,我可以检查我在 Aegisub 中指定的某些字幕是否显示在屏幕顶部而不是底部。
输出将与现在的样子相同,因此请确保一切正常。
转到媒体 -> 转换/保存... (Ctrl + R)。
在文件选择下,添加您的视频文件。勾选“使用字幕文件”并浏览到您的 .ass 字幕文件。
单击转换/保存按钮上的向下箭头,然后单击转换...(Alt + O)。
在“设置”下,确保选中“转换”选项。选中“显示输出”选项。除非您选中此选项,否则不会出于某种原因添加字幕。
编辑配置文件,使视频和音频设置符合您的要求。在字幕选项卡下,勾选字幕框,并使用 DVB 字幕编解码器。确保勾选“在视频上叠加字幕”。按保存。
在目标框中输入目标文件夹和文件名。
按开始。
等待它完成,就完成了。这种方法的缺点是编码将与视频一起实时进行,因此如果您的视频时长为 2 小时,则需要 2 小时。这是因为勾选了“显示输出”框。但出于某种原因,只有勾选此项时它才有效。
还有其他字幕编辑器。
更新:
我不记得 Aegisub 具有在字幕文件中自动设置口语句子的开始和结束的功能。而且我在网站上没有看到任何关于此功能的提及。不过,使用(组合键)可以很容易地手动设置这些时间。
是否有任何程序具有这样的功能(在任何操作系统中)?