Youtube-API: Загрузить файл бинарных титров (ebu-stl)

Youtube поддерживает некоторые форматы файлов с титрами, например, ebu-stl.

У меня есть файл *.stl, который отлично загружается и обрабатывается, когда я загружаю его через веб-интерфейс. Но когда я пытаюсь загрузить его через API v2 с помощью запроса POST, он, похоже, не распознает формат файла должным образом. Запрос 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>

Так выглядит файл *.stl, загруженный через API, на веб-сайте. Там должно быть несколько строк с читаемым текстом.Ebu-Stl загружен через Api

Все работает нормально, когда я загружаю файл субтитров с открытым текстом utf8 (например, *.vtt) с тем же кодом. Кроме того, если я загружаю файл stl один раз через веб-интерфейс и один раз через API, а затем извлекаю оба файла через API, они идентичны байту.

Похоже, что проблема с кодировкой для me-youtube правильно принимает файл, но, вероятно, анализирует весь двоичный файл как UTF-8. Тем не менее, YouTube отвечает с ошибкой 4xx, когда я опускаю либо charset= или Content-Language.

Можно ли загрузить двоичные файлы титров? Буду также признателен за подтверждение, если это невозможно.

Минималистичный файл stl, если вы хотите попробовать его самостоятельно (hex dump). Прочитайте это как (ruby):

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

1 ответ

Решение

API v2 официально объявлен устаревшим. По состоянию на 2 апреля API v3 теперь официально поддерживает подписи. Также поддерживаются двоичные файлы титров.

В документации отсутствуют некоторые детали относительно необработанных HTTP-запросов. Вы можете попробовать использовать одну из их библиотек.

Я использовал их скрипт на python и посмотрел на сделанный им запрос. Для справки вот минимальный рабочий HTTP-запрос для загрузки двоичного файла субтитров / титров.

Документы не упоминают этот параметр, но настройки 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} с надлежащими учетными данными для авторизации https://www.googleapis.com/auth/youtube.force-ssl; а также {BINARY_CAPTION_FILE_DATA} с файлом, который вы хотите загрузить.

Другие вопросы по тегам