INTEGRITY Dokumentace

Přidání titulků

Přidávání titulků k vaší video knihovně.

Přidání nebo úprava titulku

Titulky lze k videu přidat dvěma způsoby: vygenerováním pomocí AI nebo nahráním souboru s titulky.

Chcete-li k videu vytvořit nebo upravit titulky, je potřeba Cloudflare API Token ↗ je povinné.

<LANGUAGE_TAG> musí odpovídat formát BCP 47 ↗. Pro pohodlí je k dispozici mnoho běžných jazykových kódů na konci tohoto dokumentu. Pokud jazyk, který přidáváte, není uveden v tabulce, můžete příslušnou hodnotu najít prostřednictvím Registr IANA ↗, který udržuje seznam jazykových kódů. Chcete-li najít hodnotu, kterou je třeba odeslat, vyhledejte daný jazyk. Níže je uveden příklad hodnoty z IANA pro případ, kdy hledáme hodnotu, kterou je třeba odeslat pro turecké titulky:

%%

Subtag: tr
Description: Turkish
Added: 2005-10-16
Suppress-Script: Latn
%%

Subtag kód značí hodnotu tr. Toto je hodnota, kterou byste měli odeslat jako language na konci HTTP požadavku.

Popisek se vygeneruje z uvedeného jazyka. Bude viditelný pro výběr uživatelem v přehrávači. Pokud je například odeslán tr, štítek Türkçe bude vytvořen; pokud je odeslán de, štítek Deutsch se vytvoří.

Generování titulků

Generované titulky využívají technologii převodu řeči na text založenou na umělé inteligenci k vytvoření skrytých titulků pro vaše videa.

Než lze vygenerovat titulky, video musí být nahrané a ve stavu ready. V následujících příkladech URL adres se na UID videa odkazuje jako na <VIDEO_UID>. Chcete-li dostávat webhooky, jakmile video po nahrání přejde do stavu ready, postupujte podle pokynů uvedených v použití webhooků.

Titulky lze vygenerovat pro následující jazyky:

Při generování titulků je vytvářejte pro jazyk, kterým se mluví ve zvukové stopě.

Videa mohou obsahovat titulky pro několik jazyků, ale každý jazyk musí být jedinečný. Video tak může mít přiřazené anglické, francouzské a německé titulky, ale nemůže mít dva anglické titulky. Pokud jste již pro video nahráli anglické titulky, musíte je nejprve smazat, abyste mohli vytvořit vygenerované anglické titulky. Postup smazání titulků najdete níže.

<LANGUAGE_TAG> musí odpovídat formátu BCP 47. Značka pro angličtinu je en. V tagu můžete zadat oblast, například en-GB, které vykreslí štítek zobrazující British English pro titulky.

curl -X POST \
-H 'Authorization: Bearer <API_TOKEN>' \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/captions/<LANGUAGE_TAG>/generate
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

const caption = await client.stream.captions.language.create("<VIDEO_UID>", "en", {
	account_id: '<ACCOUNT_ID>',
});

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env, ctx): Promise<Response> {
		const videoId = "<VIDEO_UID>";
		const caption = await env.STREAM.video(videoId).captions.generate("en");
		return new Response(JSON.stringify({ caption }));
	},
} satisfies ExportedHandler<{ STREAM: StreamBinding }>;
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Příklad odpovědi:

{
  "result": {
    "language": "en",
    "label": "English (auto-generated)",
    "generated": true,
    "status": "inprogress"
  },
  "success": true,
  "errors": [],
  "messages": []
}

Výsledek poskytne status označující průběh generování titulků.
Existují tři stavy: inprogress, ready a error. Upozorňujeme, že se k popisku přidává (auto-generated).

Jakmile bude vygenerovaný titulek hotový, automaticky se objeví ve video přehrávači a v manifestu videa.

Pokud titulky přejdou do chybového stavu, můžete se pokusit je znovu vygenerovat tak, že je nejprve smažete a poté použijete výše uvedený koncový bod. Postup smazání je uveden níže.

Nahrání souboru

Všimněte si dvou změn, pokud upravíte vygenerovaný titulek: pole generated se změní na false a část popisku (auto-generated) bude odstraněna.

