Youtube-API:上传二进制字幕文件 (ebu-STL)

标签 youtube-api binaryfiles closed-captions

Youtube 支持一些二进制字幕文件格式,such as ebu-stl.

我有一个 *.STL 文件,当我通过 Web 界面上传它时,它可以正常上传和处理。但是当我尝试使用 POST 请求通过 API v2 上传它时,它似乎无法正确识别文件格式。 The POST request looks like this :

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 文件在网站上的样子。应该有几行带有可读文本。 Ebu-Stl uploaded via Api

当我使用相同的代码上传一个 utf8 纯文本字幕文件(例如 *.vtt)时,一切正常。此外,如果我通过 Web 界面上传一次 STL 文件并通过 API 上传一次,and retrieve both files through the API afterwards , 它们是字节相同的。

在我看来这像是一个编码问题 - youtube 正确接收了文件,但可能将整个二进制文件解析为 UTF-8。但是,当我省略 charset=Content-Language 时,youtube 会返回 4xx 错误。

是否可以上传二进制字幕文件?如果不可能,我也希望得到确认。

Minimalistic stl file if you want to try it yourself (hex dump).读作( ruby ):

stl = hex.chars.each_slice(2).map{|x|x.join.to_i(16)}.pack('C*')

最佳答案

API v2 现已正式弃用。截至 4 月 2 日,API v3 现在 officially support captions .也支持二进制字幕文件。

该文档缺少有关原始 HTTP 请求的一些详细信息。您可以尝试使用 one of their libraries .

我使用了他们的 python 脚本并查看了它发出的请求。作为引用,这里有一个用于上传二进制字幕文件的最小工作 HTTP 请求。

docs aren't mentioning此参数,但设置 uploadType=multipart 很重要,否则 API 会返回错误。

POST /upload/youtube/v3/captions?uploadType=multipart&part=id,snippet&sync=false HTTP/1.1
Host: www.googleapis.com
Accept: */*
Authorization: Bearer {AUTH_TOKEN}
X-GData-Key: key={YOUR_KEY}
Content-Type: multipart/related; boundary================83250640405719953005==
Content-Length: 7147
Expect: 100-continue

--===============83250640405719953005==
Content-Type: application/json
MIME-Version: 1.0

{"snippet":{"videoId":"Agn_uesF248","language":"en","name":"Subtitle Test 2","isDraft":false}}
--===============83250640405719953005==
MIME-Version: 1.0
Content-Type: application/sla
Content-Transfer-Encoding: binary

{BINARY_CAPTION_FILE_DATA}
--===============83250640405719953005==--

application/sla 是 ebu-STL 字幕文件。将 text/plain 用于纯文本字幕(.srt、.vtt、.ass 等)。

{AUTH_TOKEN}{YOUR_KEY} 替换为 the proper authorization credentials对于范围 https://www.googleapis.com/auth/youtube.force-ssl;和 {BINARY_CAPTION_FILE_DATA} 您要上传的文件。

关于Youtube-API:上传二进制字幕文件 (ebu-STL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25219807/

相关文章:

Youtube api v3 获取用户视频列表

youtube-api - 如何使用 YouTube V3 API 获取所有电影(不是视频)

c++ - 字节交换和 C++/C

c++ - 为什么 ifstream 阅读器只读取图像文件的前 10 个字节?

html - 默认情况下关闭 HTML5 视频的隐藏式字幕

HTML5 轨道字幕未显示

php - 获取给定类别中所有YouTube视频的完整列表

javascript - Vue.js 2 - vue-youtube-embed 如何检测视频结束状态?

javascript - 使用二进制响应填充输入类型标签

android - 在 Android 上为 HLS 流呈现隐藏式字幕