Youtube 支持一些二进制字幕文件格式,例如 ebu-stl。
我有一个 *.stl 文件,当我通过 Web 界面上传它时,它可以很好地上传和处理。但是,当我尝试使用 POST 请求通过 API v2 上传它时,它似乎无法正确识别文件格式。POST 请求如下所示:
POST /feeds/api/videos/VIDEO_ID/captions HTTP/1.1
Host: gdata.youtube.com
Content-Type: application/vnd.youtube.timedtext; charset=UTF-8
Content-Language: en
Slug: Title of caption track
Authorization: Bearer ACCESS_TOKEN
GData-Version: 2
X-GData-Key: key=DEVELOPER_KEY
<Caption File Data>
这就是通过 API 上传的 *.stl 文件在网站上的外观。应该有几行带有可读文本的行。
当我上传具有相同代码的 utf8 纯文本字幕文件(例如 *.vtt)时,一切正常。此外,如果我通过 Web 界面和 API 上传一次 stl 文件,然后通过 API检索这两个文件,它们是字节相同的。
对我来说,这看起来像是一个编码问题——youtube 正确接收了文件,但可能会将整个二进制文件解析为 UTF-8。但是,当我省略charset=或Content-Language时,youtube 会响应 4xx 错误。
是否可以上传二进制字幕文件?如果不可能,我也将不胜感激。
简约的 stl 文件,如果您想自己尝试(十六进制转储)。将其读作(红宝石):
stl = hex.chars.each_slice(2).map{|x|x.join.to_i(16)}.pack('C*')