媒体处理的工具集合。
项目描述
压力锅
一个包含各种媒体处理函数和工具的库
设置您的环境
-
如果您还没有安装,请安装 ffmpeg。
-
如果您还没有安装,请安装 GhostScript。
-
如果您还没有安装,请安装 poppler-utils。
待办事项
- pressurecooker.youtube v2 规范:见 https://github.com/learningequality/pressurecooker/issues/32
- 处理 ExtractorError 作为永久性失败(不要重复尝试下载)
- 添加到 YouTube 视频API(支持起始时间) https://www.youtube.com/watch?v=GOJUNJ1o394&t=52 结束时间复杂 https://www.youtube.com/embed/WA8sLsM3McU?start=15&end=20 但仍然可能 https://stackoverflow.com/questions/4661905/how-to-customize-an-end-time-for-a-youtube-video 见 https://developers.google.com/youtube/player_parameters
转换字幕文件
pressurecooker
库包含将字幕文件从几种不同格式转换为首选 VTT
格式的工具。目前支持的格式包括
在
pressurecooker
中,"字幕"和"副标题"这两个术语可以互换使用。所有处理转换的类和函数都使用"副标题"这个术语。
语言代码
DFXP
、SAMI
和TTML
格式可以封装一个文件中的多个语言的字幕内容。而SCC
、SRT
和VTT
格式通常只限于文件中未定义的单种语言(VTT
可能是一个例外,但我们的转换器无法检测其语言)。因此,在转换这些文件时,我们无法知道我们正在处理哪种语言,而必须使用常量LANGUAGE_CODE_UNKNOWN
来提取转换后的字幕。
注意,字幕文件中使用的语言代码可能与le-utils
中定义的 LE 内部语言代码不同。
从文件创建转换器
要使用本地文件路径创建字幕转换器,请使用以下命令
from pressurecooker.subtitles import build_subtitle_converter_from_file
converter = build_subtitle_converter_from_file('/path/to/file.srt')
从字符串创建转换器
如果您已经将字幕加载到字符串变量中,可以像这样创建转换器
from pressurecooker.subtitles import build_subtitle_converter
captions_str = '' # In this example, `captions_str` holds the caption contents
converter = build_subtitle_converter(captions_str)
转换字幕
对于不包含语言代码信息的 SCC
、SRT
和VTT
字幕格式,您必须在提取转换后的字幕时将语言指定为常量 LANGUAGE_CODE_UNKNOWN
from pressurecooker.subtitles import build_subtitle_converter_from_file
from pressurecooker.subtitles import LANGUAGE_CODE_UNKNOWN
converter = build_subtitle_converter_from_file('/path/to/file.srt')
# Option A: Obtain the contents of the converted VTT file as a string
output_str = converter.convert(LANGUAGE_CODE_UNKNOWN)
# Option B: Write the converted subtitles to a local path
converter.write("/path/to/file.vtt", LANGUAGE_CODE_UNKNOWN)
LANGUAGE_CODE_UNKNOWN
常量是 pycaption
使用来表示未知语言代码的内部表示。这是 SCC
、SRT
和VTT
字幕转换器的默认且唯一语言代码。
如果您不确定格式,但知道文件的语言,最好在条件替换 LANGUAGE_CODE_UNKNOWN
时使用该语言
from pressurecooker.subtitles import build_subtitle_converter_from_file
from pressurecooker.subtitles import LANGUAGE_CODE_UNKNOWN
converter = build_subtitle_converter_from_file('/path/to/file')
# Replace unknown language code if present
if converter.has_language(LANGUAGE_CODE_UNKNOWN):
converter.replace_unknown_language('en')
assert converter.has_language('en'), 'Must have English after replace'
output_str = converter.convert('en')
下面是如何处理具有多种语言的多语言字幕格式(如DFXP
、SAMI
和TTML
)的示例
from pressurecooker.subtitles import build_subtitle_converter_from_file
from pressurecooker.subtitles import LANGUAGE_CODE_UNKNOWN, InvalidSubtitleLanguageError
converter = build_subtitle_converter_from_file('/path/to/file')
for lang_code in converter.get_language_codes():
# `some_logic` would be your decisions on whether to use this language
if some_logic(lang_code):
converter.write("/path/to/file-{}.vtt".format(lang_code), lang_code)
elif lang_code == LANGUAGE_CODE_UNKNOWN:
raise InvalidSubtitleLanguageError('Unexpected unknown language')