Chcete-li vytvořit nebo nahradit soubor s titulky:

curl -X PUT \
 -H 'Authorization: Bearer <API_TOKEN>' \
 -F file=@/Users/mickie/Desktop/example_caption.vtt \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/captions/<LANGUAGE_TAG>
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

const caption = await client.stream.captions.language.update("<VIDEO_UID>", "en", {
	account_id: '<ACCOUNT_ID>',
	file: '@/path/to/caption.vtt',
});

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env, ctx): Promise<Response> {
		const videoId = "<VIDEO_UID>";
		const language = "en";
		// Obtain a ReadableStream from a file upload, fetch, or other source
		const captionStream: ReadableStream = request.body!;
		const caption = await env.STREAM.video(videoId).captions.upload(language, captionStream);
		return new Response(JSON.stringify({ caption }));
	},
} satisfies ExportedHandler<{ STREAM: StreamBinding }>;
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Ukázková odpověď na přidání nebo úpravu titulků

{
  "result": {
    "language": "en",
    "label": "English",
    "generated": false,
    "status": "ready"
  },
  "success": true,
  "errors": [],
  "messages": []
}

Výpis titulků přiřazených k videu

Chcete-li zobrazit titulky přiřazené k videu. Upozorňujeme, že tento seznam výsledků bude obsahovat i vygenerované titulky, které jsou inprogress a error stav:

curl -H 'Authorization: Bearer <API_TOKEN>' \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/captions
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

const captions = await client.stream.captions.get("<VIDEO_UID>", {
	account_id: '<ACCOUNT_ID>',
});

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env, ctx): Promise<Response> {
		const videoId = "<VIDEO_UID>";
		const captions = await env.STREAM.video(videoId).captions.list();
		return new Response(JSON.stringify({ captions }));
	},
} satisfies ExportedHandler<{ STREAM: StreamBinding }>;
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Ukázková odpověď na získání titulků přiřazených k videu

{
  "result": [
    {
      "language": "en",
      "label": "English (auto-generated)",
      "generated": true,
      "status": "inprogress"
    },
    {
      "language": "de",
      "label": "Deutsch",
      "generated": false,
      "status": "ready"
    }
  ],
  "success": true,
  "errors": [],
  "messages": []
}

Načtení souboru s titulky

Chcete-li zobrazit soubor s titulky WebVTT, můžete odeslat požadavek GET:

curl \
-H 'Authorization: Bearer <API_TOKEN>' \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/captions/<LANGUAGE_TAG>/vtt

Ukázková odpověď na získání souboru s titulky pro video

WEBVTT

1
00:00:00.000 --> 00:00:01.560
This is an example of

2
00:00:01.560 --> 00:00:03.880
a WebVTT caption response.

Odstranění titulků

Chcete-li odstranit titulky přiřazené k vašemu videu:

curl -X DELETE \
 -H 'Authorization: Bearer <API_TOKEN>' \
 https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/captions/<LANGUAGE_TAG>
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

await client.stream.captions.language.delete("<VIDEO_UID>", "en", {
	account_id: '<ACCOUNT_ID>',
});

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env, ctx): Promise<Response> {
		const videoId = "<VIDEO_UID>";
		await env.STREAM.video(videoId).captions.delete("en");
		return new Response(JSON.stringify({ success: true }));
	},
} satisfies ExportedHandler<{ STREAM: StreamBinding }>;
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Pokud existuje záznam v errors pole v odpovědi, titulky nebyly odstraněny.

Ukázková odpověď na smazání titulků

{
  "result": "",
  "success": true,
  "errors": [],
  "messages": []
}

Omezení

Nejběžnější jazykové kódy

Kód jazyka Jazyk
zh Mandarínská čínština
hi Hindština
es Španělština
en Angličtina
ar Arabština
pt Portugalština
bn Bengálština
ru Ruština
ja Japonština
de Němčina
pa Paňdžábština
jv Jávština
ko Korejština
vi vietnamština
fr Francouzština
ur Urdština
it Italština
tr turečtina
fa Perština
pl Polish
uk Ukrajinština
my Birmánština
. Thajština